iOS逆向动态调试

1.拷贝越狱手机/Developer/usr/bin目录下的debugserver到Mac电脑,在mac端输入

scp -P 2222 root@localhost:/Developer/usr/bin/debugserver ~/debugserver

2.对debugserver进行瘦身(iOS11可以不用瘦身,因为只支持64位构架的程序),在debugserver所在目录输入lipo -info debugserver . 在终端输入:lipo -thin armv7 debugserver -output debug-server

3.在xcode里新建一个plist文件

<plist version="1.0">
    <dict>
        <key>com.apple.springboard.debugapplications</key>
        <true/>

        <key>get-task-allow</key>

        <true/>

        <key>task_for_pid-allow</key>

        <true/>

        <key>run-unsigned-code</key>

        <true/>
    
    </dict>
</plist>

然后把plist文件拷贝到电脑的debugserver同一个目录下 ,在终端输入

codesign -s - --entitlements en.plist -f debugserver

可以给我们的debugserver赋上task_for_pid权限。

4.然后在终端里输入: codesign -d --entitlements - ./debugserver

查看授权文件描述, plist文件写入的东西

5.终端里输入: scp -P 2222 ./debugserver root@localhost:/usr/bin/debugserver

将debugserver拷贝到手机

6.ps aux 查看手机进程

7.Mac切换到手机 cd /usr/bin/ 以后, 输入chmod +x debugserver,给权限

10.debugserver *:1234 -a WhatsApp
或者

root# debugserver *:1234 -x auto
/var/containers/Bundle/Application/24550860-1E7B-4A59-9753-9E7040DF0DAA/WMMimi.app/WMMimi

通过usb-replay的方式连接debugserver,

(lldb) process connect connect://localhost:1234

报错了

lldb窗口报:

error: failed to get reply to handshake packet

debugserver窗口报:

error: rejecting incoming connection from ::ffff:127.0.0.1 (expecting ::1)

解决:

把debugserver启动试设置的监听 *:1234 改成 localhost:1234

root# debugserver localhost:1234 -x auto
/var/containers/Bundle/Application/24550860-1E7B-4A59-9753-9E7040DF0DAA/WMMimi.app/WMMimi

process connect connect://localhost:1234,

没做端口转发输入

process connect connect://IP

12.连接成功后,输入c继续,然后image list -o -f ,获取基地址

13.拷贝基地址,然后在Hopper里运行你砸完壳以后的 可执行文件,然后找你想调试的函数名,记录下这个函数名的偏移地址,

然后在终端输入br s -a ’基地址+0x偏移地址’,开始断点调试。
在这里插入图片描述如果报错:

warning: failed to set breakpoint site at 0x00000000014cc35 for breakpoint 1.1: error: 0 sending the breakpoint request

先试一下用image list 获取基地址,因为跟image list -o -f获取的地址是不一致的,在打一下断点试试, 如果还是失败,那么用ida去获取mach-o 头的偏移量
在这里插入图片描述
br s -a ’基地址+0x偏移地址-0x100000000’ 设置断点成功,
使用

di --start-address '0x0000000100da4000+0x00000000014cc3e4' -count 10

查看,如果和hooper或者ida里的一致,说明打的断点的位置是正确的
在这里插入图片描述
如果不一致,那么你就需要用file 命令查看一下这个macho

file xxFramework

在这里插入图片描述dynamically说明是动态库,那么image list 就去找动态库的加载地址(而不是主二进制的)下断点

Frameworks/xxramework.framework/xxFramework 
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值