逆向案例二十三——請求頭參數加密,某區塊鏈交易逆向

網址: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))

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/46304.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/46304.shtml
英文地址,請注明出處:http://en.pswp.cn/web/46304.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

零基礎學習Python(三)

1. 多重繼承 一個子類可以繼承多個父類,這與一些編程語言的規則不通。 如果多個父類中有同名的變量和方法,子類訪問的順序是按照繼承時小括號里書寫的順序進行訪問的。 可以用issubclass(B, A)方法判斷B是否為A的子類。 2. 綁定 類中的方法通過參數s…

《TF2.x強化學習手冊》P59-P65-SARSA-Q-learning

文章目錄 實現SARSA算法和對應的強化學習智能體前期準備實現步驟工作原理初始化算法流程 構建基于Q學習的智能體前期準備實現步驟工作原理SARSA 算法的收斂性:SARSA 適合在線學習和真實系統:Q 學習算法的適用性: 實現SARSA算法和對應的強化學…

HDC使用常見命令

HDC(HarmonyOS Device Connector)是為開發人員提供的用于調試的命令行工具,通過該工具可以在windows/linux/mac系統上與真實設備進行交互。 使用HDC前,需要配置相關環境變量: 在此電腦 > 屬性 > 高級系統設置 &g…

Git常用命令以及使用IDEA集成Gitee

目錄 一、設置用戶簽名 二、初始化本地庫 三、查看本地庫狀態 四、添加文件到暫存區 五、提交本地庫 六、修改文件 七、版本穿梭 八、Git分支 九、分支的操作 9.1、查看分支 9.2、創建分支 9.3、切換分支 9.4、合并分支 十、團隊協作 十一、Idea集成Git 11.1、配…

Github 2024-07-15 開源項目周報 Top15

根據Github Trendings的統計,本周(2024-07-15統計)共有15個項目上榜。根據開發語言中項目的數量,匯總情況如下: 開發語言項目數量Python項目5非開發語言項目4JavaScript項目3TypeScript項目2Go項目1Solidity項目1Java項目1Rust項目1免費編程學習平臺:freeCodeCamp.org 創建…

3.1-RNN存在的問題以及LSTM的結構

文章目錄 1 RNN存在的問題1.1梯度消失問題1.2梯度爆炸問題1.3梯度爆炸的對策 2梯度消失的對策——LSTM2.1輸出門2.2遺忘門2.3輸入門2.4總結2.5 LSTM梯度的流動 1 RNN存在的問題 RNN存在梯度消失和梯度爆炸的問題。 書上以下圖的這句話為例,進行說明;為了…

前瞻斷言與后瞻斷言:JavaScript 正則表達式的秘密武器

JavaScript 中的前瞻斷言(lookahead)和后瞻斷言(lookbehind)相信用過的小伙伴就知道它的威力了,在一些特定的需求場景下,可以做到四兩撥千斤的作用,今天讓我們來盤點一下在 JavaScript 正則表達…

昇思25天學習打卡營第14天|munger85

基于MindNLPMusicGen生成自己的個性化音樂 這個所謂的個性化的音樂就是指你輸入一段文字它會根據這個文字輸出一段音樂這個音樂是貼近于那段文字的所以叫做文生成音樂, 如果網絡正常的話就可以直接從下載這個模型。 那么音樂生成的有兩種方式呢有兩種方式&#xff…

【C++初階】C/C++內存管理

【C初階】C/C內存管理 🥕個人主頁:開敲🍉 🔥所屬專欄:C🥭 🌼文章目錄🌼 1. C/C內存分布 2. C語言中動態內存管理方式:malloc/calloc/realloc/free 3. C內存管理方式 3…

DP學習——組合模式

學而時習之,溫故而知新。 組合模式 和代理模式相比 和代理模式相比,有點類似。引用類和被引用類都繼承于同一個接口類。 但是感覺組合模式是對代理模式的更加豐富化(升級版、超進化),集合化或者說聚合化。 組合模…

拉格朗日乘子法和KKT條件

拉格朗日乘子法(Lagrange Multiplier) 和 KKT(Karush-Kuhn-Tucker) 條件是求解約束優化問題的重要方法,在有等式約束時使用拉格朗日乘子法,在有不等約束時使用 KKT 條件。當然,這兩個方法求得的結果只是必要條件,只有當目標函數…

ssrf復習(及ctfshow351-360)

1. SSRF 概述 服務器會根據用戶提交的URL發送一個HTTP請求。使用用戶指定的URL,Web應用可以獲取圖片或者文件資源等。典型的例子是百度識圖功能。 如果沒有對用戶提交URL和遠端服務器所返回的信息做合適的驗證或過濾,就有可能存在“請求偽造"的缺陷…

C#中錯誤與異常處理

1、錯誤和異常 如果程序運行期間發生錯誤,異常就會發生。異常會中止當前的程序流,如果不采取措施,程序將停止運行。 錯誤和異常是兩個不同的概念,但它們都與程序的穩定性和可維護性有關。 1.1、錯誤 錯誤通常是指編譯時的語法錯誤…

FPGA學習筆記(一) FPGA最小系統

文章目錄 前言一、FPGA最小系統總結 前言 今天學習下FPGA的最小系統一、FPGA最小系統 FPGA最小系統與STM32最小系統類似,由供電電源,時鐘電路晶振,復位和調試接口JTAG以及FLASH配置芯片組成,其與STM32最大的不同之處就是必須要有…

關于Hyperf高并發性能的一些配置詳解和硬件推薦

目錄 工作進程的管理 自定義配置示例(EasySwoole): 自動生成: 結論: 集群部署與協程數的關系: 設置 max_coroutine 的考慮因素: 集群部署時的配置: 示例配置: C…

鏈表面試練習習題集(Java)

1. 思路&#xff1a; 因為楊輝三角是由二維數組構成&#xff0c;所以要先創建一個二維數組&#xff0c;如何用順序表表示二維數組&#xff0c;可以通過List<List<Interger>>來表示一個二維數組&#xff0c;可以這樣理解&#xff1a;先創建一個一維數組List&#x…

modbus slave 設備通過 網關thingsboard-gateway 將數據上傳到thingsboard云平臺

搭建thingsboard物聯網云平臺花了大量時間&#xff0c;從小白到最后搭建成功&#xff0c;折磨了好幾天&#xff0c;也感謝網友的幫助&#xff0c;提供了思路最終成功搞定&#xff0c;特此記錄。 一、thingsboard環境搭建&#xff08;Ubuntu20.04LTS&#xff09; 參考官方文檔&a…

java之 junit單元測試案例【經典版】

一 junit單元測試 1.1 單元測試作用 單元測試要滿足AIR原則&#xff0c;即 A&#xff1a; automatic 自動化&#xff1b; I: Independent 獨立性&#xff1b; R&#xff1a;Repeatable 可重復&#xff1b; 2.單元測試必須使用assert來驗證 1.2 案例1 常規單元測試 1.…

PSINS工具箱函數介紹——r2d

介紹工具箱里面r2d這個小函數的作用。 程序源碼 function deg r2d(rad) % Convert angle unit from radian to degree % % Prototype: deg r2d(rad) % Input: rad - angle in radian(s) % Output: deg - angle in degree(s) % % See also r2dm, r2dms, d2r, dm2r, dms2r% …

設計模式使用場景實現示例及優缺點(行為型模式——觀察者模式)

阿爾法的身體內部有一個智能芯片&#xff0c;這個芯片能夠根據環境和需求自動改變它的行為模式。當阿爾法需要完成不同任務時&#xff0c;它的內部狀態會發生變化&#xff0c;進而改變它的行為&#xff0c;就像是它變成了另一個機器人一樣。 一天&#xff0c;智能城的市長接到一…