反调试主要分为两种,第一种阻止调试器附加,第二种是检测是否有调试器存在
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。
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦