debugserver的Mac存放路径:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/De viceSupport/9.1/DeveloperDiskImage.dmg/usr/bin/debugserver
debugserver的iPhone存放路径:/Developer/usr/bin/debugserver
1.从手机上拷贝到电脑上并添加权限
导出权限文件
ldid -e debugserver > debugserver.entitlements
编辑debugserver.entitlements
添加以下权限
get-task-allow:true
task_for_pid-allow:true
删除以下权限
com.apple.security.network.server
com.apple.security.network.client
seatbelt-profiles
通过ldid命令重新签名
ldid -Sdebugserver.entitlements debugserver
由于/Developer/usr/bin/
目录是只读的,所以我们将重新签名过的debugserver
放在/usr/bin/
下,然后对debugserver
增加运行权限:chmod +x /usr/bin/debugserver
,就可以在终端使用debugserver
了
拷贝到/usr/bin/
scp -P 2222 debugserver root@127.0.0.1:/usr/bin/
关于权限的签名,也可以使用codesign
# 查看权限信息
$ codesign -d --entitlements - debugserver
# 签名权限
$ codesign -f -s - --entitlements debugserver.entitlements debugserver
# 或着简写为
$ codesign -fs- --entitlements debugserver.entitlements debugserver
2.建立端口映射
下载usbmuxd-1.0.8.tar.gz工具,需安装python2
# -t添加多个端口映射 把手机的22端口映射到电脑的2222 手机的1234端口映射到电脑的1234
python ~/Documents/usbmuxd/python-client/tcprelay.py -t 22:2222 1234:1234
3.新开终端窗口,让debugserver附加到某个APP进程
连接手机:ssh -p 2222 root@127.0.0.1
附加进程:debugserver *:端口号 -a 进程
debugserver 127.0.0.1:1234 -a WeChat
4.新开终端窗口启动LLDB
,远程连接iPhone
上的debugserver
启动LLDB:
$ lldb
(lldb)
连接debugserver服务
#(lldb) process connect connect://手机IP地址:debugserver服务端口号
process connect connect://127.0.0.1:1234
使用LLDB的c命令让程序先继续运行
(lldb) c
接下来就可以使用LLDB命令调试APP了
小结
#在Mac上打开命令行窗口,让1234端口与1234端口映射、2222与22端口映射
`$ python ~/Documents/usbmuxd/python-client/tcprelay.py -t 22:2222 1234:1234`
#在Mac上新建命令行窗口,然后SSH登陆到手机
`$ ssh -p 2222 root@127.0.0.1`
#登录到手机后,启动手机的debugserver服务,让其与App建立交互
`iPhone:~ root# debugserver 127.0.0.1:1234 -a WeChat`
#在Mac上新建命令行窗口,进入lldb工具,并且让LLDB与debugserver建立交互
`$ lldb`
`(lldb) process connect connect://127.0.0.1:1234`
#使用LLDB命令c,先让程序继续运行
`(lldb) c`
5.lldb砸壳
# 获取砸壳app的路径
ps aux | grep WeChat
#把加密文件复制到电脑
scp -P 2222 root@127.0.0.1:/var/containers/Bundle/Application/9661BAB6-D0FC-442C-AB00-A0F86CA35F2D/WeChat.app/WeChat ./WeChat
# 备份一下
cp WeChat WeChat_bk
# 获取offset
otool -l WeChat | grep crypt
# 返回
cryptoff 105246720
cryptsize 4096
cryptid 1
# lldb 找出可执行文件的偏移地址
(lldb) image list WeChat
[ 0] 245CD1CB-A654-3BE5-A714-7B3C533D1427 0x0000000100858000 /private/var/containers/Bundle/Application/9661BAB6-D0FC-442C-AB00-A0F86CA35F2D/WeChat.app/WeChat (0x0000000100858000)
# dump 出可执行文件被加密部分的二进制信息
(lldb) memory read --force --outfile ./decrypted.bin --binary --count <cryptsize> <image offset>+<cryptoff>
memory read --force --outfile ./decrypted.bin --binary --count 4096 0x0000000100858000+105246720
#有了这个补丁文件,就可以对原来的可执行文件打补丁了
osx$ dd seek=<cryptoff> bs=1 conv=notrunc if=./decrypted.bin of=./WeChat
dd seek=105246720 bs=1 conv=notrunc if=./decrypted.bin of=./WeChat
#至此,我们就使用 lldb 完成对应用的手动砸壳。
#最后,为了让可执行文件适用于某些应用(如 class-dump-z),我们需要将 cryptid 字段手动置为 0。这一步可以通过 MachOView 来完成。
image.png
参考链接:
http://events.jianshu.io/p/188af3c97fac
http://www.swiftyper.com/2017/07/04/decrypting-app-using-lldb/
网友评论