某音新版jsvmp参数a_bogus分析
# 某音新版jsvmp参数a_bogus分析#### 目标网站
```
aHR0cHM6Ly93d3cuZG91eWluLmNvbS8/cmVjb21tZW5kPTE=
```
#### 目标参数
```js
a_bogus:QfUnDqywQq******脱敏处理*****3Rp0kql7PDz/YDVbBzXkZeHkomkfSxJ6v*******脱敏处理*********jxRnHAqld5aH****脱敏处理****ctAAZE=
```
#### 解决方法
补环境,与之前版本的ab不同,加密的入口不好寻找,暂且搁置,后续在更新
本文主讲对jsvmp进行插桩来还原算法
#### 流程分析与实现
首先观察堆栈,很明显的看到了bdms_1.0.1.17.js,如果你搞过之前版本的ab的话,就知道ab的加密是在
这个文件内生成的
![](https://p.sda1.dev/19/c80680d4172e4c524dc7e8b2ec3e9f87/image-20241023122858120.png)
打开这个文件
![](https://p.sda1.dev/19/ec6df89500035a90247d1b3e726ba6c5/image-20241023123148552.png)
可以看到W这个函数有一个指令集,我们跟栈进入的是Q函数里面的n方法,n方法里面有个B函数,再看B函数的结构,基本可以断定加密在B中执行
![](https://p.sda1.dev/19/76f34c45d1195d17f5a5b5f902d7307e/image-20241023123401638.png)
可以看到B函数中的y就是指令操作,通过do-while循环进行加密操作,可以看到y里面是控制流平坦化,我们可以先解混淆得到更好分析调试的代码,如下图还原后非常清晰可观
![](https://p.sda1.dev/19/97ae086fa4ea27eea4481bbb7e85e708/image-20241023123643447.png)
插桩的重点都在这个apply上,其他的插桩点和之前的ab类似就不在此赘述
```js
var R = T.apply(E, j);
```
插桩完成后我们打印一下日志看一下,为了防止dy介入,我日志就不给大家看了,群内讨论,脱敏处理,希望大家别介意,我就直接把根据日志分析的加密流程告诉大家
```js
function encty_time(){
var time = Date.now();
var str = ((time + 3) & 255) + ','
var arr = []
for (let i = 0; i < str.length; i++) {
arr.push(str.charCodeAt(i))
}
return arr
}//这只是里面的一种简单加密
```
```
1. device_platform=*** + d**x 进行2次sm3加密
2.d**x 进行一次sm3加密
3.根据轨迹生成一个乱码,将该乱码和ua传入加密,加密后的结果再次进行sm3
4.多次时间戳操作具体操作看日志很清楚
5.轨迹加密成
6.6**3,6**1对这两个数操作
7.1***|**3|1**6|**0|1**6|**0|1**6|**0|W**2对这个数charCodeAt放到一个数组
8.随机数和一些加密数组的操作,随机数生成一些数组的操作
9.最后根据上面的加密结果生成一个数组,然后传入一个乱码和这个数组加密,最后的魔改base64加密得到最终结果
``` "插桩的重点都在这个apply上"
感谢楼主,楼主这句话教会了我怎么搞定jsvmp,这是插桩的核心呀。 网上的V 1.0.1.5 版本,和1.0.1.7 有多少区别,现在服务端还是认可v1.0.1.5版本的 厉害厉害,学习了 厉害,还是很强的 厉害,学习学习 感谢分享,学习学习 学到了,感谢楼主的分享 请问有python的生成ab参数的版本吗~~ Base64 解码的吧 感谢分享