iOS逆向

调试Xcode

2022-08-04  本文已影响0人  笑破天

Xcode功能很强大,经常疑惑于Xcode的一些功能是怎么实现的

1.禁用Rootless 与开启调试功能

为了提高系统的安全性,Mac OS X 10.11开始引入了Rootless(System Integrity Protection),在Rootless开启的情况下,LLDB无法调试到其它进程(模拟器内的进程除外).如果想调试其它进程,需要关闭Rootless.

lldb -n Finder
error: attach failed: cannot attach to process due to System Integrity Protection

M1恢复模式+禁用Rootless:
关机,长按开机按键15s左右,选项,选择管理员用户输入密码,顶部菜单中找到 Utilities 菜单并选择 Terminal,输入以下命令

csrutil disable // 禁用
reboot // 重启

2. attach Xcode

  1. 打开一个终端标签页(cmd+t),按下cmd+shift+i设置标签标题为LLDB,另开一个标签页,起名为Xcode stderr。命名只是为了方便区分,标签名字不同与此,可通过tty命令查看,后续重定向process log会用到。通过命令echo "hello debugger" 1>/dev/ttys002来验证tty可用性。(该步骤非必须)

2.进入lldb,退出是ctrl+d

3.绑定目标可执行文件路径

(lldb) file /Applications/Xcode.app/Contents/MacOS/Xcode
Current executable set to '/Applications/Xcode.app/Contents/MacOS/Xcode' (x86_64).

其中/Applications/Xcode.app/Contents/MacOS/Xcode为Xcode的可执行路径,在Xcode打开的情况下可以通过命令ps -ef `pgrep -x Xcode`获取

4.启动并重定向到终端ttys002

(lldb) process launch -e /dev/ttys002 --
Process 92898 launched: '/Applications/Xcode.app/Contents/MacOS/Xcode' (x86_64)

至此,已成功attach上Xcode了

3. 调试Xcode

lldb 进入lldb
ctrl+d 退出lldb
ctrl+c 进入断点模式
c 跳过断点
(lldb) b -[NSView hitTest:] 设置断点
(lldb) po $rdi 打印mac构架寄存器
(lldb) po [[[$rdi superclass] superclass] superclass]
(lldb) help breakpoint 帮助命令

4. Xcode debug app怎么实现内存监控

通过Accessibility Inspector(Xcode自带)去审查,发现类型为NSTextFieldCell

遇到问题

1、lldb -n "Xcode"报错

(lldb) process attach --name "Xcode"
error: attach failed: attach failed ((os/kern) invalid argument)

参考:
小试 Xcode 逆向:App 内存监控原理初探
LLDB 学习笔记
深入iOS系统底层之CPU寄存器介绍

上一篇下一篇

猜你喜欢

热点阅读