iOS逆向-越狱调试Ⅻ
Reveal
Reveal
是一款不需要重新运行项目,就可以动态调试程序UI
界面的工具。
安装
- (越狱)
iPhone
打开Cydia
搜索Reveal Loader
并安装 -
Mac
安装Reveal version 4(8796) - 手机的
/Library
目录下新建目录
$ mkdir RHRevealLoader
- 将电脑中的
RevealServer
可执行文件拷贝到iPhone
目录中
$scp -r –P 10010 RevealServer [root@localhost:/Library/RHRevealLoader/libReveal.dylib](mailto:root@localhost:/Library/RHRevealLoader/libReveal.dylib)
help->Show Reveal Library in Finder->iOS Library-> RevealServer可执行文件
5.重启手机,在设置中找到Reveal
,将需要进行UI
调试的程序的开关开启
6.打开Reveal
,手机打开运行Reveal
允许调试的软件。就可以在Reveal
上查看UI
了。
lz的越狱手机是11.3系统的,Reveal Loader没法用,😭
debugserver
平时开发中当我们给代码打断点,调试程序(lldb
),这一切都离不开一个媒介debugserver
,它负责将lldb
指令给到app
,然后app
将结果通过debugserver
传给lldb
debugserver
一开始是在Xcode
中的,一旦手机连接Xcode
信任后,debugserver
便会安装到手机上
但是缺少task_for_pid
权限,通过Xcode
安装的debugserver
,只能调试自己的app
,要想逆向别人的app
,这种肯定是行不通的。前面说到,不能调试别人app
的原因是权限不够,要想在没有源码的情况下调试别人的app
,就需要修改debugserver
权限。
Xcode目录:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/11.3/DeveloperDiskImage.dmg/usr/bin/debugserver
iPhone目录:
/Developer/usr/bin/debugserver
给debugserver增加 task_for_pid权限
1. 先把手机端的debugserver拷贝到Mac桌面上debugserver文件夹
$ scp -P 10010 root@localhost:/Developer/usr/bin/debugserver xxxxx/Desktop/debugserver
debugserver 100% 4757KB 19.6MB/s 00:00
2. 通过ldid查看原来的权限
$ cd xxxxx/Desktop/debugserver
$ ldid -e ./debugserver
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.springboard.debugapplications</key>
<true/>
<key>com.apple.backboardd.launchapplications</key>
<true/>
<key>com.apple.backboardd.debugapplications</key>
<true/>
<key>com.apple.frontboard.launchapplications</key>
<true/>
<key>com.apple.frontboard.debugapplications</key>
<true/>
<key>run-unsigned-code</key>
<true/>
<key>seatbelt-profiles</key>
<array>
<string>debugserver</string>
</array>
<key>com.apple.diagnosticd.diagnostic</key>
<true/>
<key>com.apple.security.network.server</key>
<true/>
<key>com.apple.security.network.client</key>
<true/>
</dict>
</plist>
3. 输出权限到entitlement.plist文件中
$ ldid -e ./debugserver > ./entitlement.plist
4. 在entitlement.plist增加task_for_pid-allow,get-task-allow和platform-application权限

5. 重签名debugserver并拷贝至手机的/usr/bin目录下
$ ldid -Sentitlement.plist debugserver
$ ldid -e ./debugserver //查看重签名后的debugserver的权限
$ scp -P 10010 debugserver root@localhost:/usr/bin/
debugserver 100% 4743KB 20.5MB/s 00:00
debugserver附加进程
1. iPhone中开启debugserver服务
$ debugserver 主机地址:端口号 –a 应用进程
由于主机地址是当前手机,可以使用*代替
端口号:启动server服务,开放端口,让远程的LLDB通过sever调试进程
2. Mac上启动LLDB连接iPhone
启动LLDB
$ lldb
连接debugserver
(lldb)process connect connect://手机IP:服务端口号
问题:在iOS11.3.1系统下碰到下面的问题,暂时还没有解决😭
xxx-iPhone:/ root# /usr/bin/debugserver *:1235 -a "QQ"
debugserver-@(#)PROGRAM:LLDB PROJECT:lldb-900.3.57..2
for arm64.
Attaching to process QQ...
error: failed to attach to process named: "" (os/kern) invalid argument
Exiting.