ios逆向相关

debugserver lldb环境搭建

2018-04-24  本文已影响14人  呆呆滴木木菇凉
1、重签debugserver

找到你Xcode的位置,右键打开包内容,然后按路径 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport找到和你手机系统版本对应的DeveloperDiskImage.dmg

打开DeveloperDiskImage.dmg,找到/usr/bin/debugserver

拷贝一份debugserver到桌面

wifi:~ clf$ cp /Volumes/DeveloperDiskImage/usr/bin/debugserver ~/Desktop/debugserver

接下来,想让debugserver成功跑起来要做两件事

1)给debugserver瘦身

瘦身要把debugserver瘦成和我们设备相同arm指令集的对应类型,可参照下图


然后执行命令

 wifi:~ clf$ lipo -thin arm64 ~/Desktop/debugserver -output ~/Desktop/debugserver

备注:如果ldid支持fat binary的话,就不用瘦身,我还没有去验证ldid支不支持,所以还是瘦身下比较靠谱。

2)给debugserver添加task_for_pid权限

只有打了task_for_pid权限我们才可以在后来以进程为单位调试我们要调试的App。

查看原始的debugserver的签名属性:

ldid -e ~/Desktop/debugserver

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.backboardd.debugapplications</key>
    <true/>
    <key>com.apple.backboardd.launchapplications</key>
    <true/>
    <key>com.apple.diagnosticd.diagnostic</key>
    <true/>
    <key>com.apple.frontboard.debugapplications</key>
    <true/>
    <key>com.apple.frontboard.launchapplications</key>
    <true/>
    <key>com.apple.security.network.client</key>
    <true/>
    <key>com.apple.security.network.server</key>
    <true/>
    <key>com.apple.springboard.debugapplications</key>
    <true/>
    <key>run-unsigned-code</key>
    <true/>
    <key>seatbelt-profiles</key>
    <array>
        <string>debugserver</string>
    </array>
</dict>
</plist>

如果你输出结果有乱码什么的显示,就说明你的ldid有问题。

下面我们给debugserver重签名

新建一个entitlement.plist文件,内容如下:

 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/ PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>com.apple.springboard.debugapplications</key>
        <true/>
        <key>run-unsigned-code</key>
        <true/>
        <key>get-task-allow</key>
        <true/>
        <key>task_for_pid-allow</key>
        <true/>
    </dict>
</plist>

重签名,执行命令:

wifi:Desktop clf$ codesign -s - --entitlements entitlements.plist -f debugserver
debugserver: replacing existing signature

再查看下debugserver的签名:

wifi:Desktop clf$ ldid -e ~/Desktop/debugserver
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.springboard.debugapplications</key>
    <true/>
    <key>run-unsigned-code</key>
    <true/>
    <key>get-task-allow</key>
    <true/>
    <key>task_for_pid-allow</key>
    <true/>
</dict>
</plist>

把旧的属性列表替换掉了,说明OK了。

2、把重签名的debugserver拷贝到手机上
wifi:Desktop clf$ scp -p 22 debugserver root@192.168.2.2:/usr/bin/
root@192.168.2.2's password: 
22: No such file or directory
debugserver                                 100% 4599KB   2.1MB/s   00:02  

接下来就可以再手机上使用debugserver了。
当然你要赋予debugserver执行权限

iPhone:~ root# chmod +x /usr/bin/debugserver

备注:

如果你手机连接过xcode做过任何调试,在你手机的 /Developer/usr/bin/ 目录下会有个debugserver,你也可以把这个传到电脑上,重签名后再传回到手机上,这样的好处是不用瘦身,这个debugserver对应的指令集就是手机的指令集)

3、远程调试

再手机上开启debugserver

debugserver *:1212 -a <process name>

 iPhone:~ root# debugserver *:1212 -a Community10000v6

失败了

 debugserver-@(#)PROGRAM:debugserver  PROJECT:debugserver-360.0.26.1
for arm64.
Attaching to process Community10000v6...
error: failed to attach to process named: "" 
Exiting.

然后我尝试开启一个手机上有的程序

iPhone:~ root# debugserver *:1212 -a QQ  
debugserver-@(#)PROGRAM:debugserver  PROJECT:debugserver-360.0.26.1
 for arm64.
Attaching to process QQ...
Listening to port 1212 for a connection from *...

这个就是成功了的。

如果debugserver开启成功,就可以在电脑终端使用lldb命令
命令lldb,然后process connect connect://yourPhoneIp:1212

 wifi:Desktop clf$ lldb
 (lldb)  process connect connect://192.168.2.2:1212

这时候连接手机的一端就会增加一句输出

debugserver-@(#)PROGRAM:debugserver  PROJECT:debugserver-360.0.26.1
 for arm64.
Attaching to process QQ...
Listening to port 1212 for a connection from *...
Waiting for debugger instructions for process 0.

稍等一下,之后就会连接成功,然后就可以利用lldb的命令行,来调试连接的App了

当然这里QQ是从App Store上下载的,加壳的,我们负载不了

(lldb)  process connect connect://192.168.2.2:1212
Process 18659 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGSTOP
frame #0: 0x0000000185231cf8 CoreFoundation`_CFSetTSD + 64
CoreFoundation`_CFSetTSD:
->  0x185231cf8 <+64>: cbnz   x22, 0x185231d20          ; <+104>
0x185231cfc <+68>: orr    w0, wzr, #0x1
0x185231d00 <+72>: mov    w1, #0x468
0x185231d04 <+76>: bl     0x1853c508c               ; symbol stub for: __76-[_CFXPreferences copyAppValueForKey:identifier:container:configurationURL:]_block_invoke
Target 0: (QQ) stopped.
(lldb)  
上一篇下一篇

猜你喜欢

热点阅读