【逆向系列】6-某科云链x-apiKey加密逆向

免责声明

本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!
本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责,若有侵权,请在微信公众号【小白逆向】联系作者立即删除!

前言

本篇文章将带着大家初步尝试手动补环境

逆向目标

  • 某科云链:headers中的x-apiKey
  • 逆向首页:aHR0cHM6Ly93d3cub2tsaW5rLmNvbS96aC1jbi9idGMvdHgtbGlzdA==
  • 逆向接口:aHR0cHM6Ly93d3cub2tsaW5rLmNvbS9hcGkvZXhwbG9yZXIvdjEvYnRjL3RyYW5zYWN0aW9uc05vUmVzdHJpY3Q=
  • 脱敏处理(base64编码)
  • 涉及知识点:补环境

网络抓包分析

1、在xhr过滤器中,找到接口url

【逆向系列】6-某科云链x-apiKey加密逆向


2、在这个接口url的headers中可以看到,今天的主角x-apiKey

【逆向系列】6-某科云链x-apiKey加密逆向



x-apiKey逆向分析思路

1、搜索全局搜索参数["x-apiKey"]
2、找到关键位置,断下点
3、相关函数的扣取
4、本地还原。

x-apiKey逆向分析

1、全局搜索["x-apiKey"]在查询到的结果中的第一个中,断下断点。

【逆向系列】6-某科云链x-apiKey加密逆向


2、在网页中点击加载更多
成功断住

【逆向系列】6-某科云链x-apiKey加密逆向


3、进入i.getApiKey()函数
来到getApiKey函数


{key"getApiKey",
  valuefunction({
      var t = (new Date).getTime()
        , e = this.encryptApiKey();
      return t = this.encryptTime(t),
      this.comb(e, t)
  }
}

4、根据分析得知,当前函数属于一个对象中i = new (function() {,所以直接扣取这个对象到本地中。

【逆向系列】6-某科云链x-apiKey加密逆向


5、根据第一个断点那样去在本地调用函数。

【逆向系列】6-某科云链x-apiKey加密逆向


6、报错提示o未定义,直接在控制台打印o,得到o函数

【逆向系列】6-某科云链x-apiKey加密逆向

7、再次运行代码

【逆向系列】6-某科云链x-apiKey加密逆向

8、报错window未定义,定义window

【逆向系列】6-某科云链x-apiKey加密逆向


9、结果显示window.btoa未定义

btoa是js代码中,将字符串编码为base64的一个方法,nodejs也有内置的,所以这里,在window中重写一下window的btoa
10、补充window的btoa方法,后再次运行

window = {
    btoa(data){
        return btoa(data)
    }
}


【逆向系列】6-某科云链x-apiKey加密逆向


成功拿到加密结果。
11、至此,x-apiKey逆向到此结束。
12、再次优化代码

【逆向系列】6-某科云链x-apiKey加密逆向



数据获取流程

  • 获取加密结果;
  • 传入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()

成功截图:

【逆向系列】6-某科云链x-apiKey加密逆向


代码已在github开源:
https://github.com/puboop/reverse/


原文始发于微信公众号(小白逆向):【逆向系列】6-某科云链x-apiKey加密逆向

版权声明:admin 发表于 2022年12月10日 上午8:20。
转载请注明:【逆向系列】6-某科云链x-apiKey加密逆向 | CTF导航

相关文章

暂无评论

暂无评论...