iOS应用禁止动态调试

闲话少说,直接上步骤

步骤一、打开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]));
    }
}

最后祝大家工作顺利!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,848评论 0 10
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,455评论 0 9
  • 谷歌2017发布会更新了挺多内容的,而且也发布了AndroidStudio3.0预览版,一些功能先睹为快。(英语一...
    AFinalStone阅读 1,460评论 0 3
  • 不现在的90后被贴上了不务正业的标签。并不仅仅是他们好高骛远,跟现在的一些无良公司也有关系。 现在的很多企业为了节...
    dan1006阅读 226评论 0 1
  • 老崔赠送了小青柑一桶,约有半斤。在日本旅居的老友也寄来白檀香一盒,烟少而味甜,不胜欣喜,二十余年的往昔情义,又浮闲...
    我知道你来所以我等阅读 254评论 2 2