5逆向 - 脱壳(Qiao)
Sat, May 5, 2018
e问题:要分析一个安装到手机上的应用,需要找到手机上的ipa包
- 找到iPhone上的安装包
- ps -A 枚举所有手机上的进程
- 此处就是安装包的位置
- 把安装包拿到mac
- class-dump、Hopper的时候,无法对改ipa包进行解析
- 说明ipa被加密了
加壳
开发完一个app之后,打包成了ipa文件 → 上传到App Store(app store对ipa进行加壳操作 - 加密)
只要应用是从app store下载的,那应用一定是被加壳的
定义:利用特殊的算法,对可执行文件的编码进行改变,这样拿到的可执行文件就不是之前的可执行文件了。
有壳/无壳的处理区别
无壳:没被加壳的可执行文件 → (ldyd)直接装载到内存中
有壳:加壳的可执行文件(不可直接执行,ldyd不认识它,无法直接装在到内存中)
加壳之后的文件,装载到内存中后,壳程序会执行解密操作。解密之后壳程序失去作用。
脱壳
两种方法:硬脱壳、动态脱壳
硬脱壳:执行一个解密算法,直接脱壳到可执行文件
动态脱壳:首先执行这个程序,让壳程序把可执行文件解密掉,然后从内存中dump出可执行文件
iOS的脱壳方案:硬脱壳
测验文件是否有壳
方案一:Mach-O View
壳程序依然是个Mach-O文件,可以通过Mach-O View查看是否加密
ENCRYPTION_INFO中的Crypt ID 为非0,说明被加过密的。
方案二:otool -l app名称 | grep cryptid
常用脱壳工具
Clutch
https://github.com/KJCracks/Clutch/releases
需要拿到手机上去
用法:Clutch -i 列出所有可脱壳操作
用法:Clutch -d ID
路径:/private/var 和 /var相同
结果:
dumpdecrypted
微信这个app,用Clutch无法脱壳成功,可以用这个东东
用法:
1.把dumpdecryped.dylib动态库放到手机中Terminal可以访问到的地方
2. +.app所在文件夹路径