iOS应用禁止动态调试

作者: 权宜平和 | 来源:发表于2019-07-17 11:30 被阅读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]));
        }
    }
    

    最后祝大家工作顺利!

    相关文章

      网友评论

        本文标题:iOS应用禁止动态调试

        本文链接:https://www.haomeiwen.com/subject/iozflctx.html