故事背景:
在獲取某網站接口數據時,發現其請求的 headers 中的參數 使用了 AES算法加密 ,並對其進行校驗,在此簡單記錄下自己的踩坑歷程。
AES簡介:
高級加密標准(AES,Advanced Encryption Standard)為最常見的對稱加密算法。對稱加密算法也就是加密和解密用相同的密鑰。
AES加密方式有五種:ECB, CBC, CTR, CFB, OFB
CBC:加密需要一個十六位的key(密鑰)和一個十六位iv(偏移量)
ECB:加密不需要iv
AES,CBC: 加密的python實現
AES 加密的參數
AES 加密主要有以下幾個參數(坑):
key:加密的時候用秘鑰,解密的時候需要同樣的秘鑰才能解出來。
word:需要加密的參數。
model:aes 加密常用的有 ECB 和 CBC 模式
iv:偏移量 ,這個參數在 ECB 模式下不需要,在 CBC 模式下需要。
參數條件:
key:必須是16位字節或者24位字節或者32位字節
word:字節長度需要是16位的倍數
python 模塊安裝:
**Windows** :pycryptodome 模塊: pip install pycryptodome
**Linux** pycrypto模塊 : pip install pycrypto
現在開始進入正題
找到目標接口,查看他的請求頭 你會發現它里面的 參數: authorization 是被加密的,
經過測試的出,此參數的值是一次性的,不能被二次使用
拒絕請求:不對接口返回:未授權,二次使用返回:簽名已失效

全局搜索 authorization

進入第一個js文件查找可能存在的加密段落,打上斷點順藤摸瓜找到加密的地方


根據斷點查到的信息可以 authorization 是由 Object(kt.d)(a, "WTAHAPPYACTIVITY") 方法生成的
a 變量中 就只有一個 n 變量,根據斷點顯示出來的結果可以看得出 n 為 時間戳, 那么現在就進入Object(kt.d)看看


可以看得出 E 函數 就是加密的核心代碼: 為 AES加密 + ECB 模式 + Pkcs7, e為key密鑰, 知道了這些 我們就可以通過
python 的Crypto模塊將其加密模擬出來了,經歷千辛萬苦,終於還原了加密方式,並且能超過的訪問該接口拿到數據了,
話不多說,直接上代碼


