debugserver lldb调试砸壳

2023-02-10  本文已影响0人  Jackson_Z

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/

上一篇下一篇

猜你喜欢

热点阅读