ITPub博客

首页 > 移动开发 > IOS > iOS应用反调试技术详解:使用ptrace防止调试器附加的方法与代码实现

iOS应用反调试技术详解:使用ptrace防止调试器附加的方法与代码实现

原创 IOS 作者:写得不如修的多 时间:2026-04-22 13:26:55 0 删除 编辑

反调试主要分为两种,第一种阻止调试器附加,第二种是检测是否有调试器存在

1.ptrace是系统用来对运行中的进程进行调试和跟踪的工具,通过ptrace,可以对另一个进程实现调试跟踪。但是里面提供了一个非常有用的参数,就是PT_DENY_ATTACH,const值是31,这个参数用户告诉系统阻止调试器附加。

除了手动编码实现反调试,开发者还可以借助专业工具如IpaGuard来加强应用保护。IpaGuard是一款iOS IPA文件混淆工具,提供代码混淆、资源文件混淆和调试信息清理等功能,能有效增加反编译和调试的难度。

在main.m里面加入以下代码:

#import <UIKit/UIKit.h>
#import "AppDelegate.h"
#import <dlfcn.h>
#import <sys/types.h>
 
typedef int  (*ptrace_ptr_t)(int _request,pid_t pid,caddr_t _addr,int _data);
#ifndef PT_DENY_ATTACH
#define PT_DENY_ATTACH 31
#endif
 
int main(int argc, char * argv[]) {
    @autoreleasepool {
        // ptrace(PT_DENY_ATTACH,0,0,0); //系统函数并没有暴露出此方法所以不能直接通过此方式调用
        void *handle = dlopen(0, RTLD_NOW|RTLD_GLOBAL);
        ptrace_ptr_t ptrace_ptr = (ptrace_ptr_t)dlsym(handle, "ptrace");
        ptrace_ptr(PT_DENY_ATTACH,0,0,0);
         
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

在上面的代码中,本来是直接调用上面被注释的那一行代码就可以了,不过由于不是公开的函数所以没法直接调用。所以我们通过dlopen的方式,当path 参数为0是,他会自动查找 LD_LIBRARY_PATH,DYLD_LIBRARY_PATH, $DYLD_FALLBACK_LIBRARY_PATH 和 当前工作目录中的动态链接库,通过句柄找到对应的ptarce对应的地址,然后传入PT_DENY_ATTACH。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70047439/viewspace-3116560/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
iOS开发人员,iOSapp调试

注册时间:2025-09-04

  • 博文量
    135
  • 访问量
    132599