IOS逆向_动态调试:debugserver

2019-11-02  本文已影响0人  一杯开水

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)。

debugserver

            3.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 : 其中有部分章节是从前人的文章中搬运过来整理而成,这些文章里已经对部分知识点解释的很清楚明了了,我也没有更好的表达方式,所以站在巨人的肩膀上,我只是一个整理者加了部分自己的理解。)

上一篇下一篇

猜你喜欢

热点阅读