如何防止你的应用被GDB附加进程?
1.ptrace 介绍
https://en.wikipedia.org/wiki/Ptrace
2.阻止GDB附加 (来自念茜的博客)
http://blog.csdn.net/yiyaaixuexi/article/details/18222339
3.实际代码
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
#import <dlfcn.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, char * argv[]) {
#ifndef DEBUG
disable_gdb();
#endif
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
如果你在Xcode调试环境下,去掉#ifndef DEBUG #endif这句话,你会发现,Xcode无法调试该应用;因为动态的加载了ptrace,然后给传输的宏是PT_DENY_ATTACH 拒绝附加进程
到此为止,就到达目的了