目 录CONTENT

文章目录

JS逆向案例003:标头参数模拟

克林空间
2024-02-14 / 0 评论 / 1 点赞 / 94 阅读 / 0 字 / 正在检测是否收录...
温馨提示:
本文最后更新于2024-02-14,若内容或图片失效,请留言反馈。 部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

📌免责声明:本文章涉及到的代码仅供学习交流使用,不得用于任何商业用途,数据来源于互联网公开内容,没有获取任何私有和非公开权限的信息(个人信息等)。由此引发的任何法律纠纷与本人无关。禁止将本文技术或者本文所关联的Github项目源码用于任何除学习外的目的。如本文有任何侵权,请联系删除。

本文通过分析某科云连的交易列表页面https://www.oklink.com/cn/btc/tx-list,来学习标头参数模拟方法。

页面分析

通过requests测试,发现获取数据需要在标头中提供x-apikey才能访问成功,而这个参数是一段密文,需要模拟生成。

jui8k

同时,检查请求中的载荷信息,只是常规的时间戳和分页信息,按规则提供即可。
tnbyz

x-apikey模拟

通过搜索,只发现一处有x-apikey参数赋值,但加上断点后并不会触发,说明这个点并不是真正的位置。
3ifkv

到此可以判断页面上通过其它的方式隐藏了x-apiKey参数的赋值操作,这里可以使用Hook的方式给设置headers参数的位置加上断点。Hook脚本如下:


code = function () {  
    org = window.XMLHttpRequest.prototype.setRequestHeader;  
    window.XMLHttpRequest.prototype.setRequestHeader = function (key, value) {  
        if (key == 'x-apiKey') {  
            debugger;  
        }  
        return org.apply(this, arguments);  
    }  
}  
script = document.createElement('script');  
script.textContent = '(' + code + ')()';  
(document.head || document.documentElement).appendChild(script);  
script.parentNode.removeChild(script);

在控制台注入脚本后,重新操作页面,就会在设置位置断住。
然后由断点的调用堆栈逐级排查调用链附近位置。最终定位到如下图位置处。这里通过拆散x-apiKey字符为列表,然后进行join拼接出参数名。这里的getApiKey()方法就是我们需要模拟的函数。这个过程比较繁琐,需要耐心。
xs2nt

分析getApikey()方法,发现具体生成逻辑在下图位置:
oxk9a

由此可以通过Python直接实现这部分算法,完成x-Apikey模拟:


import base64  
import random  
import time  
  
# api_key设定的固定初始值  
API_KEY = "a2c903cc-b31e-4547-9299-b6d07b7631ab"  
  
  
# 用python实现原网站js里的对应apikey生成方法  
def gen_api_key():  
    current_time = int(time.time() * 1000)  
    encrypt_api_key = API_KEY[8:] + API_KEY[:8]  
    time_str = str(current_time + 1111111111111)  
    r = str(random.randint(0, 9))  
    n = str(random.randint(0, 9))  
    o = str(random.randint(0, 9))  
    encrypt_time = time_str + r + n + o  
    new_key = f'{encrypt_api_key}|{encrypt_time}'  
    new_key = new_key.encode('utf-8')  
    return str(base64.b64encode(new_key), encoding='utf-8')  
  
  
if __name__ == '__main__':  
    print(gen_api_key())

1

评论区