一般咱们从App Store下载的应用,拿到安装包以后,经过class-dump导出头文件的时候,会发现没法导出头文件,缘由就是App Store对咱们上传的App进行了加壳操做。git
利用特殊的算法,对可执行文件的编码进行改变(好比压缩、加密),以达到保护程序代码的目的github
这里的Crypt ID表示加密工具类型,若是为1,表示使用编号为1的加密工具进行加密算法
otool -l 可执行文件路径 | grep crypt
复制代码
因为Load Commands内容较多,因此经过crypt关键字进行检索bash
既然没法经过加壳后的程序导出咱们所须要的头文件信息,那么咱们就须要对程序进行脱壳操做工具
摘掉壳程序,将未加密的可执行文件还原出来编码
脱壳方式有两种,硬脱壳和动态脱壳。加密
iOS中经常使用的脱壳工具备Clutch和dumpdecryptedspa
能够点击下载Clutch最新Release版本命令行
scp -P 10088 ./Clutch root@localhost:/usr/bin
复制代码
chmod +x /usr/bin/Clutch
复制代码
Clutch -i
复制代码
Clutch -d 2
Clutch -d com.gemd.iting
复制代码
路径当中的/private/var是iPhone中的真实路径,iPhone的/var是/private/var的替身code
点击下载dumpdecrypted工具
DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib 可执行文件路径
复制代码
能够经过ps -A查看可执行文件的完整路径
执行完成以后,在/var/root目录下会生成.decrypted文件,这就是脱壳以后的可执行文件。如今使用otool命令查看Load Commands能够发现Crypt ID为0。
最后使用class-dump就能够导出可执行文件中的全部头文件了。