美文网首页
debugserver lldb调试砸壳

debugserver lldb调试砸壳

作者: Jackson_Z | 来源:发表于2023-02-10 10:33 被阅读0次

    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/

    相关文章

      网友评论

          本文标题:debugserver lldb调试砸壳

          本文链接:https://www.haomeiwen.com/subject/bplkkdtx.html