-
-
[分享]iOS动态调试任意APP
-
发表于:
2023-1-12 23:48
24645
-
动态调试的配置过程
工具 :Xcode + LLDB + debugserver
一、Xcode动态调试 -> debugserver

当通过Xcode运行我们的项目时,系统会自动安装好debugserver
debugserver 在mac中的位置 :
1 | /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/13.5/DeveloperDiskImage.dmg//DeveloperDiskImage/usr/bin/debugserver
|
debugserver 在iPhone中的位置 :
1 | /Developer/usr/bin/debugserver
|

此时的debugserver只能调试通过Xcode安装的APP,并且只有可读权限。那么要让lldb通过debugserver调试其他来源下载的APP该怎么操作呢?
二、终端动态调试 -> debugserver

导出 debugserver 到mac本机,导出他的xml文件,然后再去查看下他的权限都有哪些。
1 | ldid -e debugserver > debugserver.entitlenments
|

正常情况下这种错误不会出现,可能是版本的原因,导出的文件有点问题,先解决下这个错误,如果没有报错,这一步直接忽略。
查看代码我们发现,这个文件的内容出现了重复,删除重复的,重新打开。

打开文件可以查看到此问题的权限有哪些。

现在我们要给文件添加权限,然后通过ldid 重新签名(用codesign也行)
方法这里提供2种方式:
1.添加 get-task-allow、task_for_pid-allow
2.找到一个权限最多的文件,重新签名到debugserver 上。
第一种方式添加后的效果:

第二种方式:
我用了SpringBoard的可执行文件。我们导出他的签名权限,看看效果。
1 | ldid -e SpringBoard > SpringBoard.entitlements
|

打开后会发现有很多行,密密麻麻。
然后重新签名
1 2 3 4 | 方法一:
ldid -Sdebugserver.entitlements debugserver
方法二:
ldid -SSpringBoard.entitlements debugserver
|
然后将重新签好权限的debugserver文件放到手机的 /usr/bin目录。
手机上附加到任意的APP的进程中
1 2 3 4 5 | iPhone-2:~ root
debugserver-@(
for arm64.
Attaching to process recipe...
Listening to port 10011 for a connection from localhost...
|
mac终端lldb与debugserver建立连接
1 2 | process connect connect://127.0.0.1:10011
|
成功的效果。剩下的是lldb的调试命令,不在赘述。

[培训]科锐软件逆向54期预科班、正式班开始火爆招生报名啦!!!
最后于 2023-1-13 10:05
被复活甲编辑
,原因: