最近对iOS逆向工程进行了些研究,由于iOS系统的封闭性,iOS的逆向研究需要使用到一些工具,包括Mac端与iOS客户端。本文对逆向App Store的应用的整个过程进行了一个总结,所有步骤参考于《iOS应用逆向工程》。
所有逆向工作的前提你需要有一台越狱的iOS设备,如何越狱设备可以使用太极越狱官网提供的工具。越狱完成后你可以通过cydia安装OpenSSH工具,这样你就可以通过ssh工具登录你的iOS设备了。有一点需要注意,刚越狱完成的手机有两个用户:root与mobile用户,其默认密码都是alpine,在越狱完成后首先的工作是修改这两个用户的密码。
登录iOS设备
通过前面在iOS设备上开通了SSH服务,你应该知道使用Terminal就可以登陆iOS设备了,iOS设备与Mac设备在同一个局域网内,你就可以通过ssh命令登陆root用户了。通过无线局域网调试设备可能会比较慢,或者在没有wifi的情况下就无法调试了。这时,你可以借助了usbmuxd工具,通过usb线直接连接iOS设备进行调试。注意,usbmuxd需要使用1.0.8版本,其目录下python-client有两个python文件:tcprelay.py与usbmux.py。只需要这两个文件即可,新版本好像只有C实现的工具,python工具只有在1.0.8版本上才有。其可以将本地端口映射到iOS设备端口。命令格式如下:./tcprelay.py -t 22:2222。该命令将iOS设备的22端映射到本机的2222端口了,ssh命令如下:ssh
root@127.0.0.1 -p 2222。
获取Apple Store可执行文件
逆向iOS应用的目的是对应用的工程结构、运行机制进行研究,首先你需要获取被分析应用的可执行文件,再结合一些反编译工具,像IDA、Hopper再进行深入研究。所有Apple Store上的应用都进行了加密,使用反编译工具无法直接进行分析,你需要先进行“砸壳”。你可以借助于clutch工具,你可以在网上下载完成后直接拷贝到iOS设备的/usr/bin目录下,添加可执行的权限。然后在iOS命令行下运行clutch –i,其会将所有从Apple Store安装的应用列举出来,如下图所示:
找到你需要分析的应用的下标,执行clutch –d X命令。如下图所示,最终生成“砸壳”后的应用。你可以将该应用拷贝到Mac电脑上,解压之后将可执行文件提取出来,再使用IDA工具进行分析。
反编译
由于现在iOS设备一般都是arm64芯片,而IDA一直没有找到免费的64位版本,所有目前可以使用hopper来代替。将之前拷贝出来的可执行文件使用hopper打开,如下图所示:
调试iOS设备
使用苹果公司提供的lldb与debugserver工具可以实现对iOS设备安装的应用进行调试。debugserver在iOS设备的/Developer/usr/bin目录下,需要对该可执行文件进行一些处理,可以对debugserver进行瘦身,只保留iOS设备对应的版本,然后给debugserver添加task_for_pid权限,从iosre网站上下载ent.xml文件,运行下面命令进行重签名,ldid –Sent.xml debugserver。再拷贝回iOS设备。
使用debugserver启动进程,debugserver –x backboard *:1234 /可执行文件路径,该命令将会启动可执行文件,等待来自1234端口进行连接调试。上面的命令是在iOS设备上运行的。从Apple Store下载的应用都会放在/private/var/mobile/Containers/Bundle/Application/目录下,你需要找到被分析应用的目录所在。此时可以借助ps命令来实现,将其它应用全部关闭,打开你需要分析的应用,运行ps -ef | grep Application命令,如果如下图所示,你将发现能找到你想要分析应用可执行文件的所有路径。
运行debugserver命令后,iOS设备将会等待来自Mac端的调试连接,在Mac上运行lldb命令,然后再运行process connect connect://127.0.0.1:1234命令,即可开始进行调试。注意,此处还借助了前面的usbmuxd工具将iOS设备的1234端口映射到了本地。
运行到此处后,可以在lldb工具中,运行ni命令,执行命令,直到加载可执行文件成功。目前执行到此处遇到一个问题,刚开始运行几个ni命令还能够加载可执行文件,但现在运行ni命令一直停留加载库的命令中,跳转不出来,还需要再研究一下。如果加载库成功了,即可以结合前面使用hopper分析可执行文件的结果,在感兴趣的位置打上断点进行深入分析。