加壳
- .ipa –> AppStore –> 安装到手机。在上传到AppStore时对可执行文件进行了加壳操作,也就是进行了加密。
- iPhone上安装的App不是所有都被加密的,这取决于App的安装来源,只有是AppStore来源的才是加密的。
- 什么是加壳?
- 利用特殊的算法,对可执行文件的编码进行改变(比如压缩、解密),以达到保护程序代码的目的。
1
2
3
4
5
6
执行
加壳前 可执行文件 -----> 内存(可执行文件)
执行
加壳后 壳程序(可执行文件(已加密)) -----> 内存(壳程序(可执行文件(已加密)))
解密
-----> 内存(壳程序(可执行文件))
脱壳
- 什么是脱壳
- 摘掉壳程序,将未加密的可执行文件还原出来(砸壳)
- 脱壳主要有两种方法: 硬脱壳、动态脱壳
1
2
3
4
5
6
执行解密算法
硬脱壳 壳程序(可执行文件(已加密)) --------> 可执行文件
执行
动态脱壳 壳程序(可执行文件(已加密)) -----> 内存(壳程序(可执行文件(已加密)))
从内存中导出
--------> 可执行文件
脱壳工具
- Clutch
- dumpdecrypted
AppCracker
、Crackulous
验证脱壳
- 查看
Load Commands -> LC_ENCRYPTION_INFO ->Crypt ID
的值,0代表未加密。 - 通过
otool
命令行也可以:otool -l 可执行文件 | grep crypt
工具使用
到Clutch下载
Clutch
,直接下载Clutch 2.0.4就可以。- 将Clutch直接拖到
/usr/bin
文件夹,或者用命令行
1 2
// Clutch当前路径 scp -P 10010 Clutch root@localhost:/usr/bin/
注意:
如果在iPhone上终端执行Clutch出现
-sh: /usr/bin/Clutch: Permission denied
报错时,就是没有权限,可以使用下列命令给Clutch执行权限。chmod +x /usr/bin/Clutch
获取权限- 列出已安装的App
Clutch -i
- 输入App序号或者Bundle Id进行脱壳操作
Clutch -d App序号或者Bundle Id
- 脱壳成功后会生成一个ipa文件
- 位置:
/private/var/mobile/Documents/Dumped/xxx
- 位置:
- 将
Dumped
文件下载到Mac
中:scp -r root@192.168.3.20:/private/var/mobile/Documents/Dumped/
- 将Clutch直接拖到
dumpdecrypted
下载dumpdecrypted源代码目录下执行make指令进行编译,获得dylib动态库文件
将dylib文件拷贝到iPhone上(如果是root用户,建议放/var/root目录)
终端进入
dylib
所在目录下使用环境变量
DYLID_INSERT_LIBRARIES
将dylib注入到需要脱壳的可执行文件(可执行文件可以通过ps -A(查看进程)查看获取)DYLID_INSERT_LIBRARIES=dumpdecrypted.dylib 可执行文件路径
1 2 3 4
// 查看App路径 $ ps -A // 脱壳 $ DYLID_INSERT_LIBRARIES=dumpdecrypted.dylib /var/containers/Bundle/Application/5A929474-CD06-4A8E-A759-F8AAD1EE5044/ting.app/ting
.decrypted
文件就是脱壳后的可执行文件