大家知道,通常iOS中下载的ipa包可以通过解压缩,最后获得可执行的Mach-O文件。
一、判断可执行文件是否被加密
方法1:通过终端命令来查看
otool -l QQ | grep crypt
//class-dump出来的qqHeaders文件夹中头文件如果只有一个,通常也是被加密的
class-dump -H QQ -o qqHeaders
//输出的cryptid如果为0则未加密,为1则被加密
otool -l QQ | grep crypt
终端判断是否被加密.png
方法2:通过MachOView来查看
MachOView判断是否被加密.png方法3:Hopper Disassembler解析不出来的,也是被加密的。
二、脱壳
一旦发现可执行文件是被加密过的,那就需要先进行脱壳操作,将原始的可执行文件给剥离出来。通常我们采用的都是硬脱壳方式,即暴力脱壳,也不需要将程序运行到内存中再进行操作。
硬脱壳是有工具的,一般用Clutch
工具和dumpdecrypted
工具,接下来我们逐个解释。
1、Clutch工具
Clutch下载地址
通过Clutch
可以将装在手机上的应用进行脱壳操作,所以需要安装到手机上。为了方便在终端上直接操作,通常会将Clutch
工具拖到/usr/bin
目录下(建议给下载下来的Clutch后缀版本号去掉)。如果登录到手机后,在终端敲入Clutch出现权限不足的问题,可以给其添加可执行的权限chmod +x /usr/bin/Clutch
即可。
如上图箭头所指,成功脱壳后,会自动将文件打包成一个.ipa文件,终端里也会输出这个.ipa文件的具体路径,导出到电脑上即可使用 。这个.ipa里面包含的就是已经解密成功的可执行文件,即脱壳操作完成。我们可以通过前面所说的otool
指令来验证一下,查看这个.ipa的crypt
值是否真的为0。
有图有真相,我没有胡说哈😁
2、dumpdecrypted工具
dumpdecrypted下载地址
(1)首先将dumpdecrypted.c
编译成动态库
进入dumpdecrypted.c文件所在的目录,终端输入make
指令进行编译,会自动执行其目录中的Makefile文件内部的指令,生成对应的动态库文件
(2)将生成的dumpdecrypted.dylib
动态库文件拷贝到iPhone上(如果是root用户,建议放到/var/root
目录)
(3)终端进入dumpdecrypted.dylib
所在的目录,使用环境变量DYLD_INSERT_LIBRARIES
将动态库注入到需要脱壳的可执行文件中(可执行文件的路径可以通过ps -A
查看获取)
具体操作命令:DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib 可执行文件路径
DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib "/var/mobile/Containers/Bundle/Application/5A97A551-4E9B-4E57-B065-E1DC913B1FC9/Jiu_Kuai_Jiu copy.app/Jiu_Kuai_Jiu copy"
当前文件/var/root
下新生成的Jiu_Kuai_Jiu copy.decrypted
文件就是脱壳后的可执行文件,用otool
指令验证一下就知道了。
网友评论