iOS逆向-应用脱壳

请注意,本文编写于 386 天前,最后修改于 191 天前,其中某些信息可能已经过时。

当我们将应用上传App Store后,Apple经过审核发布的时候会将我们的可执行文件进行加壳。
加壳就是利用特殊的算法,对可执行文件的编码进行改变,例如压缩,加密等,已达到保护程序代码的目的。
脱壳就是将未加密的可执行文件还原出来。

检测可执行文件是否加壳

通常来说只要是从App Store中下载的程序都是加过壳的。而从越狱商店下载的都是未加壳的。

可以使用otool工具进行检测,可执行文件的crypt id的值 如果是0就是未加壳。

加壳的
加壳的

未加壳
未加壳

除此之外可以使用MachOView查看Mach-O文件

MachOView
MachOView

另外Clutch脱壳工具的Clutch -i命令可以列出加过壳的应用。

脱壳工具

Clutch

Clutch将其放到iPhone的/usr/bin目录下保证可以随时使用Clutch命令。

当执行Clutch的时候发现权限不够可以使用chmod +x命令添加权限。

Clutch -i命令可以列出加壳的应用。

Clutch -i加壳的应用
Clutch -i加壳的应用

然后使用Clutch -d加需要脱壳的序号比如今日头条:Clutch -d 4就可以执行脱壳操作了。脱壳结束之后会提示在某个路径下生成.ipa包。

脱壳结束
脱壳结束

然后就可以通过ipa包获得脱壳了的Mach-O文件了。

dumpdecrypted

dumpdecrypted在下载的源码目录下(makefile存在的目录)执行make命令编译获得dylib动态库。并将其放在iPhone的var/root目录下。

进入dylib所在的目录使用DYLD_INSERT_LIBRARIES环境变量将动态库注入需要脱壳的可执行文件中。

微信脱壳
微信脱壳

执行结束会在当前目录生成一个.decrypted的脱壳之后的Macj-O文件。

.decrypted文件
.decrypted文件

获取头文件

可以使用class-dump的class-dump -H xx -o xx获取脱壳之后的Mach-O可执行文件的头文件。

class-dump
class-dump

头文件

头文件
头文件

笔记来自 www.520it.com 小码哥iOS逆向

Comments

添加新评论