javascript
【JS 逆向百例】网洛者反爬练习平台第三题:AAEncode 加密
關注微信公眾號:K哥爬蟲,持續分享爬蟲進階、JS/安卓逆向等技術干貨!
文章目錄
- 聲明
- 逆向目標
- AAEncode 簡介
- 逆向參數
- 完整代碼
- JavaScript 加密代碼
- Python 計算關鍵代碼
聲明
本文章中所有內容僅供學習交流,抓包內容、敏感網址、數據接口均已做脫敏處理,嚴禁用于商業用途和非法用途,否則由此產生的一切后果均與作者無關,若有侵權,請聯系我立即刪除!
逆向目標
- 目標:網洛者反反爬蟲練習平臺第三題:AAEncode 加密
- 鏈接:http://spider.wangluozhe.com/challenge/3
- 簡介:本題仍然是要求采集100頁的全部數字,并計算所有數據加和,需要摳出源碼進行計算,主要使用了 AAEncode 加密
AAEncode 簡介
AAEncode 和 JJEncode 都是同一個作者:日本的 Yosuke HASEGAWA ,AAEncode 可以將任何 JavaScript 代碼編碼為日式表情符號,在線體驗地址:https://utf-8.jp/public/aaencode.html 。
正常的一段 JS 代碼:
alert("Hello, JavaScript" )經過 AAEncode 混淆之后的代碼:
゚ω゚ノ= /`m′)ノ ~┻━┻ //*′?`*/ ['_']; o=(゚ー゚) =_=3; c=(゚Θ゚) =(゚ー゚)-(゚ー゚); (゚Д゚) =(゚Θ゚)= (o^_^o)/ (o^_^o);(゚Д゚)={゚Θ゚: '_' ,゚ω゚ノ : ((゚ω゚ノ==3) +'_') [゚Θ゚] ,゚ー゚ノ :(゚ω゚ノ+ '_')[o^_^o -(゚Θ゚)] ,゚Д゚ノ:((゚ー゚==3) +'_')[゚ー゚] }; (゚Д゚) [゚Θ゚] =((゚ω゚ノ==3) +'_') [c^_^o];(゚Д゚) ['c'] = ((゚Д゚)+'_') [ (゚ー゚)+(゚ー゚)-(゚Θ゚) ];(゚Д゚) ['o'] = ((゚Д゚)+'_') [゚Θ゚];(゚o゚)=(゚Д゚) ['c']+(゚Д゚) ['o']+(゚ω゚ノ +'_')[゚Θ゚]+ ((゚ω゚ノ==3) +'_') [゚ー゚] + ((゚Д゚) +'_') [(゚ー゚)+(゚ー゚)]+ ((゚ー゚==3) +'_') [゚Θ゚]+((゚ー゚==3) +'_') [(゚ー゚) - (゚Θ゚)]+(゚Д゚) ['c']+((゚Д゚)+'_') [(゚ー゚)+(゚ー゚)]+ (゚Д゚) ['o']+((゚ー゚==3) +'_') [゚Θ゚];(゚Д゚) ['_'] =(o^_^o) [゚o゚] [゚o゚];(゚ε゚)=((゚ー゚==3) +'_') [゚Θ゚]+ (゚Д゚) .゚Д゚ノ+((゚Д゚)+'_') [(゚ー゚) + (゚ー゚)]+((゚ー゚==3) +'_') [o^_^o -゚Θ゚]+((゚ー゚==3) +'_') [゚Θ゚]+ (゚ω゚ノ +'_') [゚Θ゚]; (゚ー゚)+=(゚Θ゚); (゚Д゚)[゚ε゚]='\\'; (゚Д゚).゚Θ゚ノ=(゚Д゚+ ゚ー゚)[o^_^o -(゚Θ゚)];(o゚ー゚o)=(゚ω゚ノ +'_')[c^_^o];(゚Д゚) [゚o゚]='\"';(゚Д゚) ['_'] ( (゚Д゚) ['_'] (゚ε゚+(゚Д゚)[゚o゚]+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚Θ゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) - (゚Θ゚))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) - (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚o゚]) (゚Θ゚)) ('_');AAEncode 解混淆的方式和 JJEncode 類似,很簡單,以下介紹幾種常見的方法:
逆向參數
逆向的目標主要是翻頁接口 _signature 參數,調用的加密方法仍然是 window.get_sign(),和前面兩題是一樣的,本文不再贅述,不清楚的可以去看 K 哥上期的文章。
繼續跟進,會發現是一個顏文字的 AAEncode 混淆:
我們將這段代碼復制出來,去掉末尾的 ('_'),直接放到瀏覽器控制臺運行一下(建議單開一個無痕窗口,有時候可能會有影響),就可以看到源碼了,點擊源碼來到虛擬機(VM),整個源碼就展現在我們面前了:
除了直接去掉 ('_') 運行以外,我們還可以在混淆代碼第一行下斷點,然后單步跟進,最后同樣也會得到源碼,如下圖所示:
觀察一下代碼,有一個 Hook window.sign 操作,還有 delete 操作,然后接著是一個 DES 加密的函數,后面的 try-catch 語句設置一些 key 之類的參數,重點是 try-catch 語句,下斷點看看實際是走的哪條語句:
其他邏輯我們并不用關心,直接把 try 語句 copy 出來,不讓它走異常即可,DES 直接調用 crypto-js 即可,本地改寫之后,配合 Python 代碼攜帶 _signature 挨個計算每一頁的數據,最終提交成功:
完整代碼
GitHub 關注 K 哥爬蟲,持續分享爬蟲相關代碼!歡迎 star !https://github.com/kgepachong/
以下只演示部分關鍵代碼,不能直接運行! 完整代碼倉庫地址:https://github.com/kgepachong/crawler/
JavaScript 加密代碼
/* ================================== # @Time : 2021-12-13 # @Author : 微信公眾號:K哥爬蟲 # @FileName: challenge_3.js # @Software: PyCharm # ================================== */var CryptoJS = require('crypto-js')function encryptByDES(message, key) {var keyHex = CryptoJS.enc.Utf8.parse(key);var encrypted = CryptoJS.DES.encrypt(message, keyHex, {mode: CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7});return encrypted.ciphertext.toString(); }function getSign() {var message = "http://spider.wangluozhe.com/challenge/3";message = message + '|' + Date.parse(new Date()).toString();var key = Date.parse(new Date()).toString();return encryptByDES(message, key); }// 測試輸出 // console.log(getSign())Python 計算關鍵代碼
# ================================== # --*-- coding: utf-8 --*-- # @Time : 2021-12-13 # @Author : 微信公眾號:K哥爬蟲 # @FileName: challenge_3.py # @Software: PyCharm # ==================================import execjs import requestschallenge_api = "http://spider.wangluozhe.com/challenge/api/3" headers = {"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8","Cookie": "將 cookie 值改為你自己的!","Host": "spider.wangluozhe.com","Origin": "http://spider.wangluozhe.com","Referer": "http://spider.wangluozhe.com/challenge/2","User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36","X-Requested-With": "XMLHttpRequest" }def get_signature():with open('challenge_3.js', 'r', encoding='utf-8') as f:ppdai_js = execjs.compile(f.read())signature = ppdai_js.call("getSign")print("signature: ", signature)return signaturedef main():result = 0for page in range(1, 101):data = {"page": page,"count": 10,"_signature": get_signature()}response = requests.post(url=challenge_api, headers=headers, data=data).json()for d in response["data"]:result += d["value"]print("結果為: ", result)if __name__ == '__main__':main() 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的【JS 逆向百例】网洛者反爬练习平台第三题:AAEncode 加密的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 兆芯新一代x86处理器跑分曝光:接近AM
- 下一篇: PWN-PRACTICE-BUUCTF-