当前位置: 首页 > news >正文

某音a_bogus vmp逆向

URL aHR0cHM6Ly93d3cuZG91eWluLmNvbS91c2VyL01TNHdMakFCQUFBQWdxOGNiN2NuOUJ5aFpibXgtWFFEZFJUdkZ6bUplQkJYT1VPNFFmbFA5Nk0/ZnJvbV90YWJfbmFtZT1tYWlu

电脑端某音的签名逻辑一直是老生常谈的问题,其核心仍然围绕 VMP 虚拟机保护 展开。我们可以先在浏览器开发者工具中针对 a_bogus 参数下一个 XHR 断点,当请求中出现该参数时,程序会自动断住,在文件 bdms_1.0.1.19_fix.js
通过断点可以观察到,a_bogus 并不是在普通明文 JavaScript 逻辑中直接生成的,而是在 VMP 虚拟机内部完成计算的。因此,后续分析重点需要放在 VMP 执行流程、指令分发逻辑、虚拟栈变化以及关键参数进入和输出的位置上。
我们看堆栈 ,记得把日志打全,包含数组的操作,还有计算-+*/^&<< >>等

我们直接下日志断点,发现在这里生成的


下面我们来分析下,怎么生成的a_bogus。

1.1生成3个32位数组

两次sm3加密URL拼接+ dhzx dhzx进行两次sm3加密 经过了ua base64编码 然后进行sm3加密

1.2生成 50 位数组

上面的32位数组的取值,时间戳等 50位,生成比较远,必须日志下全,看在哪里设置进去的

1.3 生成 43 位数组

浏览器屏幕尺寸编码,得到 43 位数组:

"560|919|1920|1040|1920|1040|1920|1080|Win32"

这些参数通过ord()函数转换为 ASCII 值,并构成一个长度为 43 的数组。

1.4 生成 3 位数组

通过以下方式生成3 位数组,它基于timestamp参数生成:

timestamp+3进行计算得到

1.5 生成 8 位数组

生成8 位数组

通过随机数进行计算生成

1.6 生成 1 位数组

8 位数组50 位数组进行 XOR 运算,并合成一个新的数组array_1

1.7 合并 97 位数组

array_50array_43array_3array_1数组合并为一个新的97 位数组环境不同长度不同:

array_97=array_50+array_43+array_3+array_1


2. 生成 129 位数组

通过以下方式将97 位数组转换为129 位数组

传入之前拼接的97位数组 ,进行计算计算得到

3. 合并最终数组

8 位数组129 位数组计算得到一个大的数组

4. 数组转换为乱码

接下来,将合并后的137位数组 转换为乱码格式

4.1 补充前四位

为了确保生成的数据符合要求,我们后面会乱码前面去拼接了这个四位数组,作为前缀,通过随机数生成

4.2 RC4 加密

日志打全就会看到对数组的操作,看到一个256的数组,可以问下AI,就会知道是rc4加密
我们分析日志发现使用 RC4 加密算法对乱码数据 进行加密,并将4位 作为加密的前缀拼接:

该函数用于生成后续加密流程所需的 S-box 置换表。 与标准 RC4 KSA 不同,经过256轮后得到最终的 S-box。 RC4 加密会使用一个密钥流对数据进行加密,确保数据的安全性。 日志里最终结果前面多了4字节 header=bytes(four_array)header+body就是结果

5. 自定义 Base64 编码

分析日志最后得知,将经过 RC4 加密后的数据进行自定义 Base64 编码。Base64 字母表是自定义的。

6. 输出最终结果

最终,输出经过加密和 Base64 编码后的结果:

Encrypted Base64 Result:bvYa8B9y/VKXigkZeCsEjGXN8grOjvHK97mQu/hYqB7D1AV8RL7p2QZZ46xR1Mx0QfJST0aXlvk0l2QJS1b/KL02/rurTbDVqgfQHgOfUVzFNFTGHWFAwNVlvQCpjOZevF39P/eiHGtWA7hniYml

声明

本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!

本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责,若有侵权,请联系作者立即删除!

http://www.jsqmd.com/news/746058/

相关文章:

  • 【2026年最新版】收藏备用!小白程序员必学的LLM智能体入门指南(从基础到实操)
  • Appium Inspector进阶玩法:除了看元素,这些隐藏功能让你的测试效率翻倍
  • OpenClaw从入门到应用——Agent:流式传输与分块
  • Fairseq-Dense-13B-Janeway保姆级教学:从显存监控(nvidia-smi)到生成质量评估全流程
  • 将 Hermes Agent 工具链接入 Taotoken 的统一模型平台
  • 开源本地化入门:从Presentify项目学习软件国际化与GitHub协作
  • 企业网里给奇安信天眼‘安家’:探针镜像口配置与网络规划的那些事儿
  • STM32开发工具
  • Octogen:让AI代理原生操作数据库,实现自然语言数据查询与分析
  • Clawtique:OpenClaw的模块化能力管理器,解决插件污染与依赖难题
  • 点云配准对不齐、ICP收敛失败、法线估计飘移——Python 3D调试7大暗坑全图谱(含Jupyter交互式诊断工具包)
  • Claude学习笔记【第三章】- Claude Code的基本使用
  • Face Analysis WebUI实战教程:结合Pillow实现检测结果图自动裁剪保存
  • 怎么修复qt5core.dll【图文讲解】qt5core.dll 丢失?如何修复dll?dll文件缺失?qt5core.dll 无法继续执行代码?4种方法一键修复
  • 使用 curl 命令直接测试 Taotoken 大模型 API 的连通性与响应
  • TiViBench:视频生成模型的视觉推理评估系统
  • 支持实时滤波--IIR巴特沃斯低通滤波器(数字滤波器)
  • GitHub Copilot在IDEA/VSCode里的10个高效用法:不止是代码补全,还能写测试和文档
  • 电力设备红外图像与可见光图像配准数据集205对共410张图无标注
  • GitHub Skills技能生态:2026年开发者必备的AI能力封装与复用指南
  • Photoshop 2020插件安装避坑实录:Geographic Imager 6.2从下载、授权到面板调出的完整指南
  • 【工业级Python 3D管线优化白皮书】:基于NVIDIA Nsight+py-spy双工具链的CPU-GPU异步流水线调优实录(仅限首批200位开发者获取)
  • 避坑指南:StaMPS+GACOS大气校正全流程复盘,从数据下载到结果可视化的5个关键点
  • OpenClaw从入门到应用——Agent:系统提示词
  • Transformer特征注入性问题与SIPIT算法解析
  • Grasscutter Tools:原神私服管理的终极解决方案,告别命令行复杂操作
  • 从踩坑到封装:我的OkHttp工具类进化史(支持HTTPS/自定义头/超时配置)
  • LLM驱动的UI仿真系统:智能理解与操作网页界面
  • 2026年5月在上海定制西装有哪些品牌 从面料工艺处一一解析 - 生活测评君
  • springMVC-获取前端请求的数据与三个作用域一文彻底搞懂 OpenClaw 的架构设计与运行原理(万字图文)