在Web安全與數據爬取領域,JavaScript加密黑盒的逆向工程是核心技術之一。本文基于行業通用方法論與實戰案例,提煉出一套標準化的五步逆向流程,涵蓋目標定位、代碼提取、邏輯分析、算法復現到自動化集成的全鏈路解決方案,幫助開發者系統性突破加密壁壘。
第一步:目標定位——鎖定加密入口
核心任務
識別請求中的加密參數(如sign
、token
)及其調用鏈路。
抓包分析
通過Chrome DevTools的Network面板捕獲目標接口,篩選攜帶加密參數的請求。例如,某網系統的查詢接口/rxxx/xxxxxte
中,nonce
(隨機數)和sign
(簽名)是關鍵加密字段。
關鍵參數溯源
利用搜索功能(Ctrl+Shift+F)在JS文件中定位參數生成邏輯。例如,搜索encryptByMD5
或getKeyParams
等關鍵詞,可快速定位加密函數。
工具推薦
-
Fiddler:跨域抓包
-
Postman:接口調試
對抗策略
開發者需警惕接口參數名動態變化(如隨機哈希命名),此時需依賴調用棧回溯或XHR斷點追蹤。
第二步:代碼提取——剝離混淆層
核心任務
獲取加密邏輯所在的JS文件,并完成反混淆處理。
本地代碼覆蓋
使用Chrome Overrides功能將線上JS文件替換為本地副本,持久化調試修改后的代碼。例如,通過覆蓋chunk-xxx.js
文件,插入日志輸出或修改加密邏輯。
反混淆技術
針對字符串加密、控制流平坦化等混淆手段,使用JSNice、Babel AST解析器還原代碼邏輯。例如,某航空平臺的Authorization生成代碼通過AST解析后,暴露出RSA公鑰和動態時間戳的拼接規則。
工具推薦
-
AST Explorer:語法樹分析
-
Prettier:代碼格式化
對抗策略
警惕“自毀代碼”(如定時器觸發代碼刪除),需優先保存原始文件副本。
第三步:邏輯分析——動態調試與HOOK攔截
核心任務
通過斷點調試和HOOK技術追蹤加密函數調用鏈。
動態調試技巧
在Chrome DevTools中設置條件斷點,觀察加密函數輸入輸出。例如,某金融APP的encryptByAES
函數通過斷點捕獲到IV(初始化向量)為固定值12xxxxxxxxxxxef
。
HOOK技術應用
使用Frida或Tampermonkey攔截關鍵函數。例如,HOOK Cipher.doFinal()
可捕獲AES加密前的明文數據,或通過SSL_write攔截HTTPS請求的原始載荷。
案例
某醫療平臺通過HOOK JSON.parse
函數,發現響應數據解密前的Base64編碼邏輯,成功繞過反爬機制。
第四步:算法復現——跨語言移植與驗證
核心任務
將JS加密邏輯轉化為Python等后端語言代碼。
算法還原
對加密函數進行逐行翻譯。例如,某翻譯平臺的sign
參數生成邏輯為:
def generate_sign(timestamp, nonce, skey, body): raw = f"{timestamp}{nonce}{skey}{body}" md5_hash = hashlib.md5(raw.encode()).hexdigest().upper() rsa_sign = rsa_encrypt(md5_hash, public_key) # 使用逆向得到的RSA公鑰 return base64.b64encode(rsa_sign).decode()
該邏輯通過對比線上請求驗證一致性。
對抗動態密鑰
若加密密鑰依賴環境變量(如瀏覽器指紋),需模擬生成邏輯。例如,某電商平臺通過document.querySelector
獲取隱藏的RSA公鑰,需在代碼中硬編碼或動態爬取。
工具推薦
-
PyExecJS:執行JS代碼
-
Cryptography:加密算法庫
第五步:自動化集成——構建高魯棒性請求框架
核心任務
將逆向結果封裝為可持續運行的爬蟲或測試工具。
請求模擬
使用Requests或Playwright構建請求鏈,處理Cookie、IP輪詢等反爬策略。例如,某平臺的登錄流程需先獲取動態skey
,再生成簽名,最終提交加密表單。
容錯與迭代
針對密鑰更新、代碼混淆升級等風險,設計自動化監控機制。例如,通過AST解析定期對比JS文件差異,或部署CI/CD流水線自動測試加密邏輯有效性。
案例
某風控系統通過定期抓取JS文件哈希值,觸發逆向流程重新執行,確保爬蟲持續可用。
總結:逆向工程的核心思維
-
分層突破:從網絡層到代碼層逐級拆解,避免陷入全局混淆的復雜性。
-
動態對抗:加密方案持續迭代,需建立自動化響應機制(如密鑰池動態更新)。
-
合規邊界:逆向僅用于技術研究,需遵循Robots協議與數據隱私法規。
開發者可系統化應對各類加密場景,將“黑盒”轉化為可維護、可擴展的技術資產。