当前位置:   article > 正文

抖音Xbogus算法简要分析,Python实现

xbogus

本文仅记录我分析过程,仅供学习参考,如有涉及侵权联系本人删除

如果有任何问题,欢迎交流指导

很久没关注抖音了,不清楚算法什么时候进行了更新,快速过一遍。

一、准备工作

通过xhr断点定位到VMP代码

把这个js文件使用浏览器的替换功能进行替换,并使用v_jstoole的AST混淆解密中的 ”仅变量压缩“功能,转换下变量名,看上去美观一点

再把这个地方的代码手动修改下,方便断点。这里对w[0]进行额外判断,只有当需要加密的明文符合评论接口的时候才进行断点

考虑到还有其他地方存在apply调用,在这份js头部添加一段hook代码,hook Function.prototype.apply

  1. // 保存原始的 Function.prototype.apply 方法
  2. const originalApply = Function.prototype.apply;
  3. // 修改 Function.prototype.apply 方法
  4. Function.prototype.apply = function (thisArg, args) {
  5.   // 调用原始的 apply 方法来执行函数
  6.   const result = originalApply.call(this, thisArg, args);
  7.   // 输出结果
  8.   if (window.$_islog) {
  9.       try {
  10.           console.log("Function:", this, "\n 参数:", args, "\n结果:", JSON.stringify(result));
  11.       } catch (e) {
  12.           console.log("Function:", this, "\n 参数:", args, "\n结果:", result);
  13.       }
  14.   }
  15.   // 返回结果
  16.   return result;
  17. };
  18. log = console.log; ; ; ;

二、分析

拿到一分简略的日志后,保存至本地,先大概过一遍

跳过前面环境监测的日志,发现了类似md5的值

在js文件中搜下常见的一些特征值,比如0x674523011732584193

并且他还在_0xa653c7的原型下,在这里再加两个日志点,

再次拿到一份日志,可以看到这里对明文params进行了两次md5并转成16进制的数组

通过python验证,生成的数组一致

其中"d41d8cd98f00b204e9800998ecf8427e"是md5("")的结果,并且下文再次对该md5进行加密,此处只有当body不为空时才有数据,算法与上文params加密一致

再往下看,发现'\x00\x01\f'作为key,对ua进行了rc4加密

具体可以进到函数,问问GPT

随后用rc4加密后的值进行Base64,每三个字节输出四个字符

不确定的话,可以通过Base64运算完成之后的结果进行校验。并且下文对该结果再次进行了md5

在下文,取出了时间戳和canvas

经过一系列计算拿到长度19的数组,转为字符串,用 ÿ 当作key,进行rc4加密。这个长度19的数组,除了几个固定值之外,其他数字根据前文得到,具体规则可参考网上其他大佬发的文章,生成规则一直没变过,不在这展开。

随后,把固定值 \u0002 和 ÿ 添加到该字符串头部

最后,用了一个改了编码表的Base64进行加密,生成Xbogus

三、总结

1.对params两次md5,转16进制数组

2.对body两次md5,转16进制数组

3.对ua rc4加密后,在进行标准Base64,再进行md5,转16进制数组

4.生成19位数组(补充:这个数组包含时间戳和canvas信息),转字符

5.对第四步结果进行rc4

6.拼接字符

7.改Base64编码表,对第六步结果进行Base64

四、测试

http://39.107.101.62:8111/docs

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/768025
推荐阅读
相关标签
  

闽ICP备14008679号