news 2026/5/17 2:18:33

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/5/15 14:10:42

ESP-IDF中DAC输出驱动的应用实例解析

如何用 ESP32 内置 DAC 输出模拟信号?实战详解与避坑指南你有没有遇到过这样的场景:想给一个传感器加个 1.65V 的偏置电压,结果发现还得额外加一颗 IC DAC 芯片;或者想让 LED 实现真正平滑的亮度调节,却发现 PWM 总带着…

作者头像 李华
网站建设 2026/5/3 8:18:04

PotPlayer百度翻译字幕插件终极配置指南:5分钟实现多语言观影自由

想要在PotPlayer中轻松观看各种外语视频内容吗?这款基于百度翻译API的字幕翻译插件能够为你带来前所未有的观影体验。无论是日语动漫、英语电影还是韩剧,只需简单几步配置,即可享受实时字幕翻译带来的便利。 【免费下载链接】PotPlayer_Subti…

作者头像 李华
网站建设 2026/5/3 5:24:50

PaddlePaddle镜像如何实现模型沙箱隔离?安全推理环境搭建

PaddlePaddle镜像如何实现模型沙箱隔离?安全推理环境搭建 在金融、医疗、政务等高敏感领域,AI模型一旦部署到生产环境,就不再只是“跑通代码”那么简单——它必须面对真实世界中的多重挑战:不同业务的模型能否共存而不冲突&#…

作者头像 李华
网站建设 2026/5/1 5:59:46

WELearn助手终极指南:快速掌握智能学习新体验

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

作者头像 李华
网站建设 2026/5/12 9:33:20

飞书文档智能迁移解决方案:企业知识资产数字化全流程指南

飞书文档智能迁移解决方案:企业知识资产数字化全流程指南 【免费下载链接】feishu-doc-export 项目地址: https://gitcode.com/gh_mirrors/fe/feishu-doc-export 在数字化转型浪潮中,企业知识资产的高效流转成为核心竞争力。传统的文档管理方式往…

作者头像 李华
网站建设 2026/5/9 12:18:56

PaddlePaddle镜像中的位置编码(Position Encoding)详解

PaddlePaddle镜像中的位置编码(Position Encoding)详解 在构建中文自然语言处理系统时,一个看似微小却影响深远的设计选择往往决定了模型能否真正“理解”语言——比如,“我爱北京”和“北京爱我”,词元完全相同&#…

作者头像 李华