排行榜
问题反馈
推荐:腾讯手游助手最新更新lol客户端下载
当前位置: > 网络教程 > iOS逆向动态调试怎么操作?

iOS逆向动态调试怎么操作?

时间:2018-06-07 来源:互联网

 iOS12正式版已经公布,很多用户都更新了最新版本,有很多用户想知道iOS逆向动态调试怎么操作?

Xcode的动态调试原理

首先了解一下Xcode编译和调试器的发展。Xcode中的编译器发展历程:GCC->LLVM,调试器的发展历程:GDB->LLDB。

Xcode调试安装到手机上的应用的原理:Xcode通过LLDB调试器把调试指令发送到手机上的debugserver,debugserver再与相应的APP进行交互,达到调试的效果。

debugserver一开始是存放在Mac的Xcode里面,路径:

/Applications/Xcode.app/Contents/Developer/Platforms

/iPhoneOS.platform/DeviceSupport

/9.1/DeveloperDiskImage.dmg

/usr/bin/debugserver

当Xcode识别到手机设备时,Xcode会自动将debugserver安装到手机上。

Xcode调试的局限性:一般情况下,只能调试通过Xcode安装的APP,无法调试其它APP。

给debugserver赋予权限

默认情况下/Developer/usr/bin/debugserver缺少一定的权限,只能调试通过Xcode安装的App,如果希望调试其它App,需要对debugserver重新签名,签上可以调试其它App的权限。

需要的两个权限为:get-task-allow和task_for_pid-allow

iPhone上的/Developer目录是只读的,无法直接对/Developer/usr/bin/debugserver文件签名,需要先把debugserver复制到Mac。

通过ldid命令导出文件以前的签名权限:

$ldid-edebugserver>debugserver.entitlements

debugserver.entitlements这个文件其实是个plist文件,在这个文件中加上上面提到的两个权限后,再通过ldid命令对文件重新签名。

$ldid-Sdebugserver.entitlementsdebugserver

然后将已经签好权限的debugserver放到/usr/bin目录,便于找到debugserver指令。

debugserver附加到某个APP进程

$debugserver*:端口号-a进程

*:端口号:使用iPhone的某个端口启动debugserver服务(不是保留端口)

-a进程:输入APP的进程信息(进程ID或者进程名称)

Mac远程连接iPhone上的debugserver服务

启动LLDB:

//在终端输入

$lldb

连接debugserver服务

(lldb)processconnectconnect://手机IP地址:debugserver服务端口号

使用LLDB的c命令让程序先继续运行

(lldb)c

到此,就可以远程调试别人的App了。

iOS系统逆向动态调试怎么弄_逆向教程步骤详情介绍

常用的LLDB指令

给ViewController的test方法设置断点

breakpointset-n"-[ViewControllertest]"

查看指令用户使用help指令:helpbreakpoint等。

打印线程的堆栈信息:threadbacktrace

很多命令不在这里赘述,请参考:http://lldb.llvm.org/lldb-gdb.html

iOS系统逆向动态调试怎么弄_逆向教程步骤详情介绍

ASLR

获取ASLR的偏移量:

imagelist-o-f

打印结果的第二列前面的地址就是我们需要的ASLR的偏移量offset。

假如我们想给某个类中的test方法添加断点,那么通过Hooper工具找到该方法的第一个内存地址,假如为0x010101,然后地址加上我们得到的ASLR的偏移量就是该方法的实际地址。然后通过该地址给方法下断点。

iOS系统逆向动态调试怎么弄_逆向教程步骤详情介绍

breakpointset-o0x010101+offset

到此就给该方法添加了断点,之后当程序调用该方法的时候,会停在该断点出。

热门推荐