iOS动态调试-逆向04
iOS动态调试-逆向04
LLDB
最老版本的Xcode的调试器是GDB后来苹果就在这基础上开发了LLDB
现在LLDB都是内嵌在Xcode中
Xcode的调试原理
当我们在手机上连接Xcode进行真机调试的时候,Xcode识别手机后会将debug server安装到我们的手机上 (/Developer/usr/bin/debugserver)
debugserver一开始是放在mac的Xcode中的
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/9.0/DeveloperDiskImage.dmg/usr/bin/debugserver
当我们进入某个断点时,手机上的debugsever
会监听lldb
传过来的指令debugserver
接收到指定的时候,再执行到我们的App上
接着App再把反馈信息传递给debugserver
然后debugserver
再把消息反馈给lldb
,lldb
在把调试信息打印在Xcode上。
Xcode调试具有局限性,只能调试通过Xcode安装的App
动态调试任意App
通过上述Xcode的调试原理要想调试App debugserver、lldb这两个必不可少 因为没有源码 我们只能在终端上代替上面的Xcode
step1.
Xcode自动给我们按照的debugserver肯定是用不了了,因为权限不够。所以我们需要给他签上权限
从手机上拖出debugserver(/Developer/usr/bin/debugserver)
重签名 – 将下列保存成entitlement.entitlements放在debugserver同级文件夹(其实就 是个xml文件 后缀名不重要)
1 |
|
使用codesign
重签名codesign -s – –entitlements ./entitlement.entitlements -f debugserver
将签名完成的debugserver
放入手机usr/bin
目录下
并给权限
1 |
|
这里不是之前替换原来的debugserver
,因为那个目录是只读的没有权限所以放在/usr/bin/
下面
step2.
手机需要和mac做连接 详见SSH登录
1 |
|
登录手机
1 |
|
监听进程
1 |
|
step3.
debugserver 启动成功后就可以在macOs上连接了,在终端输入lldb
进入lldb环境,
1 |
|
debugserver 启动App
可观察App是如何启动的
1 |
|