声明#
本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!
1、接口寻找
通过开发者工具可以轻松找到接口位置

2、参数定位
可以看到,请求HTTP头参数很多:
经过测试,只有x-apikey参数必须,其它参数可忽略
全局搜索未能找到x-apikey参数,使用xhr断点,‘api/explorer/v1/btc/blocks?’,
刷新一下,断在请求发送之前,

经测试,未能发现明显x-apikey生成位置
观察x-apikey参数有明显bs64编码特征,可能通过window.btoa生成
全局搜索window.btoa,未能找到明显生成位置
这时使用hook脚本,当window.btoa调用时debugger,代码如下:
const originalBtoa = window.btoa;
// 重写 btoa 函数
window.btoa = function (input) {
console.log('Hook: btoa 被调用,输入值为:', input);
debugger; // 触发调试器
// 调用原始的 btoa 函数
const result = originalBtoa(input);
console.log('Hook: btoa 返回结果:', result);
// 返回结果
return result;
};
运行hook脚本

再运行一下,可以在控制台看到

可以发现返回结果与x-apikey参数相似,看调用函数

可以看到是由e与t拼接后调用window.btoa,e为固定值,可以写死,找到t的生成位置

可以看到t就是上述中的e,通过gettime得到后调用encryptTime,encryptTime函数如下:

其中c为固定值,c = 1111111111111,写死
i.o.mathRandom就是Math.random函数

x-apikey生成逻辑,把以上代码合并一下:
(() => {
window = global;
var e = (new Date).getTime();
var t = (1 * e + 1111111111111).toString().split("")
, r = parseInt(10 * Math.random(), 10)
, n = parseInt(10 * Math.random(), 10)
, o = parseInt(10 * Math.random(), 10);
s = '-b31e-4547-9299-b6d07b7631aba2c903cc';
t = t.concat([r, n, o]).join("");
var r = "".concat(s, "|").concat(t);
return {a:e,b:window.btoa(r)};
})()
在python中调用结果如下:

用该x-apikey调用接口能正常返回数据
359



被折叠的 条评论
为什么被折叠?



