js逆向学习

学习js逆向

转载自逆风奔跑的根号
ajax加载页面解决
  • 需要找到真正要访问的网址
  • F12->xhr文件->header里面的请求网址
    在这里插入图片描述
if __name__ == '__main__':
    base_url = "https://www.oklink.com/api/explorer/v1/btc/transactionsNoRestrict?t=1668764330725&limit=20&offset=0"
    header = {
        "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
                     "Chrome/107.0.0.0 Safari/537.36",
        "Host":"www.oklink.com",
        "Referer":"https://www.oklink.com/zh-cn/btc/tx-list?limit=20&pageNum=1"
    }
    re = requests.get(url=base_url,headers=header)
    print(re.text)
  • 虽然这样结果显示是5001,但是直观地告诉了我们缺啥。。。
    在这里插入图片描述
解决参数问题
  • 寻找相关的xhr文件里header部分有哪个参数是经常变化的(需要刷新观察)
  • 成功找到了这个参数x-apiKey
    在这里插入图片描述
  • CTRL+F全局搜索 x-apiKey
  • 找到了好几个js文件,前三个文件都能找到 有关x-apiKey参数的方法
    在这里插入图片描述
  • 继续CTRF+F搜索x-apiKey(js文件源代码里),可以发现找到了两处代码
    在这里插入图片描述
  • 发现了x-apiKey的相关的方法getApiKey(可以全局搜索)
    在这里插入图片描述
  • 分析这个函数,e:当前时间;t:encryptApiKey()函数得到的;
  • 第二步把e重新赋值encryptTime(e)
  • 第三步comb(t, e)
    encryptApiKey()函数
    在这里插入图片描述
  • 这里e是固定的字符串,“a2c903cc-b31e-4547-9299-b6d07b7631ab”
  • t得到了e的切片,即得到每个字符组成的数组
  • r得到了的前8个字符,即a,2,c,9,0,3,c,c,给r赋值后已经删除了t的前8项(splice用法得到删除结果)
  • 最后返回t+r拼接的字符串,即-b31e-4547-9299-b6d07b7631aba2c903cc
  • 其实只是给这个字符串的前8项和后28项换了一下位置
    encryptTime()函数
    在这里插入图片描述
  • 传入的e是得到当前时间(时间戳,毫秒数),处理后赋值给t
  • r,n,o是产生的0-10的一个随机整数(大于等于0小于10)
  • 最后返回t,r,n,o,拼接生成的字符串
    到此为止,t,e参数都已经分析完毕,最后看comb()函数
    在这里插入图片描述
  • r是e|t形成的字符串
  • 返回的是r编码后的字符串
函数实现
import base64
import requests
import time
import random


def get_encryptTime(cur_time):
    cur_time = str(1 * cur_time + 1111111111111)
    r = str(random.randint(0, 9))
    n = str(random.randint(0, 9))
    o = str(random.randint(0, 9))
    cur_time = cur_time + r + n + o
    return cur_time


def get_encryptApiKey(API_KEY):
    t = API_KEY[8:]
    r = API_KEY[0:8]
    return t + r


def get_comb(API_KEY, cur_time):
    key = get_encryptApiKey(API_KEY) + "|" + get_encryptTime(cur_time)
    return base64.b64encode(key.encode('utf-8')).decode('utf-8')


def get_x_apikey():
    API_KEY = "a2c903cc-b31e-4547-9299-b6d07b7631ab"
    cur_time = round(time.time() * 1000)
    x_apikey = get_comb(API_KEY=API_KEY, cur_time=cur_time)
    return x_apikey


if __name__ == '__main__':
    base_url = "https://www.oklink.com/api/explorer/v1/btc/transactionsNoRestrict?t=1668764330725&limit=20&offset=0"
    header = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
                      "Chrome/107.0.0.0 Safari/537.36",
        "Host": "www.oklink.com",
        "Referer": "https://www.oklink.com/zh-cn/btc/tx-list?limit=20&pageNum=1",
        "x-apiKey":get_x_apikey()
    }
    re = requests.get(url=base_url, headers=header)
    print(re.content)

在这里插入图片描述

在这里插入图片描述

完成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值