IOS逆向_动态调试:debugserver
1. 动态调试的概念;
2. Xcode动态调试的原理;
3. 通过debugserver调试APP;
1. 动态调试的概念;
将程序运行起来,通过断点、打印等方式,查看参数、返回值、函数调用的流程。
2. Xcode动态调试的原理;
xcode调试原理2.1 LLDB:LLDB全称为low level debugger,是xcode自带的动态调试工具,可用于c,c++,objective-c,全盘支持iOS,OSX以及iOS模拟器。
LLDB有以下四个功能:①.在特定的情况下暂停程序;②.在特定的情况下启动程序;③.在程序停止的情况下检查程序内部;④.在程序停止的情况下改动程序,观察执行过程。
2.2 debugServer:debugserver是运行在iOS程序中的,顾名思义,作为server端,它接受与来自服务端,也就是LLDB传送过来的命令,继而执行的操作。再把执行结果返回给LLDB,默认情况下, iOS并没有安装debugserver,只有在设备连接了一次xcode之后,并在window->device中添加此设备之后,debugservercai才会别安装到iOS中,默认位于Developer/usr/bin目录下;默认的debugserver只用用户调试我们自己的app。
2.3 Xcode调试的局限性:一般情况下,智能调试通过Xcode安装到手机上的APP。
3. 通过debugserver调试任意APP;
3.1 默认情况下,/Developer/usr/bin/debugserve(此文件夹是只读属性的)缺少一定的权限,只能调试通过Xcode安装的APP,无法调试其他APP(例如:测试平台安装的APP、APP Store下载的APP)。
debugserver3.2 如果希望调试其他APP,需要对debugserver重新签名(签名详细操作步骤)、签上以下两个权限:
①. get-task-allow;
②. task_for_pid-allow;
添加权限3.3 将重新签名的debugserver放到手机的/usr/bin目标,便于找到debugserver的指令;
3.4 让debugserver附加到某个APP进程;
debugserver *: 端口号 -a 进程ID||进程名称
实例3.5 新建终端页面,进入LLDB,开始进行调试(输入lldb后,APP会进入断点模式):
实例3.6 通过debugserver启动某个APP应用程序:
¥ debugserver -x auto *:端口号 APP可执行文件的路径。
(PS : 其中有部分章节是从前人的文章中搬运过来整理而成,这些文章里已经对部分知识点解释的很清楚明了了,我也没有更好的表达方式,所以站在巨人的肩膀上,我只是一个整理者加了部分自己的理解。)