某音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 位数组:

python 复制代码
"560|919|1920|1040|1920|1040|1920|1080|Win32"

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

1.4 生成 3 位数组

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

python 复制代码
timestamp + 3 进行计算得到

1.5 生成 8 位数组

生成 8 位数组:

python 复制代码
通过随机数进行计算生成

1.6 生成 1 位数组

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

1.7 合并 97 位数组

将 array_50、array_43、array_3 和 array_1 数组合并为一个新的 97 位数组环境不同长度不同:

python 复制代码
array_97 = array_50 + array_43 + array_3 + array_1


2. 生成 129 位数组

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

python 复制代码
传入之前拼接的97位数组 ,进行计算计算得到

3. 合并最终数组

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

4. 数组转换为乱码

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

4.1 补充前四位

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

4.2 RC4 加密

日志打全就会看到对数组的操作,看到一个256的数组,可以问下AI,就会知道是rc4加密

我们分析日志发现使用 RC4 加密算法对乱码数据 进行加密,并将4位 作为加密的前缀拼接:

python 复制代码
该函数用于生成后续加密流程所需的 S-box 置换表。
与标准 RC4 KSA 不同,经过 256 轮后得到最终的 S-box。
RC4 加密会使用一个密钥流对数据进行加密,确保数据的安全性。

日志里最终结果前面多了 4 字节
header = bytes(four_array)
header + body就是结果

5. 自定义 Base64 编码

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

6. 输出最终结果

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

python 复制代码
Encrypted Base64 Result: bvYa8B9y/VKXigkZeCsEjGXN8grOjvHK97mQu/hYqB7D1AV8RL7p2QZZ46xR1Mx0QfJST0aXlvk0l2QJS1b/KL02/rurTbDVqgfQHgOfUVzFNFTGHWFAwNVlvQCpjOZevF39P/eiHGtWA7hniYml

声明

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

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

相关推荐
2601_962885721 小时前
如何用 Python 把 K 线重采样成任意周期?
开发语言·python
打工仔折腾 AI1 小时前
在 Ubuntu ARM64 部署 Q1 V3.0 MuJoCo 模型:加载、单步推理与执行器响应解析
linux·运维·人工智能·python·深度学习·ubuntu·性能优化
信誓旦旦的程序猿2 小时前
【Python量化实战宝典 #21】北向资金跟随手册:聪明钱择时信号(Python 可跑)
python·1024程序员节·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口
严谨的麻辣烫2 小时前
静态 ISP 代理请求超时怎么排查?Python 与 curl 实战
python·http·requests·1024程序员节·网络排障
KeepRobots4 小时前
11-01 温哥华不回拨:用 60 行 Python 查你的工单系统会不会差一小时(KeepRobots 工程笔记)
python
xiao77mwq4 小时前
你以为 OCR 慢?实测 81.3 s 里全是故障代价:如何把「定格态」消掉,让耗时从 6.5 s 到 13 倍差距显出原形
python
深圳市益普科技有限公司4 小时前
半导体良率管理YMS:良率与设备参数的相关性,先拉哪几组数据
人工智能·python·算法
“AI国潮设计-小江”4 小时前
【AIGC实战】Python+SDXL打造“潮汕英歌舞IP”万能立牌插件,批量生成“发财元宝蛋糕”视觉营销方案(附源码)
开发语言·人工智能·python·prompt·aigc
砚底藏山河5 小时前
python量化实操:冷热分层存储
java·开发语言·python·金融
十五年专注C++开发5 小时前
pybind11:一个跨C++和Python平台的编程库
开发语言·c++·python·pybind11