逆向案例二十三——请求头参数加密,某区块链交易逆向

网址:aHR0cHM6Ly93d3cub2tsaW5rLmNvbS96aC1oYW5zL2J0Yy90eC1saXN0L3BhZ2UvNAo=

抓包分析,发现请求头有X-Apikey参数加密,其他表单和返回内容没有加密。

直接搜索关键字,X-Apikey,找到疑似加密位置,注意这里断点是断不住的,但看上去也是这里进行了加密。

因此搜索关键字getApiKey,找疑似加密位置,打上断点。 

翻页后,进一步确认加密位置,貌似是comb这个函数进行了加密,进入这个函数。

打印参数,没错就是这里进行了加密。

它接收两个值,t和e分别是怎么来的呢?回归这里,t是获得时间戳再运用encryptTime()函数得到,e是encryptApikey()函数得到。

先看t,进入encryptTime()函数

再进入 encryptApikey()函数

直接复制并改写代码即可。

先搞定获得t和e的函数,最后在解决最终加密comb

获得t的代码:

a = 1111111111111;
var time_stamp = (new Date).getTime();
function encryptTime(t) {
                    var e = (1 * t + a).toString().split("")
                      , n = parseInt(10 * Math.random(), 10)
                      , r = parseInt(10 * Math.random(), 10)
                      , i = parseInt(10 * Math.random(), 10);
                    return e.concat([n, r, i]).join("")
                };
t = encryptTime(time_stamp)

console.log(t)
// 结果为 2832309119911220

获得e的代码:

var API_KEY = "a2c903cc-b31e-4547-9299-b6d07b7631ab";
function encryptApiKey() {
    var t = API_KEY
        , e = t.split("")
        , n = e.splice(0, 8);
    return t = e.concat(n).join("")
};
e = encryptApiKey()
console.log(e)

//结果为 -b31e-4547-9299-b6d07b7631aba2c903cc

再回过头来看comb

o.Z是全局变量window,btoa是内置函数,转为base64格式。 

复现这段代码:

// 引入 Node.js 的 Buffer 类
const { Buffer } = require('buffer');

function getApiKey(t, e) {
    var n = "".concat(t, "|").concat(e);
    // 使用 Buffer 来转换字符串为 Base64 编码
    var encoded = Buffer.from(n).toString('base64');
    return encoded;
}

console.log(getApiKey(t,e))

// 结果为MjgzMjMxMDY4Nzg0ODUyNXwtYjMxZS00NTQ3LTkyOTktYjZkMDdiNzYzMWFiYTJjOTAzY2M=
a = 1111111111111;
var time_stamp = (new Date).getTime();
function encryptTime(t) {
                    var e = (1 * t + a).toString().split("")
                      , n = parseInt(10 * Math.random(), 10)
                      , r = parseInt(10 * Math.random(), 10)
                      , i = parseInt(10 * Math.random(), 10);
                    return e.concat([n, r, i]).join("")
                };
t = encryptTime(time_stamp)

console.log(t)
var API_KEY = "a2c903cc-b31e-4547-9299-b6d07b7631ab";
function encryptApiKey() {
    var t = API_KEY
        , e = t.split("")
        , n = e.splice(0, 8);
    return t = e.concat(n).join("")
};
e = encryptApiKey()
console.log(e)

// 引入 Node.js 的 Buffer 类
const { Buffer } = require('buffer');

function getApiKey(t, e) {
    var n = "".concat(t, "|").concat(e);
    // 使用 Buffer 来转换字符串为 Base64 编码
    var encoded = Buffer.from(n).toString('base64');
    return encoded;
}

console.log('最终结果为:',getApiKey(t,e))

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-18 05:48:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-18 05:48:03       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-18 05:48:03       58 阅读
  4. Python语言-面向对象

    2024-07-18 05:48:03       69 阅读

热门阅读

  1. 掌握Xcode Storyboard:iOS UI设计的可视化之旅

    2024-07-18 05:48:03       21 阅读
  2. Anylogic中Excel 文件(Excel file)的使用

    2024-07-18 05:48:03       17 阅读
  3. uniapp动态计算并设置元素高度

    2024-07-18 05:48:03       22 阅读
  4. uniapp 解决scroll-view组件 refresher-triggered刷新无效

    2024-07-18 05:48:03       20 阅读
  5. AWS ECS 服务创建 CloudWatch 告警

    2024-07-18 05:48:03       19 阅读
  6. 基于 Vue 3 和 Element Plus 构建图书管理系统

    2024-07-18 05:48:03       24 阅读
  7. Android中Context概述

    2024-07-18 05:48:03       19 阅读
  8. 数据库管理-第221期 Oracle的高可用-04(20240717)

    2024-07-18 05:48:03       21 阅读
  9. 构建自动化:在Gradle中配置项目变量

    2024-07-18 05:48:03       21 阅读
  10. PL/SQL oracle上多表关联的一些记录

    2024-07-18 05:48:03       23 阅读
  11. vb6读取mysql,用odbc mysql 5.3版本驱动

    2024-07-18 05:48:03       19 阅读