想知道的更多,先给你的APP脱壳吧

引言

从 AppStore 下载的 App 都是经过加密过的,可执行文件被加上了一层“壳”。在这种情况下,想要获取头文件,需要先解密 App 的可执行文件,俗称“脱壳”。

加壳

利用特殊的算法,对可执行文件的编码进行压缩、加密,以达到保护程序代码的目的。加密后的可执行文件在被载入内存前,在文件外围会有一个壳程序。载入内存后,执行壳程序会对之前的加密操作进行解密,原可执行文件才得以运行。

  • 验证可执行文件是否被加密
    • otool -l 文件路径 | grep cryptid
    • MachOView工具查看

脱壳

  • 脱壳只是为了拿到里面的头文件内容,并不影响Tweak过程。
  • 硬脱壳
    • 在知道加密算法的前提下,执行解密算法还原出加密前的可执行文件。
    • iOS逆向普遍采取硬脱壳的方式。
  • 动态脱壳
    • 仍然将加密后的可执行文件同壳程序一起载入内存运行,利用壳程序执行完解密操作后,将解密后的可执行文件从内存中导出。

脱壳工具一:Clutch

  • 下载地址: https://github.com/KJCracks/Clutch
  • 将Clutch文件拷贝到 iPhone 的 usr/bin 目录下
    • 若提示权限不够,执行:chmod +x /usr/bin/Clutch
  • 查看iPhone设备上未脱壳的应用:Clutch -i
  • 脱壳操作:Clutch -d App序号或<BundleId>
  • 脱壳的结果是.ipa包

脱壳工具二:dumpdecryted

  • 下载地址: https://github.com/stefanesser/dumpdecrypted
  • 来到文件路径,执行 make 指令进行编译,生成 .dylib动态库文件
    • 解决方案:尝试先安装 theos 工具
  • 将.dylib动态库文件拷贝到 iPhone 的 /var/root 目录下
  • 使用环境变量 DYLD_INSERT_LIBRARIES.dylib 动态库文件注入到待脱壳程序中。
    • DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib 待脱壳程序路径
  • 脱壳的结果是一个 Mach-O 文件。

参考文献:

第4章 iOS工具集-dumpdecryted

iOS应用逆向工程 第二版沙梓社 吴航(著)