iOS逆向工程(八):动态调试

2020-03-18  本文已影响0人  冰风v落叶

动态调试

一、什么是动态调试
二、Xcode动态调试的原理
debugserver在Mac上的路径是:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/13.2/DeveloperDiskImage.dmg/usr/bin/debugserver

debugserver安装到手机的路径是:
/Developer/usr/bin/debugserver
三、动态调试任意App的原理
四、动态调试任意App的第一步:将有权限的debugserver安装到手机

这一步是一劳永逸的,安装完后,以后只需要第二步和第三步,就可以启动动态调试了

五、动态调试任意App的第二步:让debugserver与App建立交互
打开命令行:sh usb.sh

新建命令行:sh login.sh,登录到手机后

让debugserver附加到某个App进程:$ debugserver 127.0.0.1:端口号 -a 进程名

例如让debugserver附加到微信的进程:$ debugserver 127.0.0.1:10011 -a WeChat
六、动态调试任意App的第三步:让debugserver与LLDB建立交互
启动LLDB
` $ lldb    `

连接到iPhone的debugserver服务
` (lldb) process connect connect://手机IP地址:debugserver服务的端口号  `

以微信为例,连接到iPhone的debugserver服务:
` (lldb) process connect connect://10.88.211.170:10011  `
(lldb) process connect connect://localhost:10011
Process 1194 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGSTOP
    frame #0: 0x000000018da64634 libsystem_kernel.dylib`mach_msg_trap + 8
libsystem_kernel.dylib`mach_msg_trap:
->  0x18da64634 <+8>: ret

libsystem_kernel.dylib`mach_msg_overwrite_trap:
    0x18da64638 <+0>: mov    x16, #-0x20
    0x18da6463c <+4>: svc    #0x80
    0x18da64640 <+8>: ret
Target 0: (WeChat) stopped.
七、使用USB方式动态调试任意App
在Mac上输入命令,让10011端口与10011端口映射、10010与22端口映射
`python /Users/songpeng/Documents/python-client/tcprelay.py -t 22:10010 10011:10011`

在iPhone上执行下面的命令,启动debugserver服务,端口号为10011
`$ debugserver 127.0.0.1:10011 -a WeChat`

在Mac上执行以下命令,让LLDB与本地的10011传输数据,由于映射已经建立,就相当于给iPhone的debugserver服务发送数据
`$ lldb  `
`(lldb) process connect connect://localhost:10011 `

- 3. 我们总结一下,使用USB方式动态调试任意App的全部流程,如下所示,以后忘记原理没关系,只需要按顺序输入以下命令,就可以顺利开启动态调试

在Mac上打开命令行窗口,让10011端口与10011端口映射、10010与22端口映射
`$ sh usb.sh`

在Mac上新建命令行窗口,然后SSH登陆到手机
`$ sh login.sh`

登录到手机后,启动手机的debugserver服务,让其与App建立交互
`iPhone7ceshiji:~ root# debugserver 127.0.0.1:10011 -a WeChat`

在Mac上新建命令行窗口,进入lldb工具,并且让LLDB与debugserver建立交互
`$ lldb`
`(lldb) process connect connect://localhost:10011`

使用LLDB命令c,先让程序继续运行
`(lldb) c`
八、LLDB指令
上一篇下一篇

猜你喜欢

热点阅读