关于砸壳
用一句话总结网上文章对砸壳的解释:AppStore
发布的 App 都是加壳(FairPlay DRM)后的 ipa
文件,逆向App就得先砸壳,在iOS系统中,应用砸壳所使用的都是动态砸壳技术,即从运行在进程内存空间中的可执行程序映像(image)入手,将内存中的内容进行转储(dump)处理来实现脱壳处理。这种方法实现起来相对简单,且不必关心使用的是何种加密技术。
准备:
AppStore下载目录
/var/containers/Bundle/Application/$uuid
找到刚才下载的App,通过查看cryptid
标志位来判断App加密状态。其中1代表加密,0代表已解密:
Bash
$ otool -lv /var/containers/Bundle/Application/xxxxx-xxxx-xxxx-xxxx-xxxxx/Foo.app/Foo | egrep 'LC_ENCRYPTION_INFO|cryptid'
cmd LC_ENCRYPTION_INFO_64
cryptid 1
如果App没有被加密,则直接交给dyld加载并且运行。如果App已经被加密,则需要内核对其进行解密,得到解密后的MachO文件,再将其交给dyld加载并运行。
再把加密的 macho 用 MachOView 打开看到Load Commands 中有LC_ENCRYPTION_INFO
的Crypt ID
为 1 和上面otool命令查看的内容一致:
Hopper 打开找到入口,会提示这是个加密文件:
接下来就是对 App 进行砸壳,目前常见的砸壳工具如下:
- dumpdecrypted
- Clutch
- frida-ios-dump
- CrackerXI+
最后更新:
2023-02-07