Python进阶:btc逆向-数据采集-JS逆向

前言

大家好,我是辣条哥~ 我又来了开源了

今天讲的这个话题一直是热门中的热门,热度持续不减,相信大家看到标题应该就多少有点兴趣,辣条之所以今天聊这个原因是因为我的一个同事(暂且命名为老李吧,老王感觉怪怪的)。

老李他是一个地地道道的靠农业发家奔小康的,有一说一文化水平不是很高,所以呢有时候会盲目的去跟从一些事情,不知道从哪里了解到这个,由于之前他也吃过几次亏了,所以这次特意找上辣条来,但是辣条呢也就只有这一个手艺,大家可以看看下面操作你们觉得对老李有没得帮助啊~

目录

  • 前言
  • 工具准备
  • 采集目标地址
  • 项目需求分析
  • 第一步
  • 第二步
  • js逆向操作
  • 简易源码分享
  • 工具准备

    开发工具:pycharm
    开发环境:python3.7, Windows10
    使用工具包:requests

    采集目标地址

    image.png

    项目需求分析

    要求:需要提取到每個数据的资源信息

    第一步

    区分数据的加载方法,可以很明显的看到当前的数据是动态数据,在浏览器页面鼠标右击点击检查点击网络先定位到我们想要获取到的数据信息
    image.png

    第二步

    构造请求头发送网络请求,需要带上x-apiKey,User-Agent,Referer,Cookie

    headers = {
        # 加密的
        'x-apiKey': LWIzMWUtNDU0Ny05Mjk5LWI2ZDA3Yjc2MzFhYmEyYzkwM2NjfDI3Njk0MzQ1ODIzMjAwNDc,
        'Host': 'www.oklink.com',
        'Referer': 'https://www.oklink.com/zh-cn/btc/tx-list?limit=20&pageNum=1',
        'Cookie': '_okcoin_legal_currency=CNY; locale=zh_CN; first_ref=https%3A%2F%2Fwww.oklink.com%2Fzh-cn; aliyungf_tc=7bc98cf45276d85ada3f9ab1eef041a5408f54c588410502283478ad5cdbb474; Hm_lvt_5244adb4ce18f1d626ffc94627dd9fd7=1658042303,1658143551,1658236007; Hm_lpvt_5244adb4ce18f1d626ffc94627dd9fd7=1658301391',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'
    }
    

    再发送请求,

    headers = {
        # 加密的
        'x-apiKey': 'LWIzMWUtNDU0Ny05Mjk5LWI2ZDA3Yjc2MzFhYmEyYzkwM2NjfDI3Njk0MzQ1ODIzMjAwNDc',
        'Host': 'www.oklink.com',
        'Referer': 'https://www.oklink.com/zh-cn/btc/tx-list?limit=20&pageNum=1',
        'Cookie': '_okcoin_legal_currency=CNY; locale=zh_CN; first_ref=https%3A%2F%2Fwww.oklink.com%2Fzh-cn; aliyungf_tc=7bc98cf45276d85ada3f9ab1eef041a5408f54c588410502283478ad5cdbb474; Hm_lvt_5244adb4ce18f1d626ffc94627dd9fd7=1658042303,1658143551,1658236007; Hm_lpvt_5244adb4ce18f1d626ffc94627dd9fd7=1658301391',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'
    }
    # 获取到网址   静态数据  动态数据  抓包   找到我们想要的数据
    url = 'https://www.oklink.com/api/explorer/v1/btc/transactionsNoRestrict?t=1658301391444&limit=20&offset=20'
    
    # 发送请求   浏览器   代码
    response = requests.get(url, headers=headers)
    print(response.text)
    

    发送请求的时候会发现我们,请求的数据和我们看到的数据不正确,获取的数据是
    image.png
    很明确的告诉我们访问已经过期了,那我们加载的数据可以很明显的看出来x-apiKey是加密的数据,是在不断变化的,那我们需要对当前x-apiKey来进行逆向

    js逆向操作

    通过搜索来定位到加密字段的加密文件
    image.png
    在当前文件进行搜索,搜索我们关键字形成的位置
    image.png
    可以看出我们当前的数据是有这一行代码来进行生成的,在当前代码上打上一个断点,刷新页面跳转到执行js的代码位置
    image.png

    可以看到这个就是我们当前加密的函数位置,可以通过两种方式来进行对js代码处理,第一个可以直接把js代码转换成py代码,再有就是直接扣js代码,我们这里就投个小懒,直接扣js代码来补环境

    API_KEY = "a2c903cc-b31e-4547-9299-b6d07b7631ab"
    function encryptApiKey() {
        var t = API_KEY
          , e = t.split("")
          , r = e.splice(0, 8);
        return e.concat(r).join("")
    }
    
    function encryptTime(t) {
        var e = (1 * t + 1111111111111).toString().split("")
          , r = parseInt(10 * Math.random(), 10)
          , n = parseInt(10 * Math.random(), 10)
          , o = parseInt(10 * Math.random(), 10);
        return e.concat([r, n, o]).join("")
    }
    
    function comb(t, e) {
        var r = "".concat(t, "|").concat(e);
        return btoa(r)
    }
    
    function getApiKey() {
        var t = (new Date).getTime()
            , e = encryptApiKey();
        return t = encryptTime(t),
            comb(e, t)
    }
    
    // console.log(getApiKey());
    

    通过execjs来对构造一个js环境,读取文件,在将文件js代码放置在js环境里通过py代码来进行调用
    image.png
    当前数据就获取正确

    简易源码分享

    import requests     # 发送网络请求的工具
    import execjs       # 转换js代码
    
    with open('abd.js', 'r')as f:
        js_code = f.read()
    resp = execjs.compile(js_code)
    api = resp.call('getApiKey')
    # print(api)
    headers = {
        # 加密的
        'x-apiKey': api,
        'Host': 'www.oklink.com',
        'Referer': 'https://www.oklink.com/zh-cn/btc/tx-list?limit=20&pageNum=1',
        'Cookie': '_okcoin_legal_currency=CNY; locale=zh_CN; first_ref=https%3A%2F%2Fwww.oklink.com%2Fzh-cn; aliyungf_tc=7bc98cf45276d85ada3f9ab1eef041a5408f54c588410502283478ad5cdbb474; Hm_lvt_5244adb4ce18f1d626ffc94627dd9fd7=1658042303,1658143551,1658236007; Hm_lpvt_5244adb4ce18f1d626ffc94627dd9fd7=1658301391',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'
    }
    # 获取到网址   静态数据  动态数据  抓包   找到我们想要的数据
    url = 'https://www.oklink.com/api/explorer/v1/btc/transactionsNoRestrict?t=1658301391444&limit=20&offset=20'
    
    # 发送请求   浏览器   代码
    response = requests.get(url, headers=headers)
    print(response.text)
    
    
    
    API_KEY = "a2c903cc-b31e-4547-9299-b6d07b7631ab"
    function encryptApiKey() {
        var t = API_KEY
          , e = t.split("")
          , r = e.splice(0, 8);
        return e.concat(r).join("")
    }
    
    function encryptTime(t) {
        var e = (1 * t + 1111111111111).toString().split("")
          , r = parseInt(10 * Math.random(), 10)
          , n = parseInt(10 * Math.random(), 10)
          , o = parseInt(10 * Math.random(), 10);
        return e.concat([r, n, o]).join("")
    }
    
    function comb(t, e) {
        var r = "".concat(t, "|").concat(e);
        return btoa(r)
    }
    
    function getApiKey() {
        var t = (new Date).getTime()
            , e = encryptApiKey();
        return t = encryptTime(t),
            comb(e, t)
    }
    
    // console.log(getApiKey());
    

    来源:五包辣条!

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python进阶:btc逆向-数据采集-JS逆向

    发表评论