iOS在路上iOS经验分享

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]));
    }
}

最后祝大家工作顺利!

上一篇下一篇

猜你喜欢

热点阅读