第16题:表情包+sojson6.0
抓包分析可知,需逆向safe参数,根据调用堆栈很容易找到safe的生成位置,如下:
上方有一段特殊字符组成的内容,查看上下文并未找到token,因此token很可能是这段特殊字符构成的代码生成的,单步调试可以发现,上面是在进行赋值操作,最后一行很长的那一行是进行一些函数执行,将最后一行复制到控制台,删除最后一个括号 ('_'),可以看到具体的执行代码:
双击进去,可以看到,token = window.btoa(a)+('|')+binb2b64(hex_sha1(window.btoa(core_sha1(a)))) + b64_sha1(a)
鼠标悬停至 core_sha1 上,点击进入 main.js:1 进入原方法位置,不要格式化复制整个文件代码到本地,然后简单补充下代码即可:
// 未格式化的 main.js 内容复制到此处
function btoa(input) {
let buf = Buffer.from(input, 'utf8');
return buf.toString('base64')
}
function decode() {
let a = String(Date.parse(new Date()) / 1000);
return btoa(a.toString()) + ('|') + binb2b64(hex_sha1(btoa(core_sha1(a).toString()))) + b64_sha1(a);
}
token = decode()
console.log(token)
可以看到,输出结果为正确的格式:
然后在python中通过 subprocess.check_output(['node', 'topic16_.js']).decode().replace('\n', '')
调用即可。