iOS 逆向工程入门篇
引言
逆向分析软件,就是为了更好的开发软件,借他人之长,补己之短。
dumpdecrypted
dumpdecrypted:用于解密二进制文件,将当前应用 .app 应用包下的 tmp 目录,并输出二进制结果。 在电脑端进行编译,获取 dumpdecrypted.dylib
1
2$ cd dumpdecrypted // cd 到 dumpdecrypted 目录下
$ make //(建议不要修改参数, Xcode 与 iOS 系统保持一致?)
注:如果你的手机系统也是 iOS 9.3.3 ,我这正好有一份与之相对应 dumpdecrypted.dylib 文件。(提取码: 3gtx)
Cycript
Cycript 可以从运行状态下的可执行文件中提取一些有价值的信息,使用 Cycript 与正在运行的程序可以交互,可与 weak_classdump.cy 结合使用,它的功能类似下面讲的 class-dump 。
下面使用 Cycript 获取应用的 Documents 路径,将 dumpdecrypted.dylib 导入其中。1
$ ssh root@IP // 通过 ssh 连接到手机上
运行 ps -e
命令,获取正在运行的应用的进程1
2$ ps -e
1960 ?? 0:04.58 /var/containers/Bundle/Application/A7E477AA-A1B1-4A8C-890A-9114A2956C50/SportTarget.app/SportTarget
借助 Cycript 找到 App 的 Documents (注:control + d 退出 Cycript 命令行)1
2
3cycript -p 进程号(进程名) // 1960(SportTarget)
cy#[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask][0]
#"file:///var/mobile/Containers/Data/Application/B3EBD03F-E9E0-4619-B843-7AA1BB1F1E54/Documents/"
将 dumpdecrypted.dylib 拷贝到手机中;cd 到存储 dumpdecrypted.dylib 文件目录下,将 dumpdecrypted.dylib 文件拷贝到 App 刚刚得到的 App 的 Documents 下1
2$ scp dumpdecrypted.dylib [email protected]:/var/mobile/Containers/Data/Application/B3EBD03F-E9E0-4619-B843-7AA1BB1F1E54/Documents/
[email protected]'s password:
在手机终端 cd 到刚刚得到的 Documents 目录,执行下面命令,可以获得 *.decrypted
文件。1
Ggs-iPhone:/var/mobile/Containers/Data/Application/B3EBD03F-E9E0-4619-B843-7AA1BB1F1E54/Documents root# `DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/containers/Bundle/Application/A7E477AA-A1B1-4A8C-890A-9114A2956C50/SportTarget.app/SportTarget`
将获得 SportTarget.decrypted
文件导出,在电脑端执行1
$ scp [email protected]:/var/mobile/Documents/SportTarget.decrypted ~/Documents/safe/dumpdecrypted //scp -r 可以拷贝文件夹
class-dump
分析类的定义、查看汇编指令和二进制构建的其他内容,可以使用 class-dump 处理任何未加密的 iOS 二进制文件。例如处理上面得到解密的 SportTarget.decrypted 文件
class-dump:常用于提取 Objective-C 2.0 版本二进制文件中的类信息,输出结果相当于二进制文件的头文件。
Hopper
在没有源代码文件的情况下,可以通过反编译软件查看应用程序的实现逻辑。类似反编译软件有 IDA Pro、Hopper,由于 IDA Pro 价格昂贵,推荐使用 Hopper 软件进行查看。打开 SportTarget.decrypted 文件可以查看相关信息。
FAQ
Cycript
0、提示 -sh: cycript: command not found ,需要在手机端进行安装 Cycript 命令工具
1、运行 DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib + 进程名,报 Killed: 9 错误。以下解决方法:1
2
3
4
5$ scp dumpdecrypted.dylib [email protected]:/usr/lib //将 *.dylib 文件复制到 /usr/lib 目录下
# su mobile //在手机端切换 mobile 用户
# cd /var/mobile/Documents //cd 到 mobile 用户的 Documents 目录下
// 在此目录下运行下面命令,得到 *.decrypted
# DYLD_INSERT_LIBRARIES=/usr/lib/dumpdecrypted.dylib /var/containers/Bundle/Application/A7E477AA-A1B1-4A8C-890A-9114A2956C50/SportTarget.app/SportTarget
参考资料