-
-
VMP的手动分析和AI还原
-
发表于:
2025-12-5 21:59
1821
-
作者:uiop@360SRC
VMP的手动分析和AI还原
前言
DEX-VMP:主要保护Android应用中的Java/Kotlin方法。它会将Dex文件中的ART字节码转换为自定义字节码,并将原方法标记为native方法。
一、DEX-VMP实现原理
根据art虚拟机解释模式可以模仿实现自定义操作码进行取值、译码、执行
以下是简易实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 1.
2. while (true) {
3.
4. unsigned char opcode = *vip++;
5.
6.
7. switch (opcode) {
8. case OP_ADD:
9.
10. break;
11. case OP_MOV:
12.
13. break;
14.
15. }
16. }
|
二、手动分析流程
分析流程根据实现思路,可以围绕取值阶段来还原自定义操作码;
查看maps内存空间可以定位注册在以下标记的一段匿名可执行内存空间中

将上边内存空间dump出来,可以看到这段代码为跳板函数会跳转到0x7362fb934执行函数

0x7362f对应在下边内存,通过以前对壳的分析,这段匿名内存是通过壳进行加载并匿名的实际逻辑实现

对正在执行oncreate函数的内存进行Dump并完成修复,会发现函数存在大量br跳转,手动简单修复br跳转后查看oncreate函数(未完全修复完毕),需结合动态半自动修复
可以查看大体函数执行逻辑

修复后的cfg,可以看出很多跳转缺失,纯靠静态分析是非常困难,需要结合动态调试来下一步分析

2、定位取值阶段
分为有无源码对比,可使用两种突破方式,
- 通过 JNITRACE分析函数大致执行逻辑,使用指令级 Trace,通过指令块循环次数结合函数指令大小,从而实现突破。
- 利用有源码的函数开头的稳定特征,监控读取操作精准命中,实现突破。
通过指令大小并结合trace进行快速定位代码块进行分析:通过分析oncreate函数开头以及指令大小定位内存加密后的oncreate函数指令位置,此 oncreate函数存在58条指令
源码开头:

在dump的dex中查找指令开头位置再0x63f77c

通过trace的log分析后,发现以下代码块出现了58次正好结合58条指令,猜测并标记地址为取指令行为

知道取指令地址后下监控断点验证查看确实在0x167608处取出指令

跳转过去分析取值后跳到0x16766c

分析0x16766c取指后操作进行字节码解密处理

通过以上分析可以发现完全和trace的猜测一样。
继续通过修复oncreate函数追踪分析13353c发现存在jni映射

修改结构体顺序还原自定义jni映射

向下追踪找到执行实际函数操作

通过回调向上分析

结合trace验证,确定为分发指令到0x15af88里边执行

Hook该解密函数获取所有opcode

接下来就是通过dex索引查找函数一步步进行字节还原,需要手工对照一点点还原比较耗时;能否取巧结合ai方式进行还原,可以进一步实践;
三、基于AI还原
dex vmp的基础支撑其实是jni函数,通过追踪jni调用,人工分析基本代码流程,筛选后的tracelog再结合强大的ai能力进行还原能节省很多人工分析流程时间,以下为ai还原对照,可以看到对于简单的函数可以进行完美还原,缺点是对于复杂函数涉及的log非常大的话需要多次拼接进行分析,造成的结果可能不是特别准确,但是基本逻辑不会出现问题可以进行正常的逆向分析
Ai还原代码:

源dex反编译代码:

四、VMP保护更安全的展望
针对以上分析过程使用的突破方式,可以采用的防护手段
JNItrace防护
1、通过jnienv计算所有jni函数偏移量来通过函数指针形式进行调用隐藏所有jni的调用过程
2、通过jnienv获取jni接口地址,检测jni接口函数是否在libart范围内,以及jni函数开头是否改变,防护Jnitrace、frida-trace、xposed实现的jnitrace。
指令trace防护
1、采用 DexVM 与并对解密算法 VM 进行嵌套,将核心逻辑与算法执行流完全虚拟化,从而提升代码混淆强度并抵抗传统指令级分析,类似如下实现即可防护通过指令数量来快速定位代码块的方法

参考
https://bbs.kanxue.com/thread-288731.htm
https://bbs.kanxue.com/thread-270799.htm
https://bbs.kanxue.com/thread-285212.htm
222K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6z5K9g2c8A6j5h3&6q4M7W2S2A6L8X3M7$3y4U0k6Q4x3V1k6e0L8h3q4D9L8q4k6E0M7l9`.`.
ccaK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2U0L8X3u0D9L8$3N6K6i4K6u0W2j5$3!0E0i4K6u0r3N6r3S2W2M7$3g2$3k6h3&6@1K9s2y4G2L8W2)9J5c8Y4m8Q4x3V1j5I4y4o6V1K6x3K6V1J5x3q4)9J5k6h3S2@1L8h3H3`.
[培训]Windows内核深度攻防:从Hook技术到Rootkit实战!
最后于 2025-12-8 12:11
被三六零SRC编辑
,原因: 一张图片未显示