您的位置:首页 > 移动开发 > IOS开发

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

2014-02-27 09:18 435 查看
阻止GDB依附

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

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

#import <sys/ptrace.h>  

  

int main(int argc, charchar *argv[])  

{  

#ifndef DEBUG  

    ptrace(PT_DENY_ATTACH,0,0,0);  

#endif  

    @autoreleasepool {  

        return UIApplicationMain(argc, argv, nil, NSStringFromClass([WQMainPageAppDelegate class]));  

    }  

}  

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

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

#import <dlfcn.h>  

#import <sys/types.h>  

  

typedef int (*ptrace_ptr_t)(int _request, pid_t _pid, caddr_t _addr, int _data);  

#if !defined(PT_DENY_ATTACH)  

#define PT_DENY_ATTACH 31  

#endif  // !defined(PT_DENY_ATTACH)  

  

void disable_gdb() {  

    void* handle = dlopen(0, RTLD_GLOBAL | RTLD_NOW);  

    ptrace_ptr_t ptrace_ptr = dlsym(handle, "ptrace");  

    ptrace_ptr(PT_DENY_ATTACH, 0, 0, 0);  

    dlclose(handle);  

}  

  

int main(int argc, charchar *argv[])  

{  

#ifndef DEBUG  

    disable_gdb();  

#endif  

    @autoreleasepool {  

        return UIApplicationMain(argc, argv, nil, NSStringFromClass([WQMainPageAppDelegate class]));  

    }  

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: