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

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

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

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

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

目录
前言
工具准备
采集目标地址
项目需求分析
第一步
第二步
js逆向操作
简易源码分享
工具准备
开发工具:pycharm
开发环境:python3.7, Windows10
使用工具包:requests

采集目标地址

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

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

第二步
构造请求头发送网络请求,需要带上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'

}
1
2
3
4
5
6
7
8
再发送请求,

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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
发送请求的时候会发现我们,请求的数据和我们看到的数据不正确,获取的数据是

很明确的告诉我们访问已经过期了,那我们加载的数据可以很明显的看出来x-apiKey是加密的数据,是在不断变化的,那我们需要对当前x-apiKey来进行逆向

js逆向操作
通过搜索来定位到加密字段的加密文件

在当前文件进行搜索,搜索我们关键字形成的位置

可以看出我们当前的数据是有这一行代码来进行生成的,在当前代码上打上一个断点,刷新页面跳转到执行js的代码位置

可以看到这个就是我们当前加密的函数位置,可以通过两种方式来进行对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());

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
通过execjs来对构造一个js环境,读取文件,在将文件js代码放置在js环境里通过py代码来进行调用

当前数据就获取正确

简易源码分享
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());

目录
相关文章
|
13天前
|
数据采集 存储 API
网络爬虫与数据采集:使用Python自动化获取网页数据
【4月更文挑战第12天】本文介绍了Python网络爬虫的基础知识,包括网络爬虫概念(请求网页、解析、存储数据和处理异常)和Python常用的爬虫库requests(发送HTTP请求)与BeautifulSoup(解析HTML)。通过基本流程示例展示了如何导入库、发送请求、解析网页、提取数据、存储数据及处理异常。还提到了Python爬虫的实际应用,如获取新闻数据和商品信息。
|
17天前
|
JSON JavaScript 前端开发
在Python中调用和执行JavaScript
在Python中调用和执行JavaScript主要通过`PyExecJS`库实现。安装库后,可以使用`execjs.compile`编译JS代码并用`eval`或`call`执行。此外,还能加载JavaScript库和框架,调用外部JS文件,处理返回值,以及在两者间传递数据。Python和JavaScript各有优劣,适用于不同场景,结合使用可增强项目功能和灵活性。
27 0
|
1月前
|
数据采集 JSON API
如何实现高效率超简洁的实时数据采集?——Python实战电商数据采集API接口
你是否曾为获取重要数据而感到困扰?是否因为数据封锁而无法获取所需信息?是否因为数据格式混乱而头疼?现在,所有这些问题都可以迎刃而解。让我为大家介绍一款强大的数据采集API接口。
|
1月前
|
数据采集 Web App开发 JavaScript
JavaScript爬虫进阶攻略:从网页采集到数据可视化
JavaScript爬虫进阶攻略:从网页采集到数据可视化
|
1月前
|
数据采集 数据可视化 数据挖掘
使用Python编写Web爬虫实现数据采集与分析
在当今信息化时代,数据是企业发展和决策的重要依据。本文将介绍如何使用Python编写Web爬虫来实现对特定网站数据的自动采集,并结合数据分析技术,为读者展示如何利用爬虫技术获取有价值的信息并进行有效的数据处理和分析。
|
2月前
|
数据采集 存储 开发者
Python爬虫实战:打造高效数据采集工具
本文将介绍如何利用Python编写一个高效的网络爬虫,实现对特定网站数据的快速抓取与处理,帮助开发者更好地应对大规模数据采集的需求。
|
2月前
|
数据采集 数据挖掘 API
主流电商平台数据采集API接口|【Python爬虫+数据分析】采集电商平台数据信息采集
随着电商平台的兴起,越来越多的人开始在网上购物。而对于电商平台来说,商品信息、价格、评论等数据是非常重要的。因此,抓取电商平台的商品信息、价格、评论等数据成为了一项非常有价值的工作。本文将介绍如何使用Python编写爬虫程序,抓取电商平台的商品信息、价格、评论等数据。 当然,如果是电商企业,跨境电商企业,ERP系统搭建,我们经常需要采集的平台多,数据量大,要求数据稳定供应,有并发需求,那就需要通过接入电商API数据采集接口,封装好的数据采集接口更方便稳定高效数据采集。
|
2月前
|
前端开发 关系型数据库 MySQL
基于python+django+vue.js开发的社区养老管理系统
基于python+django+vue.js开发的社区养老管理系统
93 1
|
9天前
|
Python
python面型对象编程进阶(继承、多态、私有化、异常捕获、类属性和类方法)(上)
python面型对象编程进阶(继承、多态、私有化、异常捕获、类属性和类方法)(上)
52 0
|
1月前
|
数据采集 存储 Web App开发
一键实现数据采集和存储:Python爬虫、Pandas和Excel的应用技巧
一键实现数据采集和存储:Python爬虫、Pandas和Excel的应用技巧