免责声明
本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!
本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责,若有侵权,请在微信公众号【小白逆向】联系作者立即删除!
前言
本篇文章将带着大家初步尝试手动补环境。
逆向目标
-
某科云链:headers中的 x-apiKey
-
逆向首页:aHR0cHM6Ly93d3cub2tsaW5rLmNvbS96aC1jbi9idGMvdHgtbGlzdA== -
逆向接口:aHR0cHM6Ly93d3cub2tsaW5rLmNvbS9hcGkvZXhwbG9yZXIvdjEvYnRjL3RyYW5zYWN0aW9uc05vUmVzdHJpY3Q= -
脱敏处理(base64编码) -
涉及知识点:补环境
网络抓包分析
1、在xhr过滤器中,找到接口url
2、在这个接口url的headers中可以看到,今天的主角x-apiKey
x-apiKey逆向分析思路
1、搜索全局搜索参数["x-apiKey"]
2、找到关键位置,断下点
3、相关函数的扣取
4、本地还原。
x-apiKey逆向分析
1、全局搜索["x-apiKey"]
在查询到的结果中的第一个中,断下断点。
2、在网页中点击加载更多
成功断住
3、进入i.getApiKey()
函数
来到getApiKey
函数
{key: "getApiKey",
value: function() {
var t = (new Date).getTime()
, e = this.encryptApiKey();
return t = this.encryptTime(t),
this.comb(e, t)
}
}
4、根据分析得知,当前函数属于一个对象中i = new (function() {
,所以直接扣取这个对象到本地中。
5、根据第一个断点那样去在本地调用函数。
6、报错提示o
未定义,直接在控制台打印o
,得到o函数
7、再次运行代码
8、报错window
未定义,定义window
9、结果显示window.btoa
未定义
btoa是js代码中,将字符串编码为base64的一个方法,nodejs也有内置的,所以这里,在window中重写一下window的btoa
10、补充window的btoa方法,后再次运行
window = {
btoa(data){
return btoa(data)
}
}
成功拿到加密结果。
11、至此,x-apiKey逆向到此结束。
12、再次优化代码
数据获取流程
-
获取加密结果; -
传入headers中的x-apiKey; -
获取最终数据。
总结
代码示例,不能直接运行:
# **************************************
# --*-- coding: utf-8 --*--
# @Time : 2022-12-09
# @Author : white
# @FileName: 某科云链.py
# @Software: PyCharm
# **************************************
import requests
import execjs
import time
def get_data():
url = 'https:脱敏处理'
headers = {
"Host": "脱敏处理",
"Referer": "https:脱敏处理?limit=20&pageNum=1",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36",
"x-apiKey": execjs.compile(open('x-apiKey.js', encoding='utf-8').read()).call("white"),
"x-cdn": "https:脱敏处理",
}
data = {
"t": str(int(time.time()*1000)),
"limit": "20",
"offset": "0"
}
res = requests.get(url=url, headers=headers).json()["data"]
for room in res['hits']:
house = dict()
house['交易哈希'] = room['hash']
house['所在区块'] = room['blockHeight']
house['输入'] = room['inputsCount']
house['输出'] = room['outputsCount']
print(house)
get_data()
成功截图:
代码已在github开源:
https://github.com/puboop/reverse/
原文始发于微信公众号(小白逆向):【逆向系列】6-某科云链x-apiKey加密逆向