iOS逆向动态调试代码逻辑的手段对比
- iOS逆向动态调试代码逻辑的手段对比
- 图形界面的
- 基于
Xcode的
MonkeyDev(+Xcode)
- 优点
- 缺点
- 对于原有复杂的
entitlement权限的app:调试运行起来,会有各种问题
- 后来确认,是丢失了
entitlement权限的问题
- 每次调试要重新安装
app,对于大的app,比较耗时
iOSOpenDev(+Xcode) + 动态断点调试
- 优点
- 可以触发断点暂停去查看各种变量值
- 可以完整利用
iOS的ObjC底层的机制,实现调试的目的
- 比如
<NSXPCConnection: 0x281cfc640>可以去查看po的描述po [0x281cfc640 _shortMethodDescription],可以看到所有的属性
- 对比:
Frida中,就难以方便的和完整的查看到这些属性
- 缺点
- 前提:要
app或进程可调试
- 注:关于app或进程可调试
iOS 15+
XinaA15:自带支持,很好
- 但是只支持
arm64e的A12+的芯片(比如iPhone11),而arm64e有PAC,导致ARM代码模拟和反编译,会更困难
palera1n:的rootful越狱,暂时完美支持任意app和进程可调试
- 但是可通过
codesign重签名暂时实现单个的app或进程的可调试
- 改动代码要重新编译安装插件,重新触发调试环境
- 命令行的
iOSOpenDev(+Xcode)+仅hook输出log日志
- 优点
- 只要hook代码写好,可以hook的范围比较广,几乎任何app或进程均可
- 缺点
- 只能从Console.app控制台中查看hook的log日志,无法动态调试
lldb(+debugserver)
- 优点
- 重签名后的
debugserver,支持调试任意app或进程
- 缺点
- 只能用命令行的
lldb(无法像Xcode中一样带图形界面使用)
Frida
Frida(+js脚本)
frida-trace
- 优点
- 可以输出带缩进的
ObjC函数调用关系,且带颜色,易读
- 缺点
- 对于输出内容太长,虽然支持导出到日志,但是却丢失了缩进,不利于查看函数调用关系