iOS逆向里面比较重要的几项技能:动态调试、静态分析、HOOK关键函数、重签名
前言
先来讲下动态调试,iOS动态调试需要一个服务端和客户端程序,服务端程序在手机上监听要动态调试程序的进程ID或是程序名,客户端程序在Mac OS系统上运行。
1 2 3
| 服务端程序:debugserver 客户端程序:lldb
|
只要你手机进行真机调试过,那么在你手机的这个目录下就会有debugserver
1 2
| /Developer/usr/bin/debugserver
|
配置debugserver 赋予权限
debugserver默认只能调试自己开发的应用,调试其他应用会抛异常unable to start the exception thread
。默认的debugserver缺少task_for_pid()
权限,因此需要给debugserver赋予task_for_pid权限。——这是网上摘抄的话
网上过时方法
我发现网上配置debugserver的方法已经过时,不适用iOS13系统,导致debugserver还是无法调试三方APP,所以按照如下方法进行。
iOS13及以上配置方法
新建一个文件名为ent.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| <?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>com.apple.system-task-ports</key> <true/> <key>get-task-allow</key> <true/> <key>platform-application</key> <true/> <key>run-unsigned-code</key> <true/> <key>task_for_pid-allow</key> <true/> </dict> </plist>
|
用ldid对debugserver签名 赋予权限
1 2
| ldid -Sxml全路径 debugserver全路径` 例如:`ldid -Sent.xml debugserver
|
这里要SSH连入iPhone手机执行命令:需要越狱您的iPhone,不会的请去看 疯先生越狱
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| iproxy 2222 44
ssh root@localhost -p 2222
iPhone:~ root iPhone:/Developer/usr/bin root DTDeviceArbitration* ScreenShotr* axauditd* debugserver*
iPhone:/Developer/usr/bin root
iPhone:/Developer/usr/bin root
iPhone:/Developer/usr/bin root
|
验证debugserver 进行动态调试
配置好iPhone端的debugserver后,就可以在Mac电脑上用lldb远程进行动态调试了lldb调试大全后续会讲,此次注重debugserver的配置,lldb一笔带,只要知道lldb是Mac上的客户端用来动态调试。
以调试Sugram 聊天软件为例
手机端:
1 2 3 4 5 6
| iPhone:~ root mobile 6542 0.0 2.9 5055392 59136 ?? Ss 8:38PM 0:00.51 /var/containers/Bundle/Application/12CA134A-E92A-4F35-BEAA-542F84A0A39F/Sugram.app/Sugram
iPhone:~ root
|
这时候被注入监听的那个APP就会进入卡死状态,因为debugserver已经对Sugram进行调试状态。
电脑端:
1 2 3 4 5
| iproxy 1234 1234
lldb (lldb) process connect connect://localhost:1234
|
最后!
出现如下画面说明debugserver 配置正确,lldb也可以进行动态调试了。😁😁 –专注逆向、网络安全 Lee
欢迎各位大佬:一起研究逆向、PWN、WEB安全、物联网安全