吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 9110|回复: 56
上一主题 下一主题
收起左侧

[Web逆向] Web逆向之VMP还原全流程

  [复制链接]
跳转到指定楼层
楼主
lichuntian00 发表于 2025-6-22 22:22 回帖奖励
某歌邮箱注册参数f.req 还原过程。
trace不说了,试试自实现反编译器还原VMP吧!

注册参数如下:


返回位置如下:


虚拟机解释器如下:


开始分析VMP结构:

一、VMP指令集


请求首页,302跳转下发js-challenge页面,有加密配置参数,里面包含指令集字符串(图片所示),很好拿到,后续调用atob解密,并 &255保留低8位,得到字节数组形式的指令集

二、虚拟机上下文分析


这是分析vmp之后提取出来的虚拟机上下文,Z是虚拟寄存器集合,一共512个
其中关键的几个寄存器有,
36号PC寄存器,
336号内层虚拟机PC寄存器,
184号轮密钥种子寄存器
280  115 509  234 147  44 136 511 210 471 这些寄存器存放生成加密参数所需上下文
关键虚拟机函数有:


N函数,写入寄存器函数


y函数 ,读取寄存器值


C函数,从虚拟机字节码中读取指令并解码复杂指令集为不同的指令类型,分发给B8解密指令


B8函数,读取指令并根据参数判断是否密钥变换表,使用当前字节块的轮密钥对指令进行解密


hJ函数,生成8字节解密表,用于取指之后,对指令进行异或解密

三、虚拟机执行逻辑分析


1.先从PC寄存器取字节码索引,然后同步到内层虚拟机的PC寄存器,然后调用C函数解码


2.C函数将指令解码为长短指令等复杂指令集,函数体一共有5个分支,分别对应
1.(w | 48) == w 分支 往寄存器中存值
2.(w - 5 | 5) >= w && (w + 4 & 43) < w分支  生成整数值
3.(w >> 1 & 12) < 12 && w + 6 >> 4 >= 3分支  处理变长操作码  先读取1字节,判断高位是否为1,扩展为长指令
4.w + 5 >> 3 == 1 分支 将寄存器的值变为闭包变量

5.(w + 7 ^ 27) < w && (w - 6 ^ 9) >= w 分支  操作码读取  读取8位并开启密钥变换,或者读取低7位,左移2位组成9位操作码

3.C函数解码完成之后,下发给B8函数,按照C的解码规则来读取指令,详情如下:


首先从36 PC寄存器取出指定位数,同时判断是否超出索引
判断现在解密的位数属于第几组解密块,如果是新的解密块,需要调用hj更新轮密钥变换表
对取到的字节和当前轮的轮密钥进行异或解密
计算已经解密的字节,并向前推进对应位数,对齐到字节最低位,提取结果,并更新PC寄存器值
B8返回操作码,并根据高位判断是否为长指令,如果是长指令需要扩展为对应的操作码


4.C返回对应的操作码之后,调用y函数从寄存器取操作码对应的handler,
不同的操作码对应不同的handler,利用handler执行操作码,操作数是基于操作码计算得到的

5.每执行完一轮操作码之后,进行检测。然后跳出循环执行下一个取指解码操作

完整流程是:取索引下标(利用PC)————解码(C函数)————取指(B8)————执行(跳转到对应handler)————检测(js文件被我处理过,移除了反调试和检测函数)

四、操作码分析
1.生成数值型操作码


操作码 24  生成4字节数值


操作码66,生成1字节数值


操作码105 ,生成双字节数值
不一一列举
这些操作码的作用都是生成对应字节数值,并存储到寄存器

2.生成字符串型操作码


操作码304 生成字符串  (调试的时候忘了截图!!)
可以看出来操作数是基于操作码计算得到的  

3.函数调用型操作码


操作码302  进行函数调用

4.属性访问型操作码


操作码495 访问浏览器对象下的属性

另外,
- **操作码122**:生成`eval`函数调用。
- **操作码149、220、446**:处理数组操作(增大数组`register_280`)。
- **操作码265、495**:对象属性赋值。
- **操作码319**:生成数组。
- **操作码477**:创建新对象

五、编写反编译器
分析完了,开始写反编译器,流程如下:

1.初始化节点


2.创建空AST


3.模拟虚拟机执行环境


4.加载base64解码后的指令


5.指令处理循环  读取操作码  处理不同的操作码    解码操作码语义


6. 类型推断生成ast 生成不同类型节点  根据值类型生成对应AST节点


7.ast生成  根据操作类型创建对应的AST节点   将节点添加到程序体  


六、输出虚拟化之前的js代码


一个变种白盒AES,一个变异的base64

web端协议参数生成


app端webview参数生成

image.png (134.39 KB, 下载次数: 1)

image.png

image.png (28.56 KB, 下载次数: 2)

image.png

image.png (134.39 KB, 下载次数: 2)

image.png

image.png (103.44 KB, 下载次数: 1)

image.png

image.png (29.57 KB, 下载次数: 3)

image.png

image.png (51.07 KB, 下载次数: 2)

image.png

image.png (81.76 KB, 下载次数: 2)

image.png

image.png (10.26 KB, 下载次数: 2)

image.png

image.png (76.28 KB, 下载次数: 2)

image.png

image.png (76.28 KB, 下载次数: 3)

image.png

image.png (30.11 KB, 下载次数: 2)

检测函数

检测函数

免费评分

参与人数 28吾爱币 +24 热心值 +26 收起 理由
Nulsec + 1 + 1 我很赞同!
hupanzi + 1 我很赞同!
fiscivaj + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
dandelion2sunny + 1 + 1 我很赞同!
Leaf08 + 1 我很赞同!
chuling01 + 1 我很赞同!
qinwap + 1 + 1 我很赞同!
hxw0204 + 1 + 1 热心回复!
搁浅233 + 1 鼓励转贴优秀软件安全工具和文档!
fengbolee + 2 + 1 用心讨论,共获提升!
zzdong123 + 1 + 1 用心讨论,共获提升!
mtouyao + 1 + 1 谢谢@Thanks!
Rummy + 1 + 1 用心讨论,共获提升!
allspark + 1 + 1 用心讨论,共获提升!
laozhang4201 + 1 + 1 谢谢@Thanks!
ravi + 1 + 1 用心讨论,共获提升!
muzili520 + 1 + 1 我很赞同!
0ling + 1 我很赞同!
melooon + 1 + 1 我很赞同!
lwGoodChinese + 1 + 1 用心讨论,共获提升!
zoomzoomblood + 1 用心讨论,共获提升!
zhaoyf18 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
杨辣子 + 1 + 1 谢谢@Thanks!
外酥内嫩 + 1 + 1 直接还原vmp太强了
#sky# + 1 + 1 热心回复!
scz + 1 + 1 谢谢分享
qqycra + 1 + 1 用心讨论,共获提升!
helian147 + 1 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
 楼主| lichuntian00 发表于 2025-6-24 13:52 |楼主
xiaoweigege 发表于 2025-6-23 09:41
反编译这块的逻辑有点一笔带过,希望博主可以具体讲讲怎么利用 ast 编写反编译的代码。

分析操作码可以得到操作码的类型,调原来的操作码handler动态生成结果。
然后先构建左值,左值可以自定义,构建右值,根据操作码确定不同的节点类型,节点值调原来的操作码函数,然后把生成的整个完整表达式注入ast。
沙发
qqycra 发表于 2025-6-23 07:25
3#
YIUA 发表于 2025-6-23 08:38
4#
latecomer 发表于 2025-6-23 09:15
YIUA 发表于 2025-6-23 08:38
大佬,可以加好友带带我吗

顶楼上,同求
5#
xiaoweigege 发表于 2025-6-23 09:41
反编译这块的逻辑有点一笔带过,希望博主可以具体讲讲怎么利用 ast 编写反编译的代码。
6#
FlyPan 发表于 2025-6-23 10:39
大佬牛波一
7#
mscsky 发表于 2025-6-23 11:53
这么硬核的吗
8#
外酥内嫩 发表于 2025-6-23 13:19
大佬太强了,还原它肯定研究了很久吧
9#
Hmily 发表于 2025-6-23 14:11
@lichuntian00 底部多了几张图是不是文章插丢了?
10#
zhaoyf18 发表于 2025-6-23 15:31
大佬太强了,完全不懂的样子
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-4-15 04:01

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表