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
函数调用关系,且带颜色,易读
- 缺点
- 对于输出内容太长,虽然支持导出到日志,但是却丢失了缩进,不利于查看函数调用关系