接触 iOS 安全的同学们对越狱、砸壳、Cydia、Theos等名词应该都不陌生,用一句话总结网上文章对砸壳的解释:AppStore
发布的 App 都是加壳(FairPlay DRM)后的 ipa
文件,逆向App就得先砸壳,在iOS系统中,应用砸壳所使用的都是动态砸壳技术,即从运行在进程内存空间中的可执行程序映像(image)入手,将内存中的内容进行转储(dump)处理来实现脱壳处理。这种方法实现起来相对简单,且不必关心使用的是何种加密技术。
找到刚才下载的App,通过查看cryptid
标志位来判断App加密状态。其中1代表加密,0代表已解密:
$ 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 进行砸壳,目前常见的砸壳工具如下: