fart脱壳机逆向

0x01 前言

看雪上看到有人发了一个art脱壳机,看懂了大概,但对于细节还是有一些不理解。找了一下github发发现作者提供了rom包,还有qq群,but qq群竟然要钱,所以qq群了,还是自己动手逆向吧,已知代码都在libart.so 里,把里面不太明白的地方分析一下就好了。

后续是看到看雪有人发了一片类似的文章,只能说有想法的人很多,但是人的主动性不一致,所以具体的分析可以看
这篇文章

0x01 获取目标文件

首先拿到rom包,file system.img ,发现输出是不认识的格式,就上网搜了一下资料,
这篇文章 主要讲了

system2_0.img: Linux rev 1.0 ext4 filesystem data, UUID=57f8f4bc-abf4-655f-bf67-946fc0f9f25b (extents) (large files)

system1_0.img: Android sparse image, version: 1.0, Total of 393216 4096-byte output blocks in 1765 input chunks.

以上两种格式分别为:

1. ext4 filesystem data

2. Android sparse image

我手里的是2,所以用simg2img 将raw 转换成ext4 ,然后mount 一下就行,但是我的mac上执行mount 会报找不到文件的错误(可能是mac系统的问题,root权限也不行),于是就去linux 试了一下,就可以了. 然后在lib下顺利拿 libart.so

0x02 分析

我们的目标是分析脱壳机的具体实现,由于作者在写文章的时候,留下了一些函数名,所以直接找这些符号就可以了。打开ida 进行搜索,发现函数确实存在。找了这几个函数,忽然发现他们都是jni函数,需要去分析framework的代码。没办法,继续找:(。
此处找到3个文件,framework.jar libcore-art.jar libart.so ,所有的代码都在3个文件里面,根据作者提供的dumpMethodCode,我们可以找到对应的代码,这里就不再更新了,之后我会上传一份修改过的,基于8.1的r52的源码的修改,算是对这个的总结吧。