网络搜集好久才完成的初步成果,分享给大家:检测程序是否调试模式和trace,如果是则退出程序。
import
import
include
include
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[])
{
// DEBUG模式下定义了 宏 “DEBUG” release模式下则没有
ifdef DEBUG
disable_gdb();
endif
//#ifndef DEBUG
// disable_gdb();
//#endif
if (check_debugger()) {
disable_gdb();
}
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}