首页
社区
课程
招聘
[原创] WEB逆向—X-Bogus逆向分析(纯算+补环境)
发表于: 2024-4-8 14:01 11400

[原创] WEB逆向—X-Bogus逆向分析(纯算+补环境)

2024-4-8 14:01
11400

本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!

此平台 本人 仅限研究。只针对某些算法参数进行研究。网站链接自己去找。

这里就不多说了

直接看接口。发现有两个字需要我们逆向

msToken:

X-Bogus:

这里msToken 跟断点走。往上追栈后发现是直接读取的cookie里的。然后看了一下。然后测试了一下 这个有点像每次请求的token令牌。

这个应该可以模拟生成的。

不重要 暂时写死都行。这里也提供一份代码。

这里话也不多说了。

直接讲流程。

首先 如下图所示

image-20240329104335637

然后跳到断点之后往上找断点。

到达如图所示位置之后

这个apply啥意思就不多说了 直接插桩

image-20240329105633962

然后 单点调试下一步 ok 到达了一个JSVMP的方法。然后传的值都是字节码 然后把这些汇编代码转换为JS代码。

这里就考虑两种方法了。要不插桩纯算。要不补环境。

先说补环境。

直接全扣下来。

然后在下图位置赋值。

然后著名语录: 缺啥补啥。

这里已经补完了 就这么点。

然后直接得到答案

至于这个警告。是一个弃用警告。代表这个Buffer这个方法已经不用了。可以通过修改代码

然后看看传参是什么

然后给他封装成参数去调用就可以了。

这里我们看到这个文件里其实是经过混淆的 非常不利于我们分析加密参数。

所以我们需要使用到ast等工具对他进行解混淆。

然后通过解混淆完了的JS 进行文件重写覆盖。

这里简单讲讲流程。

选择替换内容。浏览器会自动帮我们把js保存到替换的文件夹中。非常方便。

然后就能看到我们的文件了。然后复制文件。到v-tools中

复制出来。cv大法一下就搞定了。

这里继续重复上文操作。打上条件断点。然后获取到xb的值。

image-20240329140313200

然后继续往上找栈。发现下图就是JSVMP初始化的地方。并且通过执行了W方法 最终获得返回值。

image-20240329140613594

我们这里就直接进入文中这个W方法。

这里进去看可以看到一堆的流程控制语句。

把这个方法复制下来。可以看到。这个方法的走向就是靠判断语句执行的。然后判断语句中又有一堆的流程控制语句。

而且这个判断条件也是由传参的最后一个参数控制的。那这个就很有意思了。

这里在这两短流程语句中分别打上日志断点。然后来分析其中的参数。

第一处断点

第二处断点

这里一定要注意debugger不要乱删 不然很容易卡死 。打出来的数据非常之大。

如下图。把所有的日志断点保存 然后往上找第一个X-Bogus 生成的地方。

可以看到 如下图所示。是赋值 值给 X-Bogus的地方。那我们去搜索这个值

可以看到 这个地方应该就是初始值生成处

这里就可以看到 。越往上 这个X-Bogus的值就越少。那我们大概就明白了。

这就意味着xb是一个字一个字的根据算法生成。

这里在浏览器看 不是很方便。我们把控制台另存为到文件中方便我们调试。

(这里浏览器卡死了。xb的值可能不固定,不要在意细节)

首先分析下这个3 是如何生成的。

也就是代表 要通过 上面这些值 拿到 3

我们打个条件断点。去看看最后一个的生成逻辑

image-20240329223848278然后断住打断点继续往下走。

这里注意 要注意我们的O 里是否会有 如上值。如下图 才能正确单步调试。

这里单步调试到下图位置。基本可以得到结论了

我们的xb值为 DFSzswVOPSzANro1t-KBsNAwgYo3

由于我们目标是获得数值3。 用以下代码可以做到

同理 获得倒数第二位。继续看我们的日志

这里是 o,38位

那这样基本其他值也可以用这个方法了。

根据断点可知 xb4个为一组。

charAt后面的值就是我们所需要的值。

这里 就不废话太多了

上述刚好对应了 xb的最后四位

DFSz swVO PSzA Nro1t-KB sNAw gYo3

其余算法也一样。

现在唯一可能要注意的就是这个1214867的算法是什么?

这里篇幅原因不展开搞了。反正概念都是一样。根据索引找方法。

这里 1214867 是通过位运算符的 1214720 | 147 最终得到1214867

这里又牵扯到了 两个值

1214720

147

有点乱 梳理一下

那这个只是最后一组的。根据这四组 找规律 获取其他组的信息可得以下代码

然后就是获取这个乱码的生成处了。可以看到 如下图所示。

image-20240330003810920

继续找索引去找这个第三个传参的生产处

image-20240330003920354

如下图到达这个位置。再把这个函数扣下来。

如上图所示。这个b的生成还是没有还原出来。我们继续来找b。

下图 是生成b的地方。所以我们把这个函数也扣下来。

我们测试下结果

可以正常生成。那我们再来测试下

事实证明和上文一样。没问题。

部分代码如下

这个已经弄完了。还差最后一个就是这个数组。arr其实 不是一个完整的数组,而是一个个数字。

arr 共有19位。

这里说下大概。我也没有每个都去研究。

前4位是固定值

第5位到第10位通过md5 hex_md5 以及转码得到数组 然后切片取其中的值。

第11位到第18位是通过时间戳还有个canvas固定值拼接而来。

最后一位通过前面的签名最终得到最后一位数组

最后通过19位 数字 然后编码得到乱码。

import random
 
 
def get_ms_token(randomlength=107):
    """
    根据传入长度产生随机字符串
    """
    random_str = ''
    base_str = 'ABCDEFGHIGKLMNOPQRSTUVWXYZabcdefghigklmnopqrstuvwxyz0123456789='
    length = len(base_str) - 1
    for _ in range(randomlength):
        random_str += base_str[random.randint(0, length)]
    return random_str
import random
 
 
def get_ms_token(randomlength=107):

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 6
支持
分享
最新回复 (5)
雪    币: 3090
活跃值: (30881)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
感谢分享
2024-4-9 09:25
1
雪    币: 4177
活跃值: (5480)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
3
抖音的xb算法,分析的很到位
2024-4-15 10:36
0
雪    币: 21
活跃值: (96)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
已经没用了  最新的是a_bogus
2024-4-25 17:23
0
雪    币: 834
活跃值: (320)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5
huxianwei 已经没用了 最新的是a_bogus
ab 也有 我没发在看雪。
2024-5-4 16:51
1
雪    币: 40
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
聊聊合作, 酬谢
2024-7-26 11:08
0
游客
登录 | 注册 方可回帖
返回
//