1、 加壳;
2、 砸壳;
3、IOS逆向常见的砸壳工具;
1、 加壳;
1.1 概念: 利用特殊的算法,对可执行文件的编码进行改变(比如压缩、加密),以达到保护程序代码的目; IOS系统的APP由App Store进行加壳操作。
2、 砸壳;
2.1 摘掉壳程序,将未加密的可执行文件还原出来(有些人也称为“砸壳”);
2.2 脱壳主要有2种方法:
① 硬脱壳:通过第三方工具、直接将程序的“壳”摘除;IOS逆向采用了“硬脱壳”方式。
② 动态脱壳:将程序运行到内存中,再出内存中导出可执行文件。
3、IOS逆向常见的砸壳工具;
3.1 判断一个APP可以执行文件是否加壳:
① 这里使用了MJ大大写的一个命令行工具“MJAPPTools”,列举出当前手机上所有加壳的APP:
② 可以通过MachO工具,查看Load Commands -> LC_ENCRYPTION_INFO -> Crypt ID的值,0代表未加密;
③ 也可以通过otool命令行也可以:otool -l 可执行文件路径 | grep crypt。
3.2 使用caluth工具进行脱壳操作:
① 下载caluth文件并拷贝到iPhone的/usr/bin目录下:
② 如果在iPhone上执行Clutch指令,权限不够,赋予“可执行的权限”:
③ 列出已安装的APP:Clutch -i
④ 输入APP序号或者Bundle Id进行脱壳操作:Clutch -d APP序号或BundleId:
⑤ 脱壳成功后会生成一个ipa文件、可以在终端看到起对应的ipa存放路径:
3.3 使用dumpdecrypted工具进行脱壳操作:
① 下载源代码,然后在源代码目录执行make指令进行编译,获得dylib动态库文件;
② 将dylib文件拷贝到iPhone上(如果是root用户,建议放/var/root目录):
③ 终端进入dylib所在的目录, 使用环境变量DYLD_INSERT_LIBRARIES将dylib注入到需要脱壳的可执行文件(可执行文件路径可以通过ps -A查看获取);
DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib 可执行文件路径
④ .decrypted文件就是脱壳后的可执行文件:
(PS : 其中有部分章节是从前人的文章中搬运过来整理而成,这些文章里已经对部分知识点解释的很清楚明了了,我也没有更好的表达方式,所以站在巨人的肩膀上,我只是一个整理者加了部分自己的理解。)