真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

【JS 逆向百例】網(wǎng)洛者反爬練習(xí)平臺第三題:AAEncode 加密

創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站設(shè)計、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的右江網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

關(guān)注微信公眾號:K哥爬蟲,持續(xù)分享爬蟲進(jìn)階、JS/安卓逆向等技術(shù)干貨!

聲明

本文章中所有內(nèi)容僅供學(xué)習(xí)交流,抓包內(nèi)容、敏感網(wǎng)址、數(shù)據(jù)接口均已做脫敏處理,嚴(yán)禁用于商業(yè)用途和非法用途,否則由此產(chǎn)生的一切后果均與作者無關(guān),若有侵權(quán),請聯(lián)系我立即刪除!

逆向目標(biāo)

  • 目標(biāo):網(wǎng)洛者反反爬蟲練習(xí)平臺第三題:AAEncode 加密
  • 鏈接:http://spider.wangluozhe.com/challenge/3
  • 簡介:本題仍然是要求采集100頁的全部數(shù)字,并計算所有數(shù)據(jù)加和,需要摳出源碼進(jìn)行計算,主要使用了 AAEncode 加密

AAEncode 簡介

AAEncode 和 JJEncode 都是同一個作者:日本的 Yosuke HASEGAWA ,AAEncode 可以將任何 JavaScript 代碼編碼為日式表情符號,在線體驗(yàn)地址:https://utf-8.jp/public/aaencode.html 。

正常的一段 JS 代碼:

alert("Hello, JavaScript" )

經(jīng)過 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 類似,很簡單,以下介紹幾種常見的方法:

  1. 使用在線工具直接解密,比如:http://www.hiencode.com/aaencode.html ;
  2. 去掉代碼最后一個符號 ('_') 后,放到瀏覽器里面去直接執(zhí)行就可以看到源碼;
  3. 在線調(diào)試,在 AAEncode 代碼第一行下斷點(diǎn),然后一步一步執(zhí)行,最終也會在虛擬機(jī)(VM)里看到源碼;

逆向參數(shù)

逆向的目標(biāo)主要是翻頁接口 _signature 參數(shù),調(diào)用的加密方法仍然是 window.get_sign(),和前面兩題是一樣的,本文不再贅述,不清楚的可以去看 K 哥上期的文章。

繼續(xù)跟進(jìn),會發(fā)現(xiàn)是一個顏文字的 AAEncode 混淆:

我們將這段代碼復(fù)制出來,去掉末尾的 ('_'),直接放到瀏覽器控制臺運(yùn)行一下(建議單開一個無痕窗口,有時候可能會有影響),就可以看到源碼了,點(diǎn)擊源碼來到虛擬機(jī)(VM),整個源碼就展現(xiàn)在我們面前了:

除了直接去掉 ('_') 運(yùn)行以外,我們還可以在混淆代碼第一行下斷點(diǎn),然后單步跟進(jìn),最后同樣也會得到源碼,如下圖所示:

觀察一下代碼,有一個 Hook window.sign 操作,還有 delete 操作,然后接著是一個 DES 加密的函數(shù),后面的 try-catch 語句設(shè)置一些 key 之類的參數(shù),重點(diǎn)是 try-catch 語句,下斷點(diǎn)看看實(shí)際是走的哪條語句:

其他邏輯我們并不用關(guān)心,直接把 try 語句 copy 出來,不讓它走異常即可,DES 直接調(diào)用 crypto-js 即可,本地改寫之后,配合 Python 代碼攜帶 _signature 挨個計算每一頁的數(shù)據(jù),最終提交成功:

完整代碼

GitHub 關(guān)注 K 哥爬蟲,持續(xù)分享爬蟲相關(guān)代碼!歡迎 star !https://github.com/kgepachong/

以下只演示部分關(guān)鍵代碼,不能直接運(yùn)行! 完整代碼倉庫地址: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 計算關(guān)鍵代碼

# ==================================
# --*-- coding: utf-8 --*--
# @Time    : 2021-12-13
# @Author  : 微信公眾號:K哥爬蟲
# @FileName: challenge_3.py
# @Software: PyCharm
# ==================================


import execjs
import requests


challenge_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 signature


def main():
    result = 0
    for 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("結(jié)果為: ", result)


if __name__ == '__main__':
    main()


當(dāng)前標(biāo)題:【JS 逆向百例】網(wǎng)洛者反爬練習(xí)平臺第三題:AAEncode 加密
分享鏈接:http://weahome.cn/article/dsojcsi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部