赞
踩
很久没关注抖音了,不清楚算法什么时候进行了更新,快速过一遍。
通过xhr断点定位到VMP代码
把这个js文件使用浏览器的替换功能进行替换,并使用v_jstoole的AST混淆解密中的 ”仅变量压缩“功能,转换下变量名,看上去美观一点
再把这个地方的代码手动修改下,方便断点。这里对w[0]进行额外判断,只有当需要加密的明文符合评论接口的时候才进行断点
考虑到还有其他地方存在apply调用,在这份js头部添加一段hook代码,hook Function.prototype.apply
- // 保存原始的 Function.prototype.apply 方法
- const originalApply = Function.prototype.apply;
-
- // 修改 Function.prototype.apply 方法
- Function.prototype.apply = function (thisArg, args) {
- // 调用原始的 apply 方法来执行函数
- const result = originalApply.call(this, thisArg, args);
-
- // 输出结果
- if (window.$_islog) {
- try {
- console.log("Function:", this, "\n 参数:", args, "\n结果:", JSON.stringify(result));
-
- } catch (e) {
- console.log("Function:", this, "\n 参数:", args, "\n结果:", result);
- }
- }
- // 返回结果
- return result;
- };
-
- log = console.log; ; ; ;
拿到一分简略的日志后,保存至本地,先大概过一遍
跳过前面环境监测的日志,发现了类似md5的值
在js文件中搜下常见的一些特征值,比如0x67452301、1732584193等
并且他还在_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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。