0%

整体壳脱壳方法总结

写在前面

博客很久没更新了,来更新一波

个人对整体壳脱壳方法做了一些自己的总结,本人菜鸡一个,下面描述如果不对,欢迎指摘。

img

1. 内存dump

dex开头会有标志性标志dex035 /dex036/ dex037等关键标志

在dex偏移0x20处有4个字节存储dex的大小

比如

https://github.com/hluwa/FRIDA-DEXDump.git

核心原理就是在内存中暴力搜索dex035等标志去搜索和dump dex的

img

或者其他一些在IDA上使用的dump工具。

这类的方法基本上只能应对整体壳,针对类抽取壳,如果是恢复后就回填不再抽取出来的类型,就需要看时机了。

2. hook关键函数

hook大法:通过frida、Xposed或者其他一些hook工具 hook 比如dalvik时代的dvmDexFileOpenPartial函数,

img

6.0和7.0的OpenMemory函数

img

8.0-10.0上的OpenCommon函数

img

在这些函数的参数中基本上都会有关于起始地址、dex文件大小的参数,作为关键参数,方便在逆向时dump出dex

比如

https://github.com/WrBug/dumpDex.git

工具使用Xposed结合Native hook的一些其他hook工具对APP进行注入和hook,最终实现dumpdex的效果

img

img

再比如

https://github.com/GuoQiang1993/Frida-Apk-Unpack.git

img

是使用frida 去hook以上所说这些函数进行hook进行dump

这些函数其实也是只能针对整体壳的方式去进行dex的dump

3. 定制源码

事实上正如寒冰老师所说,在Art时代由于DexFile对象类定义时,存在Begin()和Size()函数

img

实际上在任何包含DexFile类型参数的地方其实都可以

甚至于由于ArtMethod有获取对应DexFile的函数

img

那么其实在任何出现ArtMethod的地方其实都可以dump 出dex,只是脱壳点好与坏的问题


关于整体加固的方法,暂时就总结到这里,关于函数抽取类型的加密,目前公开的脱壳方法都是主动调用去解决的,这些方式都是使用主动调用实现的。

这里就列出来源码以及对应文章吧

源码: DexHunter

具体原理: https://wooyun.js.org/drops/%E4%BB%8EAndroid%E8%BF%90%E8%A1%8C%E6%97%B6%E5%87%BA%E5%8F%91%EF%BC%8C%E6%89%93%E9%80%A0%E6%88%91%E4%BB%AC%E7%9A%84%E8%84%B1%E5%A3%B3%E7%A5%9E%E5%99%A8.html

源码: FUPK3

原理介绍: https://bbs.pediy.com/thread-246117.htm

源码:FART

原理介绍:https://bbs.pediy.com/thread-252630.htm