iOS 逆向:动态调试其它APP的两种姿势
2021-06-14 本文已影响0人
许久__
动态调试其它APP的两种姿势:
1. 拿到可执行文件动态调试APP,有两种方案:
1.1 通过开发证书签名,修改应用的权限文件,用Xcode直接Attach应用进程ID:
Code signing Entitlements中有一项很重要的key值,就是get-task-allow,
get-task-allow决定了这个app能否被Xcode调试。一般来说,上架了的程序,这个key值为空,默认为NO。
步骤:
1. ldid -e ./wework > ./wework.plist
2. 修改wework.plist 中的 get-task-allow:YES
3. ldid -Swework.plist ./wework
4. chmod 755 ./wework
5. 用开发证书重新打包并安装至越狱机上
1.1.1 我以企业微信为例子:
![](https://img.haomeiwen.com/i1927676/3a83103413e95331.png)
1.1.2 通过Xcode调试工具看UI界面:
由此可见:
1. 企业微信登录所在的控制器是:WWKWeChatLoginViewController
2. 点击微信登录按钮调用的方法是:loginButtonClicked:
![](https://img.haomeiwen.com/i1927676/148f3d0b4b9a2d57.png)
1.1.3 通过Hopper Disassembler工具查看loginButtonClicked:在内存中具体位置
![](https://img.haomeiwen.com/i1927676/a36a35373aaedd8e.png)
1.1.4 由于使用了ASLR技术,断点得加上一段偏移
breakpoint set - a 时得加上这一段偏移
image list -o -f | grep wework
breakpoint set -a 0x00000001009f8a88(hopper里的方法地址)+0x00000000000e4000(地址偏移)
![](https://img.haomeiwen.com/i1927676/435c1a08d042e83a.png)
1.2 通过Debugserver + Reveal + LLDB调试APP:
1.2.1 我以调试微信APP为例
步骤:
1. 先开个命令行转发端口: python tcprelay.py -t 22:10010
2. 再开个命令行转发端口: python tcprelay.py -t 10011:10011
3. 开个命令行登录手机:
3.1 ssh root@localhost -p 10010
3.2 debugserver *:10011 -a "WeChat"
4. 开个命令行登录手机:
4.1 ssh root@localhost -p 10010
4.2 实用cycript调试应用
5. 开个命令行使用LLDB:
5.1 lldb
5.2 process connect connect://localhost:10011
![](https://img.haomeiwen.com/i1927676/ed474b5db741679a.png)
1.2.2 通过Reveal找到需要调试的视图
![](https://img.haomeiwen.com/i1927676/d02cc2d43e01cfa2.png)
1.2.3 找到点击声音锁登录调用的函数onLastUserVoicePrintLogin:
![](https://img.haomeiwen.com/i1927676/5238ed50e049bc00.png)
1.2.4 通过Hopper Disassembler工具查看onLastUserVoicePrintLogin:在内存中具体位置
![](https://img.haomeiwen.com/i1927676/5ee063057002604a.png)
1.2.5 由于使用了ALSR技术,所以断点应该这样打:
image list -o -f | grep WeChat
breakpoint set -a 0x000000010245e318(hopper里的方法地址)+0x00000000000f4000(地址偏移)
![](https://img.haomeiwen.com/i1927676/eb62688abc6b760a.png)