一、壳
- APP上传到AppStore后,会被自动加壳,即利用特殊的算法, 对可执行文件的编码进行改变(例如:压缩、加密),已达到保护程序代码的目的。
-
加壳之前,执行程序,就会直接把可执行文件载入到内存中,如下图所示
-
加壳之后,执行程序,会把包裹着加密可执行文件的壳程序载入内存,在内存中,由壳程序对可执行文件进行解密,然后才会执行,如下图所示:
- 加壳之后,由于可执行文件被加密了,所以就无法通过MachOView、Hopper Disassembler、class-dump、IDA等工具分析Mach-O文件了
二、脱壳
脱壳就是摘掉壳程序,将未加密的可执行文件还原出来
脱壳的办法主要有两种:硬脱壳、动态脱壳
3.硬脱壳就是编写解密算法,把经过壳程序加密的可执行文件解密出来,如下图所示:
4.动态脱壳就是把内存中已经解密的可执行文件,直接从内存中导出来,如下图所示:
- 如何判断可执行文件是否已经脱壳了呢?这里介绍两种办法:
-
使用MachOView工具查看可执行文件,查看Load Commands -> LC_ENCRYPTION_INFO -> Crypt ID的值,0代表未加密,1代表已加密,如下所示:
-
在终端中,通过otool命令判断,otool的语法是:otool -l 可执行文件路径 | grep crypt,如下所示:
三、脱壳工具
最早的砸壳工具是stefanesser写的dumpdecrypted,通过手动注入然后启动应用程序在内存进行dump解密后的内存实现砸壳,这种砸壳只能砸主App可执行文件。
对于应用程序里面存在framework的情况可以使用conradev的dumpdecrypted,通过
_dyld_register_func_for_add_image
注册回调对每个模块进行dump解密。但是这种还是需要拷贝dumpdecrypted.dylib,然后找路径什么的,还是挺麻烦的。然后有了KJCracks的Clutch,通过posix_spawnp创建进程然后dump直接生成ipa包在设备,可以说是很方便了。这个是工具在使用的时候大部分应用会出报错,此外生成的包还需要自己拷贝。
四、配置frida
- iPhone上安装frida的方法:
打开Cydia->软件源->编辑->添加,输入build.frida.re,添加软件源后,搜索安装Frida即可
- 通过USB使用SSH连接iOS设备
brew install usbmuxd
安装usbmuxd库之后,就顺带安装了一个小工具iproxy,该工具会将设备上的端口号映射到电脑上的某一个端口,例如:
iproxy 2222 22
-
映射端口保持一致即可
- cd进入下载好的frida-ios-dump目录后,运行./dump.py Display name或Bundle identifier,就可脱壳成功,如下所示:
可以先用./dump.py -l命令,列出来所有的可脱壳的应用名称和BundleID
./dump.py -l
让然后选择其中一个,执行./dump.py Display name命令,以微信为例:
./dump.py com.tencent.xin