吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 7584|回复: 79
收起左侧

[Web逆向] 某音a_bogus纯算分析

  [复制链接]
Ius 发表于 2024-5-28 00:46

某音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})

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

直接步入正题

参数加密

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

1.png

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

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

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

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

2.png

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

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

3.png

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

测试一下,果然一样

4.png

5.png

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

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

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

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

6.png

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

7.png

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

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

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

我们得到了两个数组

先放在这里,后面要用。

UA加密

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

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

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

当然是继续看日志了!

8.png

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

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

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

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

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

9.png

嗯,一模一样啊

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

那我就满足你的好奇心

其实是这么得到的

10.png

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

11.png

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

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

12.png

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

13.png

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

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

m==17&&r==1379

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

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

继续分析

UA乱码生成

14.png

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

慢慢往下滑,滑到256这里

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

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

我们直接实现一下
15.png

然后继续看

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

然后给大家演示几个

16.png

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

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

17.png

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

要往里面填充东西的

我截图的是演示的第三位

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

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

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

比如,从日志可以看出

2+1=3

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

18.png

3+14=17

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

19.png

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

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

接着,就是新的一部分

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

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

把新数组设为a

a[0]+a[1]

0+218 =>**218**

a[1]=a[218]

"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[220]=>216 2+218=>220 

77^216=>149

String.fromCharCode(149)

**218**+a[2]=>**235**

a[**235**]=>127

分割线

a[2]=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 ^a[144]233=>134

String.fromCharCode(134)

**235**+a[3]=>**255**

a[**255**]=>149

a[3]=149

255+a[4]=>280 280-256=24

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

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

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

UA长字符串

20.png

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

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

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

21.png

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

但我还是得继续写!

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

s.chatAt(0) << 16  2293760

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

下面我来解释一下

22.png

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

23.png

然后82<<16 = 5373952

第二位取ascii码 = 176

176 <<8 = 45056

5373952^45056 = 5419008

24.png

25.png

然后取ascii第三位 得 240

5419008^240=5419248

26.png

5419248&16515072 = 5242880

5242880 >>18=20

27.png

28.png

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

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

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

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

简直是一模一样

29.png

30.png

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

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

31.png

环境检测点生成

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

32.png

33.png

自己写一下就可以

炒鸡大数组生成

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

34.png

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

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

就比如96,58这两个数字

35.png

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

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

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

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

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

加油!

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

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

然后再把这俩数组合起来

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

最终之战

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

36.png

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

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

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

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

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

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

成果展示!

37.png

不重要的话

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

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

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

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

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

免费评分

参与人数 15吾爱币 +16 热心值 +13 收起 理由
ddos0773 + 1 + 1 我很赞同!
asd9458 + 1 + 1 我很赞同!
lxb3333111 + 1 + 1 我很赞同!
cry123 + 1 谢谢@Thanks!
AcrossOver + 1 + 1 用心讨论,共获提升!
2022313 + 1 用心讨论,共获提升!
eijop252023 + 1 + 1 热心回复!
Yangzaipython + 1 + 1 鼓励转贴优秀软件安全工具和文档!
fortytwo + 2 + 1 好帖子! Xb我都还没搞出来
slslsl + 1 + 1 用心讨论,共获提升!
greendays + 1 + 1 我很赞同!
无知灰灰 + 1 + 1 用心讨论,共获提升!
debug_cat + 1 + 1 谢谢@Thanks!
马国良 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
tingshow + 1 + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

YIUA 发表于 2024-5-28 09:23
感谢大佬,大佬我想问一下,第一个3位数组的小乱码我在调试过程中,发现前两位0.00390625和1是不变的,但是最后一位会变化,最后一位我也没找到如何生成的,大佬可以帮忙解答一下吗
hading 发表于 2024-7-21 21:46
LXGZJ237 发表于 2024-5-28 01:47
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
还真是困了有人递枕头吖~ 说的应该是一个的 a_bogus
wanxu 发表于 2024-5-28 09:06
某人学大佬么,昨天还看在群里料这个哈哈
zhaohainuo 发表于 2024-5-28 09:14

谢谢分享,但看不明白
haishibuxing 发表于 2024-5-28 09:19
感谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-21 19:41

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表