5逆向 - 脱壳(Qiao)

 

e问题:要分析一个安装到手机上的应用,需要找到手机上的ipa包

  1. 找到iPhone上的安装包
    1. ps -A 枚举所有手机上的进程
    2. 此处就是安装包的位置
  2. 把安装包拿到mac
  3. class-dump、Hopper的时候,无法对改ipa包进行解析
    1. 说明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

需要拿到手机上去

用法:Clutch -i  列出所有可脱壳操作

用法:Clutch -d ID

路径:/private/var 和 /var相同

结果:

dumpdecrypted

微信这个app,用Clutch无法脱壳成功,可以用这个东东

用法:

1.把dumpdecryped.dylib动态库放到手机中Terminal可以访问到的地方

2. +.app所在文件夹路径