前言
工欲善其事,必先利其器。在开始iOS逆向工程前,我们需要准备一些工具让我们事半功倍。
1、iOS篇(cydia)
1.1 OpenSSH
一个允许其他终端远程访问当前设备的插件,在cydia下载即可。
在Mac终端中输入下面命令即可登陆越狱设备(默认密码为alpine,记得使用passwd命令修改):
$ ssh root@192.168.1.104
root@192.168.1.104's password:
Tidus-iPhone:~ root#
1.2 Apple File Conduit 2
一个确保越狱插件正常运行的补丁,在cydia下载即可。
1.3 Cycript
Cycript是一款由saurik推出的脚本语言,在逆向工程中可以帮助我们测试App。可直接在越狱设备中用Cydia安装。
安装后在终端中SSH到我们的设备,输入cycript
如果命令行显示cy#则说明安装成功,按control+d
退出cycript。
1.4 RevealLoader
RevealLoader帮助我们通过Reveal来偷窥别人的应用。
安装后用iFunBox检查
/Library
路径下是否有RHRevealLoader
目录,如果没有自己新建一个,然后将Reveal中的iOS动态库复制到此目录下。
# Tidus-iPhone:~ root# ls /Library/RHRevealLoader
libReveal.dylib
亲测使用Reveal2-1.6.3可以在越狱设备上通过RevealLoader进行偷窥。
2、Mac篇
2.1 usbmuxd
由于OpenSSH默认在无线局域网中访问目标设备,无线网络有时候连接不稳定,影响工作效率。usbmuxd是一个可以帮助我们在USB连接下使用OpenSSH的工具。
在https://cgit.sukimashita.com/usbmuxd.git/这里下载usbmuxd1.0.8(1.0.9与1.1.0不支持Mac),解压后将目录中python-client中的两个文件放到自己喜欢的目录中(只需要这两个文件即可,这里的目录是~/Application/iOS-RE/usbmuxd/),并对其执行权限:
$ sudo chmod +x ~/Application/iOS-RE/usbmuxd/tcprelay.py
$ sudo chmod +x ~/Application/iOS-RE/usbmuxd/usbmux.py
可以考虑将usbmuxd的路径加入.bash_profile中:
export USBMUXD=~/Application/iOS-RE/usbmuxd
export PATH=$PATH:$USBMUXD
最后执行下面的命令,表示将本地端口2222转发到远程端口22(远程OpenSSH监听的端口):
$ tcprelay.py -t 22:2222
Forwarding local port 2222 to remote port 22
$ ssh root@localhost -p 2222
即可使用usb访问越狱设备。
2.2 class-dump
class-dump是一个利用Object-C runtime特性,将存储在Mach-O可执行文件中的Class信息读取出来的命令行工具。
http://stevenygard.com/projects/class-dump/
最新的版本从上面的官网下载,下载后将里面的class-dump可执行文件复制到/usr/local/bin中改下权限即可在命令行中使用。
$ cp /Volumes/class-dump-3.5/class-dump /usr/local/bin
$ sudo chmod 777 /usr/local/bin/class-dump
$ class-dump
2.3 dumpdecrypted
dump decrypted是一个砸壳工具,用于解密被加密过的App可执行文件。
https://github.com/stefanesser/dumpdecrypted
需要自己从github上下载源码后编译才能使用,进入dumpdecrypted的所在目录,输入make
命令即刻生成对应的.dylib文件,生成的.dylib文件可重复使用,向下兼容低的iOS版本。
如果执行make后报错,尝试将Xcode的名字改回Xcode.app
2.4 Theos
Theos是一个越狱开发工具包,用于将自己开发的插件发布到Cydia上,也可以用于hook目标进程。
1.使用homebrew帮我们安装dpkg和ldid。
dpkg帮助Theos正确打包程序为deb-pkg格式,ldid则是用于签名可执行文件。
brew install dpkg ldid
2.将Theos github clone下来,目录的位置可以放在自己喜欢的位置,我选择了放在~/Application/iOS-RE/Theos
中。
然后添加Theos的路径到环境变量中,在.bash_profile中输入:
export THEOS=~/Application/iOS-RE/Theos
export PATH=$PATH:$THEOS/bin
关闭终端并重新启动就可以看到Theos的路径被添加到环境变量中去了:
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/git/bin:/Users/Tidus/Application/iOS-RE/Theos/bin
同时在任意目录下使用命令nic.pl检查是否设置成功:
具体安装方法可以参考:
http://bbs.iosre.com/t/theos/4928
2.5 LLDB & debug server
LLDB & debug server可以帮助我们调试应用。debug server在我们的设备连接Xcode调试时已经被安装在设备的/Developer/usr/bin中,但由于权限问题只能调试我们自己的App,还需要做一下配置。
2.5.1 debug server
1从设备中拷贝debugserver到本地
$ scp root@192.168.16.71:/Developer/usr/bin/debugserver ~/Application/iOS-RE/LLDB\&debugserver
2.从下面的表格选择我们的设备类型瘦身debugserver
使用下面的命令可以帮debugserver瘦身:
$ lipo -thin arm64 ./debugserver -output ./debugserver-arm64
3.配置task_for_id权限
下载http://iosre.com/ent.xml到debugserver所在目录,然后执行(确保你之前已经安装了ldid):
$ ldid -Sent.xml debugserver-arm64
4.将处理过的debugserver放回设备上,并配置x权限
$ scp debugserver-arm64 root@192.168.16.71:/usr/bin/debugserver
$ ssh root@192.168.16.71
$ chmod +x /usr/bin/debug-server
放到/usr/bin下即可,调用debugserver默认就是调用被修改过的,到此debugserver的配置完成了。
2.5.2 LLDB
在设备上执行
$ debugserver *:1234 -a "WeChat"
表示依附在微信上监听来自任意ip:1234的lldb请求,在Mac上使用tcprelay.py -t 1234:1234
转发接口,并使用命令
$ lldb
(lldb) process connect connect://localhost:1234
Process 2036 stopped
* thread #1: tid = 0x1a233, 0x0000000181b44fd8 libsystem_kernel.dylib`mach_msg_trap + 8, queue = 'com.apple.main-thread', stop reason = signal SIGSTOP
frame #0: 0x0000000181b44fd8 libsystem_kernel.dylib`mach_msg_trap + 8
libsystem_kernel.dylib`mach_msg_trap:
-> 0x181b44fd8 <+8>: ret
libsystem_kernel.dylib`mach_msg_overwrite_trap:
0x181b44fdc <+0>: movn x16, #0x1f
0x181b44fe0 <+4>: svc #0x80
0x181b44fe4 <+8>: ret
(lldb)
连接到设备上的debugserver,出现上面结果就是连接成功了。
2.6 IDA & Hopper
IDA和Hopper都是帮我们对已经砸壳的可执行文件进行反编译的工具。这两款应用都是收费的,都有Demo版,下载后可直接打开,把破解后的二进制文件拖到应用中即可开始反编译。
下载地址可以自己在网上找一下,或者到爱盘 -- 在线破解工具包看看。
IDA:http://down.52pojie.cn/Tools/Disassemblers/IDA%20Pro%20Standard%20v6.1%20(MacOS)%20(Fraunhofer-Institut)%20(c)%20Hex-Rays.zip
Hopper:
2.7 Reveal
大名鼎鼎的偷窥工具,无需多说。亲测使用Reveal2-1.6.3版本可以配合RevealLoader工作。
破解版下载
2.8 MonoDevelop
MonoDevelop 是个适用于Linux、Mac OS X和Microsoft Windows的开源开发环境,主要用来开发Mono与.NET Framework。可以帮助我们对Unity3d安卓游戏中的Assembly-CSCarp.dll 进行反编译。
IDE:
http://www.monodevelop.com/download/
Mono framework:
http://www.mono-project.com/download/
最后
如果后续涉及到新的工具,将会继续更新原文。