iOS应用禁止动态调试
2019-07-17 本文已影响0人
权宜平和
闲话少说,直接上步骤
步骤一、打开main.m文件,导入头文件#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
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[])
{
disable_gdb();
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([T_TAppDelegate class]));
}
}
如图所示:
调用禁止调试代码
此时您用模拟器或真机调试您的APP的时候会发现调试不了,现象就是----xcode编译运行完毕代码的时候,突然就和模拟器或真机断开连接了。此时说明已经可以禁止其他人动态调试您的应用了。
此时可能会有人问,那我想测试的时候可以调试,打包之后禁止调试,该如何做呢。遇到这个疑问请看下面的代码:
int main(int argc, char * argv[])
{
#ifdef RELEASE
disable_gdb(); // 只在release(archive)时调用这个代码
#endif
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([^_^AppDelegate class]));
}
}