首页
社区
课程
招聘
VMP的手动分析和AI还原
发表于: 2025-12-5 21:59 1819

VMP的手动分析和AI还原

2025-12-5 21:59
1819

作者: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.     // 1. 取值 (Fetch)
 4.     unsigned char opcode = *vip++; // 从指令流中读取操作码
 5. 
 6.     // 2. 译码 (Decode) 并 3. 执行 (Execute)
 7.     switch (opcode) { // 根据自定义操作码跳转到对应的处理函数
 8.         case OP_ADD:  // 如果是加法指令
 9.             // ... 执行加法的具体代码 ...
10.             break;
11.         case OP_MOV:  // 如果是移动数据指令
12.             // ... 执行移动数据的具体代码 ...
13.             break;
14.         // ... 其他成百上千的指令处理分支 ...
15.     }
16. }

二、手动分析流程

分析流程根据实现思路,可以围绕取值阶段来还原自定义操作码;

  • 1、首先看看静态分析能否获取到信息

    通过hook registernative获取到MainActivity.onCreate的地址在0x7401b38088

查看maps内存空间可以定位注册在以下标记的一段匿名可执行内存空间中

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

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

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

可以查看大体函数执行逻辑

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

  • 2、定位取值阶段

    分为有无源码对比,可使用两种突破方式,

    1. 通过 JNITRACE分析函数大致执行逻辑,使用指令级 Trace,通过指令块循环次数结合函数指令大小,从而实现突破。
    2. 利用有源码的函数开头的稳定特征,监控读取操作精准命中,实现突破。

    通过指令大小并结合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
d90K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6z5K9g2c8A6j5h3&6q4M7W2S2A6L8X3M7$3y4U0k6Q4x3V1k6e0L8h3q4D9L8q4k6E0M7l9`.`.
4e5K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2U0L8X3u0D9L8$3N6K6i4K6u0W2j5$3!0E0i4K6u0r3N6r3S2W2M7$3g2$3k6h3&6@1K9s2y4G2L8W2)9J5c8Y4m8Q4x3V1j5I4y4o6V1K6x3K6V1J5x3q4)9J5k6h3S2@1L8h3H3`.


[培训]Windows内核深度攻防:从Hook技术到Rootkit实战!

最后于 2025-12-8 12:11 被三六零SRC编辑 ,原因: 一张图片未显示
收藏
免费 13
支持
分享
最新回复 (4)
雪    币: 6
活跃值: (2240)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
ai还原呢
2025-12-7 21:39
0
雪    币: 562
活跃值: (2663)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
lookzo ai还原呢
已更新~
2025-12-8 12:11
0
雪    币: 104
活跃值: (7159)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
tql
2025-12-9 10:51
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
5
q
2025-12-16 17:06
0
游客
登录 | 注册 方可回帖
返回