获取ptrace.h头文件
prace.h是系统的C语言文件。
-
首先用Xcode创建一个命令行程序
截屏2020-10-29下午5.33.45.png -
命令行程序的 mian.m 中导入 ptrace 头文件
import <sys/ptrace.h>
截屏2020-10-29下午5.38.06.png -
查看 ptrace.h 的定义,复制ptrace.h中的代码
截屏2020-10-29下午5.41.29.png
使用ptrace进行防护
- 首先用Xcode创建一个工程名为ptraceDemo的ios工程。
- 创建一个头文件PtraceHeader.h,将之前获取的ptrace.h的代码粘贴进去。
- 在ViewController.m中导入头文件PtraceHeader.h,并使用ptrace函数进行反调试防护。
截屏2020-10-29下午5.47.31.pngptrace函数的原型为:
int ptrace(int _request, pid_t _pid, caddr_t _addr, int _data);
/*
参数1: ptrace要做的事情(PT_DENY_ATTACH代表拒绝附加)
参数2: 要操作的进程的id (0表示当前进程)
参数3: 地址
参数4:数据
参数3和参数4取决与第一个参数
*/
通过Xcode在iPhone手机运行ptraceDemo,发现运行后程序直接闪退了。而在手机桌面点击app图标后正常运行。
这是因为通过Xcode安装应用到手机,lldb默认会附加到应用,ptrace会拒绝附加,所以会闪退。
总结
ptrace防护的特点:
- 重签名应用后,通过Xcode运行闪退
- 手动打开应用正常运行
如果程序有以上特点,说明应用很可能采用了ptrace进行防护。
接下来可以通过对重签名后的应用添加符号断点,来验证app确实是用了ptrace。
-
添加符号断点
截屏2020-10-30上午10.22.25.png
- 运行app后出现下图情况,说明app确实使用了ptrace防护
网友评论