-
-
[分享]iOS动态调试任意APP
-
发表于:
2023-1-12 23:48
22646
-
动态调试的配置过程
工具 :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的调试命令,不在赘述。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2023-1-13 10:05
被西贝巴巴编辑
,原因: