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

dex开头会有标志性标志dex035 /dex036/ dex037等关键标志
在dex偏移0x20处有4个字节存储dex的大小
比如
0fbK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6Z5L8s2g2%4j5g2)9J5c8V1k6d9d9f1c8m8i4K6u0V1c8p5g2j5c8s2g2E0M7q4)9J5k6h3N6A6N6l9`.`.
核心原理就是在内存中暴力搜索dex035等标志去搜索和dump dex的

或者其他一些在IDA上使用的dump工具。
这类的方法基本上只能应对整体壳,针对类抽取壳,如果是恢复后就回填不再抽取出来的类型,就需要看时机了。
hook大法:通过frida、Xposed或者其他一些hook工具 hook 比如dalvik时代的dvmDexFileOpenPartial函数,

6.0和7.0的OpenMemory函数

8.0-10.0上的OpenCommon函数

在这些函数的参数中基本上都会有关于起始地址、dex文件大小的参数,作为关键参数,方便在逆向时dump出dex
比如
64cK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6i4M7V1u0#2k6#2)9J5c8X3c8#2L8i4m8p5k6i4S2Q4x3X3g2Y4K9i4b7`.
工具使用Xposed结合Native hook的一些其他hook工具对APP进行注入和hook,最终实现dumpdex的效果


再比如
c80K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6s2N6h3!0c8K9h3q4F1k6K6p5&6z5e0y4Q4x3V1k6r3M7X3W2V1j5g2)9J5k6p5q4H3K9#2)9J5k6q4g2F1M7r3q4U0K9#2)9J5k6h3N6A6N6l9`.`.

是使用frida 去hook以上所说这些函数进行hook进行dump
这些函数其实也是只能针对整体壳的方式去进行dex的dump
事实上正如寒冰老师所说,在Art时代由于DexFile对象类定义时,存在Begin()和Size()函数

实际上在任何包含DexFile类型参数的地方其实都可以
甚至于由于ArtMethod有获取对应DexFile的函数

那么其实在任何出现ArtMethod的地方其实都可以dump 出dex,只是脱壳点好与坏的问题
关于整体加固的方法,暂时就总结到这里,关于函数抽取类型的加密,目前公开的脱壳方法都是主动调用去解决的,这些方式基本上都是使用主动调用实现的。
这里就列出来源码以及对应文章吧
源码: DexHunter
具体原理
源码: FUPK3
原理介绍
[培训]科锐逆向工程师培训第53期2025年7月8日开班!
最后于 2020-11-7 12:15
被Simp1er编辑
,原因: