声明
本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!
前言
此平台 本人 仅限研究。只针对某些算法参数进行研究。网站链接自己去找。
流程分析
这里就不多说了
直接看接口。发现有两个字需要我们逆向
msToken:
X-Bogus:
msToken
这里msToken 跟断点走。往上追栈后发现是直接读取的cookie里的。然后看了一下。然后测试了一下 这个有点像每次请求的token令牌。
这个应该可以模拟生成的。
不重要 暂时写死都行。这里也提供一份代码。
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
xb
这里话也不多说了。
直接讲流程。
首先 如下图所示
然后跳到断点之后往上找断点。
到达如图所示位置之后
这个apply啥意思就不多说了 直接插桩
_0x2458f0['apply'](_0xc26b5e, _0x1f1790)==28(xb的长度)
然后 单点调试下一步 ok 到达了一个JSVMP的方法。然后传的值都是字节码 然后把这些汇编代码转换为JS代码。
这里就考虑两种方法了。要不插桩纯算。要不补环境。
补环境
先说补环境。
直接全扣下来。
然后在下图位置赋值。
然后著名语录: 缺啥补啥。
这里已经补完了 就这么点。
window = global
document = {}
document.addEventListener = function () {}
navigator = {
"userAgent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.366'
}
然后直接得到答案
至于这个警告。是一个弃用警告。代表这个Buffer这个方法已经不用了。可以通过修改代码
然后看看传参是什么
然后给他封装成参数去调用就可以了。
算法
这里我们看到这个文件里其实是经过混淆的 非常不利于我们分析加密参数。
所以我们需要使用到ast等工具对他进行解混淆。
然后通过解混淆完了的JS 进行文件重写覆盖。
这里简单讲讲流程。
选择替换内容。浏览器会自动帮我们把js保存到替换的文件夹中。非常方便。
然后就能看到我们的文件了。然后复制文件。到v-tools中
复制出来。cv大法一下就搞定了。
流程分析
这里具体流程分析 详见公众号
https://mp.weixin.qq.com/s/dAHZQMsqlRZ6oGT2ZOW8PQ
str1 = "Dkdpgh4ZKsQB80/Mfvw36XI1R25-WUAlEi7NLboqYTOPuzmFjJnryx9HVGcaStCe="
// 19 = (1214867 & 63) >> 0
str1.charAt((1214867 & 63) >> 0)
//结果:3
// 38 = (1214867 & 4032) >> 6
str1.charAt((1214867 & 4032) >> 6)
// 结果:o
// 40 = (1214867 & 258048) >> 12
str1.charAt((1214867 & 258048) >> 12)
// 结果:Y
// 4 = (1214867 & 16515072) >> 18
str1.charAt((1214867 & 16515072) >> 18)
// 结果:g
上述刚好对应了 xb的最后四位
DFSz swVO PSzA Nro1t-KB sNAw gYo3
其余算法也一样。
数字算法逻辑
这里具体流程分析 详见公众号
https://mp.weixin.qq.com/s/dAHZQMsqlRZ6oGT2ZOW8PQ
目标获取: 1214867
- 通过 乱码 charCodeAt(20)获得147
- 通过 乱码 charCodeAt(19)获得137
- 通过 乱码 charCodeAt(18)获得18
- 通过147 << 0 获得了 147(找规律得来)
- 通过 137 << 8 获得 35072
- 通过 18<< 16 获得 1179648
- 通过位运算 1179648 | 35072 获得1214720
- 位运算符的 1214720 | 147 最终得到1214867
那这个只是最后一组的。根据这四组 找规律 获取其他组的信息可得以下代码
const encodedString = "\u0002ÿ-%.*¯Ë^9—õ²\u000b&7’\u0012‰“";
const decodingMap = "Dkdpgh4ZKsQB80/Mfvw36XI1R25-WUAlEi7NLboqYTOPuzmFjJnryx9HVGcaStCe=";
let xb = "";
for (let index = 0; index <= 20; index += 3) {
const charCode1 = encodedString.charCodeAt(index);
const charCode2 = encodedString.charCodeAt(index + 1);
const charCode3 = encodedString.charCodeAt(index + 2);
const combinedCode = charCode3 | (charCode2 << 8) | (charCode1 << 16);
const codePart1 = (combinedCode & 16515072) >> 18;
const codePart2 = (combinedCode & 258048) >> 12;
const codePart3 = (combinedCode & 4032) >> 6;
const codePart4 = combinedCode & 63;
xb += decodingMap[codePart1] + decodingMap[codePart2] + decodingMap[codePart3] + decodingMap[codePart4];
}
console.log(xb);
乱码生成分析
这里具体流程分析 详见公众号
https://mp.weixin.qq.com/s/dAHZQMsqlRZ6oGT2ZOW8PQ
实现目标如下图所示。
部分代码如下
function _0x86cb82(a) {
return String.fromCharCode(a);
}
function _0x94582(a, b, c) {
return _0x86cb82(a) + _0x86cb82(b) + c;
}
function _0x25788b(a, b) {
for (var c, e = [], d = 0, t = "", f = 0; f < 256; f++) {
e[f] = f;
}
for (var r = 0; r < 256; r++) {
d = (d + e[r] + a.charCodeAt(r % a.length)) % 256, c = e[r], e[r] = e[d], e[d] = c;
}
var n = 0;
d = 0;
for (var o = 0; o < b.length; o++) {
d = (d + e[n = (n + 1) % 256]) % 256, c = e[n], e[n] = e[d], e[d] = c, t += String.fromCharCode(b.charCodeAt(o) ^ e[(e[n] + e[d]) % 256]);
}
return t;
}
function _0x398111(a, b, c, e, d, t, f, r, n, o, i, _, x, u, s, l, v, h, p) {
var y = new Uint8Array(19);
return y[0] = a, y[1] = i, y[2] = b, y[3] = _, y[4] = c, y[5] = x, y[6] = e, y[7] = u,
y[8] = d, y[9] = s, y[10] = t, y[11] = l, y[12] = f, y[13] = v, y[14] = r, y[15] = h,
y[16] = n, y[17] = p, y[18] = o, String.fromCharCode.apply(null, y);
};
乱码数组生成
这里具体流程分析 详见公众号
https://mp.weixin.qq.com/s/dAHZQMsqlRZ6oGT2ZOW8PQ
这里说下大概。
前4位是固定值
第5位到第10位通过md5 hex_md5 以及转码得到数组 然后切片取其中的值。
第11位到第18位是通过时间戳还有个canvas固定值拼接而来。
最后一位通过前面的签名最终得到最后一位数组
最后通过19位 数字 然后编码得到乱码。