调试一个无法调试的应用程序

主要观点:介绍了一款阻止调试器附着、若尝试注入代码则提前退出、带有越狱检测功能且若越狱运行会使手机崩溃的app,并分别探讨了其阻止调试器附着(PT_DENY_ATTACH)、使手机崩溃、阻止代码注入的保护机制及绕过方法,包括通过设置断点、内联汇编、修改二进制等方式。

关键信息:

  • PT_DENY_ATTACH通过ptrace函数实现,有简单和复杂两种集成方式,简单方式直接调用函数,复杂方式通过内联汇编直接调用系统调用。
  • 使手机崩溃的函数是在通知com.apple.tw.twrr触发时运行,会进入无限循环调用+[UIScreen mainScreen]snapshotViewAfterScreenUpdates:,导致内存占用过高使手机崩溃。
  • 阻止代码注入是因为注入代码后丢弃了原有应用签名,导致containerURLForSecurityApplicationGroupIdentifier:方法返回nil,从而使应用崩溃,可通过创建框架替换该方法来解决。

重要细节:

  • 介绍了在越狱手机上使用sshdebugserver进行调试的步骤,以及在不同情况下遇到的问题和解决方法。
  • 详细说明了在二进制文件中搜索ptrace系统调用的方法,包括使用armconverter.com搜索指令对应的字节。
  • 展示了在lldb中设置断点、跳过指令、获取函数地址等操作的过程。
  • 提到了在不同设备(越狱和非越狱)上绕过各种保护机制的方法和注意事项。
阅读 7
0 条评论