ios--安全攻防-阻止GDB依附

阻止GDB依附


文章出处:http://blog.csdn.net/yiyaaixuexi/article/details/18353423#comments

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, 000);  
  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. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值