ios安全攻防(四)阻止GDB依附

GDB是大多数hackers的首选,阻止GDB依附到应用的常规办法是:


  1. #import <sys/ptrace.h>  
  2.   
  3. int main(int argc, charchar *argv[])  
  4. {  
  5. #ifndef DEBUG  
  6.     ptrace(PT_DENY_ATTACH,0,0,0);  
  7. #endif  
  8.     @autoreleasepool {  
  9.         return UIApplicationMain(argc, argv, nil, NSStringFromClass([WQMainPageAppDelegate class]));  
  10.     }  
  11. }  




但遗憾的是,iPhone真实的运行环境是没有sys/ptrace.h抛出的。虽然 ptrace 方法没有被抛出, 但是不用担心,我们可以通过dlopen拿到它。

dlopen: 当path 参数为0是,他会自动查找 $LD_LIBRARY_PATH,$DYLD_LIBRARY_PATH, $DYLD_FALLBACK_LIBRARY_PATH 和 当前工作目录中的动态链接库. 

  1. #import <dlfcn.h>  
  2. #import <sys/types.h>  
  3.   
  4. typedef int (*ptrace_ptr_t)(int _request, pid_t _pid, caddr_t _addr, int _data);  
  5. #if !defined(PT_DENY_ATTACH)  
  6. #define PT_DENY_ATTACH 31  
  7. #endif  // !defined(PT_DENY_ATTACH)  
  8.   
  9. void disable_gdb() {  
  10.     void* handle = dlopen(0, RTLD_GLOBAL | RTLD_NOW);  
  11.     ptrace_ptr_t ptrace_ptr = dlsym(handle, "ptrace");  
  12.     ptrace_ptr(PT_DENY_ATTACH, 0, 0, 0);  
  13.     dlclose(handle);  
  14. }  
  15.   
  16. int main(int argc, charchar *argv[])  
  17. {  
  18. #ifndef DEBUG  
  19.     disable_gdb();  
  20. #endif  
  21.     @autoreleasepool {  
  22.         return UIApplicationMain(argc, argv, nil, NSStringFromClass([WQMainPageAppDelegate class]));  
  23.     }  
  24. }  

你可能感兴趣的:(ios安全攻防(四)阻止GDB依附)