X-Bogus

 

这个签名是老演员了,一开始就校验上了。该算法入参是:query, user_agent, body 区分GET/POST请求,如果在log里发现了'd41d8cd98f00b204e9800998ecf8427e' 这个就是空值的md5值,也就表示GET请求。首先分别进行算法签名2次得到字节数组,取其最后两位元素,后续持续拼接为一个21位的字节数组,最后魔改码表('Dkdpgh4ZKsQB80/Mfvw36XI1R25-WUAlEi7NLboqYTOPuzmFjJnryx9HVGcaStCe=')生成。其中,参与运算的还有canvas值,时间戳,密钥数组,rc4流加密等。

X-Gnarly

长度:268/ 300/ 324(最新)增加数据列表长度,即可增加X_Gnarly长度 暂时都可以使用。

X_Gnarly
MxESwhNLFU-YEm8UJQE9MFkqSv1tYBzQSumsUgvx2gkBDuyDoOtYgjfevQLRBYiqFDVA4JlRGUmgNb-taI6XlLBcPfok3XhdLeKr98A2N2gyRYbXaKtgZQ2QK4UHWPVnM312BChLi4o99N-aE5PEt4EIYVkiGCK2-GbOjzw0rWemJyuKFUev2e-hvqXXBp3jIzozFjMuiAkesNXWDB31mOPlIlcv1EsmT6qcZuvJVf/zKrdZXTbBddkZ3TxKhHs5JxwZrfIRjNdIKhy62e0Zom/UOrtMk-O4wfmgb-SS61-zj0e9pTwYeN7M4bXkNe1ECrA=

'5.1.3', '2.0.0.447'

通过解密算法解出明文参数:

// 列表长度 15
[
    0, // 固定
    65, // 变化
    14, // 变化
    "acb9ceabab0b8cfcf0f28be40ffeeae4", // query md5值
    "d41d8cd98f00b204e9800998ecf8427e", // body md5值 GET默认body = ''
    "f18b5213b6de2490ec9be218b0f025b0", // user-agent md5值
    1763107246, // 时间戳 动态因素
    2363850128, // canvas值
    1696407985, // 随机数 时间相关 测试发现 可以固定范围
    "5.1.3", // 算法版本 最开始是5.0
    "2.0.0.447", // webmssdk/2.0.0.447 js文件版本
    1, // 固定
  
  // 以下是新加的元素 没啥影响
    2, // 变化
    1, // 变化
    4312084 // 变化
]

可以看到其和X-Bogus,A-Bogus算法都没啥区别,相同的算法思路设计。

接着继续聊X-Gnarly算法,数组准备好了后会对整体数组进行xor计算,xor初始值默认值是0,后续根据数据类型进行不同处理。添加xor元素到数组里,接着对数组进行排序打乱,这里也有对应算法。最后根据不同的数据类型添加数组里不同元素的索引和值信息,多个分支不同处理流程。然后就是一个魔改的流加密算法了,需要清楚密钥是什么。该X-Gnarly对应的密钥如下,即可唯一确定目标参数。

[
    "0.16676794365048409",
    "0.09791544009931386",
    "0.7086712564341724",
    "0.06493830471299589",
    "0.6804928914643824",
    "0.671537404647097",
    "0.3154390335548669",
    "0.796996020944789",
    "0.987317256629467",
    "0.5382072266656905",
    "0.21200472488999367",
    "0.0768559209536761"
]

最后这里的处理和日志上报参数strData相得益彰,最终魔改码表('u09tbS3UvgDEe6r-ZVMXzLpsAohTn7mdINQlW412GqBjfYiyk8JORCF5/xKHwacP=')。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐