溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何進(jìn)行JS逆向某驗(yàn)滑動(dòng)加密分析

發(fā)布時(shí)間:2021-12-14 11:14:27 來源:億速云 閱讀:175 作者:柒染 欄目:大數(shù)據(jù)

如何進(jìn)行JS逆向某驗(yàn)滑動(dòng)加密分析,針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。

抓包

進(jìn)入官網(wǎng),點(diǎn)擊選擇今天的主題滑動(dòng)驗(yàn)證,其他驗(yàn)證類型的加密大同小異,只要你掌握了下面的方法!

如何進(jìn)行JS逆向某驗(yàn)滑動(dòng)加密分析  

點(diǎn)擊按鈕抓包,隨意拖動(dòng)一下,請(qǐng)求數(shù)據(jù)包如下

如何進(jìn)行JS逆向某驗(yàn)滑動(dòng)加密分析  

可以看到一堆請(qǐng)求參數(shù),其實(shí)你要做的就是實(shí)現(xiàn) w 的加密

如何進(jìn)行JS逆向某驗(yàn)滑動(dòng)加密分析  

點(diǎn)擊進(jìn)去,就能看到加密的 JS 文件,為便于分析將其保存到本地。

 

AST 還原

通過調(diào)試可以看到有大量的 unicode 格式的編碼以及數(shù)組名稱的混淆

如何進(jìn)行JS逆向某驗(yàn)滑動(dòng)加密分析  

傳統(tǒng)解決方法是在瀏覽器 console 端輸入就能看到它的廬山真面目,但是這種方法太麻煩了,接下來我們用 AST 來將其還原!

首先還原 unicode 編碼,打開 AST 在線解析網(wǎng)站(https://blogz.gitee.io/ast/[1])

將待還原的代碼放進(jìn)去

如何進(jìn)行JS逆向某驗(yàn)滑動(dòng)加密分析  

可以看到只需要把 extra 屬性刪掉就能還原原來的值。遍歷代碼如下:

const parser = require("@babel/parser");
const traverse = require("@babel/traverse").default;
const t = require("@babel/types");  //操作節(jié)點(diǎn)的函數(shù),比如判斷節(jié)點(diǎn)類型,生成新的節(jié)點(diǎn)等:
const generator = require("@babel/generator").default;  //生成還原后的代碼
const fs = require('fs');

var jscode = fs.readFileSync("./slide.js", {
    encoding: "utf-8"
});
const visitor = {
        StringLiteral(path) {
                delete path.node.extra
            }
}

let ast = parser.parse(jscode);
traverse(ast, visitor);
let {code} = generator(ast, opts = {jsescOption: {"minimal": true}});
fs.writeFile('decode_slide.js', code, (err)=>{});
 

注意 jscode 就是之前扣下來的 JS 代碼, 最后將還原后的代碼寫入到 decode_slide.js 文件中

接下來是混淆數(shù)組的還原。觀察調(diào)試代碼,所有的數(shù)組都是基于 JS 文件中開頭的大數(shù)組 KBBji.$_Co,同時(shí)將該數(shù)組賦值給很多變量,這些變量名都是隨機(jī)生成的。

所以接下來我們要做的找出這些變量名稱,然后將其替換成對(duì)應(yīng)的字符串值!

AST 在線解析一下

如何進(jìn)行JS逆向某驗(yàn)滑動(dòng)加密分析  
image.png

根據(jù)解析結(jié)果,編寫相應(yīng)的遍歷代碼

const visitor = {
    VariableDeclaration(path){
        const {declarations} = path.node;
        if(!t.isMemberExpression(declarations[0].init))return;
        if(declarations[0].init.property.name !== "$_Co")return;
        if(declarations.length !==3 || declarations[0].init.property === undefined)return;
        let value1 = declarations[0].id.name;
        let value2 = declarations[2].id.name;
        new_array.push(value1, value2);
    }
};
 

上面就將所有的變量名找出來了,找到之后就能將所有的這種形式 $_DFCB(66) 代碼還原了,這樣代碼就能有個(gè)直觀感受!

如何進(jìn)行JS逆向某驗(yàn)滑動(dòng)加密分析  

相信聰明的你很快就能寫出還原的代碼。經(jīng)過上面幾步整體還原后的代碼是這樣的

如何進(jìn)行JS逆向某驗(yàn)滑動(dòng)加密分析  

根據(jù)關(guān)鍵詞很快就能搜索到加密所在位置,清晰可見!如果不還原你是搜不到的.. 還原后在網(wǎng)站上我們也能很快定位到加密位置,打上斷點(diǎn)

如何進(jìn)行JS逆向某驗(yàn)滑動(dòng)加密分析  

同樣的代碼可讀性相差多大,相信你一眼就能看到。你以為這樣就完了?No!

 

Reres 替換

既然代碼已經(jīng)還原了,但是我們?cè)诰W(wǎng)站上調(diào)試的時(shí)候還是混淆的代碼,那怎么辦呢?

接下來上另一個(gè)神器 Reres, 它的作用是將請(qǐng)求映射到本地,即你可以用本地 JS 來代替遠(yuǎn)程 JS 文件。

用法直接參考它的 github https://github.com/annnhan/ReRes[2]

好了有了這個(gè)東西,我們就能在網(wǎng)站上用還原后的 JS 來進(jìn)行調(diào)試,太強(qiáng)了把!

效果如下:

如何進(jìn)行JS逆向某驗(yàn)滑動(dòng)加密分析  

tql,這下加密參數(shù)扣起來就沒壓力了吧!

關(guān)于如何進(jìn)行JS逆向某驗(yàn)滑動(dòng)加密分析問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

js
AI