iOS逆向 -- 越狱手机LLDB调试 (实战)

LLDB调试原理

通常正向开发,通过Xcode 调试手机是这样的:

1.Xcode 会给手机安装一个 debugserver

2.debugserver 依附于某个程序进程

3.Mac上Xcode 链接debugserver,并发送指令 , debugserver 对程序进行调试。

那么如何在越狱手机上对App进行调试 (不用Xcode)

1. 首先USB连接手机 ,cd 到 /Developer/usr/bin下,我们会发现有个文件 debugserver

2.我们以虎牙为例,打开虎牙App,并找到进程名字 kiwi, 调用指令:

./debugserver *:12346 -a kiwi

12346 为debugserver 对外开放的端口,也可以写别的数字

这时候我们发现虎牙已经进入了断电模式,无法操作了

3.打开mac终端 执行 LLDB 就会进入断点模式下

然后再LLDB模式下 执行指令

process connect connect://172.20.10.9:12346

确保mac和手机是在同一个局域网下, 172.29.10.9为手机的联网的ip地址

这时候通过LLDB指令进行 手机调试了。

image list

 

iOS逆向 -- 越狱手机LLDB调试 (实战)_第1张图片

以上是通过WiFi链接 

接下里说一下 如何通过USB进行调试呢(更方便 更快)

之前写了个映射端口的脚本,

python2 /Users/evol/evolshells/python-client/tcprelay.py -t 22:12345

采用了一个脚本 进行映射 ,现在加一个端口映射 12346

python2 /Users/evol/evolshells/python-client/tcprelay.py -t 22:12345 12346:12346

然后重新执行

这样端口就映射好了

然后接下来重复上面的过程

./debugserver *:12346 -a kiwi

Mac终端进入 LLDB模式下 执行

process connect connect://127.0.0.1:12346

即可进入调试状态

 

越狱手机debugserver 权限问题

可能有同学已经发现 每次cd到/Developer/usr/bin下 执行debugserver 不方便,能不能在任意地方都能执行呢?

第一步,在Xcode里找到对应版本的debugserver,我这里越狱手机是9.0.2系统,所以我这里的目录是

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/9.0

该文件夹下有个dmg 文件 双击打开,在usr/bin/ 目录下有个debugserver文件 ,将它拷贝到桌面来先。

第二步,给debugserver赋权限

终端到桌面目录下,执行ldid -e debugserver > debugserver.entitlements ,这样就会生成一个debugserver.entitlements 的plist文件

我们给plist文件添加两个字段

Key :  task_for_pid-allow  Value:为Boolean类型,YES

Key :  get-task-allow  Value:为Boolean类型,YES

然后执行 ldid -Sdebugserver.entitlements debugserver

这时候就可以把 debugserver 直接拷贝到手机的 /usr/bin 目录下 

直接使用即可

实战

实战项目是给虎牙我的界面 立即登录按钮 添加一个断点

第一步 通过Reveal找到该按钮的内存地址 (也可以通过之前的搜索查找)

第二步 定位到该按钮的target 和 action

iOS逆向 -- 越狱手机LLDB调试 (实战)_第2张图片

为YYMyInfoViewController 该类的 myHeaderCellTap方法

第三步 动过之前安装的frida砸壳, sh dump.sh 虎牙直播     (我这里之前配置好的,没有的话看前面的 砸壳章节)

第四步 将ipa解压拿到执行文件 并进行 hopper分析

第五步 从hopper里搜索该方法的虚拟内存地址

iOS逆向 -- 越狱手机LLDB调试 (实战)_第3张图片

第六步 在LLDB模式下 执行  image list 查看macho文件地址

然后 - 0x100000000 得到 ALSR地址

第七步 将第五步地址+ALSR地址相加 就得到该方法的内存地址

0x00000001001c4f88+0x0x0000000000008000

第八步 LLDB 如果在非断点模式下 则执行 process interrupt 进入断点模式 

然后 执行 b -a 0x00000001001c4f88+0x0x0000000000008000 

然后会显示 你已成功下好断点

continue 过一下

然后点击按钮 断点就生效了。。

你可能感兴趣的:(iOS逆向 -- 越狱手机LLDB调试 (实战))