《iOS防护01》ptrace防护

获取ptrace.h头文件

prace.h是系统的C语言文件。

  1. 首先用Xcode创建一个命令行程序


    截屏2020-10-29下午5.33.45.png
  2. 命令行程序的 mian.m 中导入 ptrace 头文件
    import


    截屏2020-10-29下午5.38.06.png
  3. 查看 ptrace.h 的定义,复制ptrace.h中的代码


    截屏2020-10-29下午5.41.29.png
使用ptrace进行防护
  1. 首先用Xcode创建一个工程名为ptraceDemo的ios工程。
  2. 创建一个头文件PtraceHeader.h,将之前获取的ptrace.h的代码粘贴进去。
  3. 在ViewController.m中导入头文件PtraceHeader.h,并使用ptrace函数进行反调试防护。

ptrace函数的原型为:
int ptrace(int _request, pid_t _pid, caddr_t _addr, int _data);
/*
参数1: ptrace要做的事情(PT_DENY_ATTACH代表拒绝附加)
参数2: 要操作的进程的id (0表示当前进程)
参数3: 地址
参数4:数据
参数3和参数4取决与第一个参数
*/

截屏2020-10-29下午5.47.31.png

通过Xcode在iPhone手机运行ptraceDemo,发现运行后程序直接闪退了。而在手机桌面点击app图标后正常运行。

这是因为通过Xcode安装应用到手机,lldb默认会附加到应用,ptrace会拒绝附加,所以会闪退。

总结

ptrace防护的特点:

  • 重签名应用后,通过Xcode运行闪退
  • 手动打开应用正常运行

如果程序有以上特点,说明应用很可能采用了ptrace进行防护。

接下来可以通过对重签名后的应用添加符号断点,来验证app确实是用了ptrace。

  1. 添加符号断点


    截屏2020-10-30上午10.22.25.png
  1. 运行app后出现下图情况,说明app确实使用了ptrace防护
截屏2020-10-30上午10.24.51.png

你可能感兴趣的:(《iOS防护01》ptrace防护)