Ius 发表于 2024-5-28 00:46

某音a_bogus纯算分析

# 某音a_bogus纯算分析

由于不会补环境,所以只能去搞纯算了

本篇文章可能不是很适合纯新手来看,倒是很适合正在搞纯算的你



jsvmp插桩:

```
"位置 1", "索引m", m, "索引r", r, "值p: ", JSON.stringify(p, function(key, value) {if (value == window) {return undefined} return value})

"位置 2", "索引m", m, "索引r", r, "值p: ", JSON.stringify(p, function(key, value) {if (value == window) {return undefined} return value})
```

在哪定位加密位置就不多说了,网上一大堆呢

直接步入正题



#### 参数加密

打开我们的日志,映入眼帘的就是下面这个场景



可以看到reg里面有一串数组,最开始后面还没有参数,等到第五行的时候,我们的请求参数出现了

经过了2次不为人知的操作,我们的参数变成了一行数组。

从此处我们就可以得知,这个数组,是参数转化过去的。

所以我们在下面这个索引位置设置条件断点,就可以进入到加密的过程了



找到加密过程之后自己抠出来或者手动实现都是可以的。

再继续往下看,会发现又经过了reg这个数组,然后嗖的一下,出现了一个新的数组



而且这个新数组的上一个地方的末尾,嘿,出现了上面的数组。这就说明下面这个数组是上面数组生成出来的,我这么猜测没有问题吧。



测试一下,果然一样





至此我们迈出了历史性的一小步

突然有一位靓仔就很奇怪,明明我的操作一样,怎么出来的结果不一样啊?

因为看东西要自己看全面,这个参数的最后还加上了cus这三个字符

千万不要全听全信,写教程的也不一定的是对



有了上面的经验之后,我相信看这篇文章的帅哥美女,已经能下面这个是加密什么的了



没错,就是加密了cus,把cus的字符串经过了两次数组转换。

如果没有post就只加cus,如果有的话就在post参数的末尾加上cus

这两个参数的加密到这里就完成了

我们得到了两个数组

先放在这里,后面要用。



#### UA加密

之前研究过某音的小伙伴一定知道,如果请求的ua改变的话,生成的这个加密参数就会失效。

所以呢,ua也肯定是校验的一部分。

我们该怎么知道这个jsvmp是如何操作ua的呢

当然是继续看日志了!



没往下滑几行,就看见了我们亲切的ua。

但是好像没对我们的ua操作什么,倒是出现了一个奇怪的unicode

我们亲切的把它称为小乱码,那这个小乱码是怎么来的呢

看到这个神奇的小数组没有``

我们把他扔到控制台里,然后获取对应字符



嗯,一模一样啊

什么?你想知道0.00390625是怎么来的?

那我就满足你的好奇心

其实是这么得到的



不过这个乱码是有好几个类型的



这个倒是无所谓,我就根据第一个来



还没走几步呢,我们的日志又出现新东西了




从这日志上来看,我可以大胆地推测,后三行那一堆乱七八糟葫芦蛋糕的东西,是从这里进入生成的




为了确定我们的推测,肯定不能光靠眼睛看了

我们去插日志点的位置打上条件断点

m==17&&r==1379

重放后一步一步的跟栈,我们会进入一个新的jsvmp

进入之后不要慌,我们直接在老地方插上日志点

继续分析



##### UA乱码生成



我们刚进入这个jsvmp,就发现这个日志跑了好多东西

慢慢往下滑,滑到256这里

可以发现是生成了长度为256的空数组

搞纯算,不能光看,还得写

我们直接实现一下


然后继续看

这里我就直接把我当时的记录放上来吧

然后给大家演示几个



大家看不懂很正常,因为我现在都有点看不懂了

我就演示一个给大家看看,你们多加油



因为我们生成了256位的数组,肯定不是白生成的

要往里面填充东西的

我截图的是演示的第三位

为什么第一个红框的第三位是1呢

正常来说应该是0,1,2,3,应该是2才对

实际上就是因为前面在计算数值的时候,会把算之前的位数,放到算出来的地方

比如,从日志可以看出

2+1=3

"\u0000\u0001\u000e".charCodeAt(2)=14



3+14=17

算出来17之后,把第三位替换成17,然后把1放到第17位上



就是这样循环的,直到最后一位

然后我们得到了一个新数组



接着,就是新的一部分

新部分就是我们的上面的数组,跟我们亲爱的UA,进行一些不为人知的交易

这里我就用文字描述一下吧

把新数组设为a

```
a+a

0+218 =>**218**

a=a

"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.6045.160 Safari/537.36".charCodeAt(0)

77 a=>216 2+218=>220

77^216=>149

String.fromCharCode(149)

**218**+a=>**235**

a[**235**]=>127

分割线

a=127

"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.6045.160 Safari/537.36".charCodeAt(1)

127+17=>144

111 ^a233=>134

String.fromCharCode(134)

**235**+a=>**255**

a[**255**]=>149

a=149

255+a=>280 280-256=24
```

我上面的记录,都是可以从日志里看出来的

因为这个数组太长了不好截图演示,就这样看吧

UA经过这一系列的加密,最后生成了一个超级大的乱码

#### UA长字符串



这次又没走几步,就变成了一大串字符串了

好家伙,这下聪明的你肯定知道怎么搞了

我们去定位生成位置的上面,然后单步调试进入一个新的jsvmp



我们又要开始新的日志观察了,写到这里我已经有点疲惫了

但我还是得继续写!



这里的部分其实还是之前xb那样,4位一组,如此遍历

```
s.chatAt(0) << 162293760

s.chatAt(1) << 8 22016

0^1 2315776

^s.chatAt(2)<<0 7

2315783

2315783&16515072

2097152 >> 18

8

2315783&258048

217088 >> 12

53

2315783&4032

1536 >> 6

24

2315783&63

7 >> 0

7
```

下面我来解释一下



这个大乱码取第一位的ascii码=82



然后82<<16 = 5373952

第二位取ascii码 = 176

176 <<8 = 45056

5373952^45056 = 5419008





然后取ascii第三位 得 240

5419008^240=5419248



5419248&16515072 = 5242880

5242880 >>18=20





第一位就这样推出来了,剩下的就靠宝贝你自己了

搞纯算没有耐心是不行的哦

静下心来慢慢看日志,总有一天能搞出来

然后我们长字符串就生成出来了!神奇吧

简直是一模一样





然后又对我们的长字符串进行了一个数组的生成,这里直接用我们上面写好的代码就可以

下面就到了我们的环境监测点了



#### 环境检测点生成

这里倒是没什么难的,其实就是把每一位字符串的ascii码放到了数组里





自己写一下就可以



#### 炒鸡大数组生成

再往下走,映入眼帘的就是一个炒鸡大的数组了



这个大数组可谓是集百家之长,东边偷一点,西边偷一点。

不过我们从日志上来分析,还是有迹可循的

就比如96,58这两个数字



从这个图上是不是就能看出来

是第一个数组的21位,第二个数组的21位

后面的64,51 就是第二个数组的22位,第二个数组的22位

剩下的就麻烦您多费心了,静下心来看日志,一会就搞出来了

里面有固定的也有不固定的,可以抓两次日志对比着来

加油!



接着我们把写好的数组和之前的环境ascii码数组组合起来

在我们组合起来之前呢,我们要把大数组的每一位进行异或,得到的一个结果,放到我们环境数组的末尾

然后再把这俩数组合起来

得到了最终的超级无敌宇宙爆炸大数组



#### 最终之战

这篇文章马上就要步入尾声了,虽然写的不是很详细,但是我觉得一定对你有帮助



从上面的日志来看,我们前面生成了3次乱码,然后合并

接着又把三次合并的乱码跟**一个乱码**合并

再合并之前呢,这个乱码是先由我们的超级无敌宇宙爆炸大数组,String.fromCharCode生成

然后经过上述提到的UA乱码生成写的代码,最终加密得到**一个乱码**

最后,我们把这**一个乱码**经过上文提到的UA长字符串生成

就得到了我们的a_bogus!!!!



#### 成果展示!





#### 不重要的话

在搞纯算的时候,网上也不乏有各种教程,但是有的教程还不如不发出来,因为太误导人了

不过大部分大佬写的教程还都是很棒很详细的

如果你在我这里看到的芝士还不够你搞出来纯算

你还可以利用搜索引擎去寻找一下别人的教程

集百家之长,这样一定可以完成ab纯算

YIUA 发表于 2024-5-28 09:23

感谢大佬,大佬我想问一下,第一个3位数组的小乱码我在调试过程中,发现前两位0.00390625和1是不变的,但是最后一位会变化,最后一位我也没找到如何生成的,大佬可以帮忙解答一下吗

hading 发表于 2024-7-21 21:46

学习一下楼主                     

LXGZJ237 发表于 2024-5-28 01:47

谢谢分享{:1_893:},但看不明白

AlenChan 发表于 2024-5-28 01:49

abogus后面还有个fp    恶心

Ajin1989 发表于 2024-5-28 02:04

真看不明白@@@@

deffedyy 发表于 2024-5-28 06:58

感谢分享。

yingzi4f 发表于 2024-5-28 08:24

还是浏览器自动化 拦截数据方便些,逆向JS太费劲了

anwen 发表于 2024-5-28 08:38

{:301_976:} 还真是困了有人递枕头吖~ 说的应该是一个的 a_bogus
https://pic.rmb.bdstatic.com/bjh/240528/9a2107abe83b4dc293e54f21a49155116247.png

wanxu 发表于 2024-5-28 09:06

某人学大佬么,昨天还看在群里料这个哈哈

zhaohainuo 发表于 2024-5-28 09:14


谢谢分享,但看不明白

haishibuxing 发表于 2024-5-28 09:19

感谢分享
页: [1] 2 3 4 5 6 7 8 9
查看完整版本: 某音a_bogus纯算分析