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