引言
从 AppStore 下载的 App 都是经过加密过的,可执行文件被加上了一层“壳”。在这种情况下,想要获取头文件,需要先解密 App 的可执行文件,俗称“脱壳”。
加壳
利用特殊的算法,对可执行文件的编码进行压缩、加密,以达到保护程序代码的目的。加密后的可执行文件在被载入内存前,在文件外围会有一个壳程序。载入内存后,执行壳程序会对之前的加密操作进行解密,原可执行文件才得以运行。
- 验证可执行文件是否被加密
otool -l 文件路径 | grep cryptid- MachOView工具查看
![[100][100]](/2018/05/13/想知道的更多,先给你的APP脱壳吧/2.png)
脱壳
- 脱壳只是为了拿到里面的头文件内容,并不影响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动态库文件![[100][100]](/2018/05/13/想知道的更多,先给你的APP脱壳吧/3.png)
- 解决方案:尝试先安装 theos 工具
- 将.dylib动态库文件拷贝到 iPhone 的
/var/root目录下 - 使用环境变量
DYLD_INSERT_LIBRARIES将.dylib动态库文件注入到待脱壳程序中。DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib 待脱壳程序路径
- 脱壳的结果是一个 Mach-O 文件。
参考文献:
第4章 iOS工具集-dumpdecryted
![[100][100]](/2018/05/13/想知道的更多,先给你的APP脱壳吧/1.png)
![[100][100]](/2018/05/13/想知道的更多,先给你的APP脱壳吧/4.png)


