首页
社区
课程
招聘
[原创]WEB逆向——某音a_bogus参数纯算分析
发表于: 2024-6-3 12:47 27518

[原创]WEB逆向——某音a_bogus参数纯算分析

2024-6-3 12:47
27518

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

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

某音的xbogus算法已经改成了abogus了,虽然xb还能用,但是也该更新了

image-20240603124507081

jsvmp插桩:

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

直接步入正题

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

image-20240527231219295

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

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

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

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

image-20240527231139019

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

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

image-20240527231258186

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

测试一下,果然一样

a961d79795d4bd27e1f3844b8f9ca8c

4580cbd88b31853d37fb40a6d3026c0

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

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

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

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

image-20240527231038151

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

image-20240527231018291

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

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

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

我们得到了两个数组

先放在这里,后面要用。

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

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

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

当然是继续看日志了!

image-20240527225844688

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

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

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

看到这个神奇的小数组没有[0.00390625,1,14]

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

image-20240527230306506

嗯,一模一样啊

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

那我就满足你的好奇心

其实是这么得到的

image-20240527230606745

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

image-20240527231427689

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

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

image-20240527231545927

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

image-20240527231630914

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

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

m==17&&r==1379

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

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

继续分析

image-20240527232112051

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

慢慢往下滑,滑到256这里

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

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

我们直接实现一下image-20240527232315802

然后继续看

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

然后给大家演示几个

image-20240527232731917

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

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

image-20240527233112085

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

要往里面填充东西的

我截图的是演示的第三位

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

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

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

比如,从日志可以看出

2+1=3

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

3+14=17

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

image-20240527233627636

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

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

接着,就是新的一部分

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

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

把新数组设为a

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

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

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

image-20240527234918425

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

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

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

image-20240527235037298

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

但我还是得继续写!

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

下面我来解释一下

image-20240528000051325

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

image-20240528000330772

然后82<<16 = 5373952

第二位取ascii码 = 176

176 <<8 = 45056

5373952^45056 = 5419008image-20240528000646475

image-20240528000522370

然后取ascii第三位 得 240

5419008^240=5419248image-20240528001014867

5419248&16515072 = 5242880

5242880 >>18=20

image-20240528001151427

image-20240528001053891

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

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


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 2
支持
分享
最新回复 (4)
雪    币: 864
活跃值: (5124)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
决绝子,加密逻辑这么复杂
2024-6-5 15:34
0
雪    币: 3836
活跃值: (4142)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
厉害 感谢分享
2024-6-5 17:38
0
雪    币: 5573
活跃值: (2153)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
膜拜大佬!
2024-6-6 10:25
0
游客
登录 | 注册 方可回帖
返回
//