iOS逆向 lldb动态调试

前言

使用 lldb 调试需要准备 debugserver。使用 OSX 中的 lldb 远程连接 iOS 上的 debugserver,由 debugserver 作为 lldb 和 iOS 的中转,执行命令和返回结果。在默认情况下,iOS 上并没有安装 debugserver,只有在设备连接过一次 Xcode,安装了开发者插件后,debugserver 才会被 Xcode 安装到iOS的/Developer/usr/bin/目录下。

重签名debugserver

在 iOS 11 越狱之前,需要对 debugserver 进行重签名,在 iOS 11 上可以直接使用/Developer/usr/bin/debugserver,或者直接用 Xcode 对 iOS 上的 app 进行调试。iOS 11 之前用 Xcode 调试需要对 app 进行重签名,而 iOS 11 之后不需要重签名 app 也能调试了。

iOS 11 之前重签名 debugserver 步骤:

1.拷贝 debugserver 到本地计算机中:scp root@iOSDeviceIP:/Developer/usr/bin/debugserver ~/debugserver

2.然后用 ldid 添加权限。由于 ldid 不支持 fat 二进制文件,所以要给 debugserver 瘦身,通过 lipo 指定要支持的指令类型,例如:lipo -thin arm64 ~/debugserver -output ~/debugserver

3.给 debugserver 添加 task_for_pid 权限,保存以下内容为 ent.xml 文件:

<!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>get-task-allow</key>
        <true/>
        <key>task_for_pid-allow</key>
        <true/>
        <key>run-unsigned-code</key>
        <true/>
</dict>
</plist>

复制代码
然后执行以下命令添加权限:ldid -Sent.xml debugserver

4.给 debugserver 重新签名,保存以下内容为 entitlements.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>

复制代码
然后运行以下命令给的 debugserver 签名:codesign -s - --entitlements entitlements.plist -f debugserver

5.重新拷贝 debugserver 回手机中:scp ~/debugserver root@iOSDeviceIP:/usr/bin/debugserver

6.第一次使用 debugserver 时需要为其添加可执行权限:chmod +x /usr/bin/debugserver

lldb调试

准备好 debugserver 后,就可以调试任意第三方 app 了。

  1. SSH 到 iOS,使用 debugserver 来 attach 一个进程,要查看当前正在运行的进程,使用ps -e命令。比如我们要 attach 的进程号为 693,我们可以输入如下命令:debugserver *:1234 -a 693

  2. iOS 11 上debugserver *:1234中的*:1234要替换成localhost:1234。如果用的是 Electra 越狱,命令变成/Developer/usr/bin/debugserver localhost:1234 -a 693,如果用的是unc0ver越狱,则是debugserver localhost:1234 -a 693。同理,下文中的对应命令也要相应的替换

  3. 如果要用 debugserver 启动 app,而不是附加到已经启动的 app,则使用debugserver *:1234 <app二进制文件路径>,例如debugserver *:1234 /var/containers/Bundle/Application/107F3307-2900-4720-B9BA-0C7792D89DF2/APP_TO_DEBUG.app/APP_TO_DEBUG

  4. Mac 端打开终端,输入 lldb,回车,进入 lldb 界面,使用process connect命令连接客户端。 用 WiFi 连接到 iOS 设备时:process connect connect://iOSDeviceIP:1234

如果要用 usbmux 连接,则先使用iproxy 1234 1234进行一次端口转发,再使用process connect connect://localhost:1234,即可用 USB 连接到 iOS 设备。

回车后需要等待几分钟,时间有点久。

连接成功后,即可用 lldb 命令进行调试。

SSH链接

iproxy 2222 22 端口转发

ssh -p 2222 root@127.0.0.1 连接设备

找到要调试的进程进行调试

ps -e 查看进程

debugserver 127.0.0.1:1234 -a 693 attach进程

iproxy 1234 1234进行一次端口转发

process connect connect://127.0.0.1:1234 在lldb里执行

下图是调试微信的例子,lldb附加成功之后就可以根据地址使用b(地址加到b指令之后)指令下断点,地址可以根据hopper分析获取

截屏2020-03-04下午2.32.14.png

下图是使用hopper分析喜马拉雅播放方法的地址,然后使用lldb下断点


image.png

lldb常用命令

列出所有断点:breakpoint list, br li
打开、关闭某个断点:breakpoint enable, breakpoint disable, br dis, br del
打印参数:frame variable, fr v
打印方法名和行数:frame info
打印寄存器的值:register read
修改寄存器的值:register write rax 123
列出文件加载基地址:image list
执行地址的加减运算:p/x

参考

iOS 逆向指南:动态分析

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容