某哪兒機票JS解密(5)-通過AST(抽象語法樹)反混淆JS

這幾天看了一篇大佬寫的AST文章的文章,深有感觸,今天正好拿去哪兒的JS開刀

貼上大佬鏈接:https://mp.weixin.qq.com/s/rgXdtccJrccVes-muapB1Q

去哪兒的重要加密JS都是經(jīng)過混淆的,當初反混淆去哪兒的JS,真的是搞死我了


當初正則匹配反混淆的一個小片段

我把js方法還原成python,再用正則匹配搞了半天,結(jié)果反混淆后的JS各種報錯(里面編碼、轉(zhuǎn)碼啥的不一致太多)很是苦惱。一氣之下直接不反混淆了,硬懟懟出來,但是耗時太長了,每次要看反混淆后的代碼都要在Console里面執(zhí)行一遍,再手動記錄真的很麻煩。

直到我碰到了這個方法,今天試了下,真的太好用了,謝謝大佬寫的文章。這是一種靠譜不用寫正則的方式來替換加密的字符?。?/b>

在計算機科學(xué)中,抽象語法樹(AbstractSyntax Tree,AST),或簡稱語法樹(Syntax tree),是源代碼語法結(jié)構(gòu)的一種抽象表示。它以樹狀的形式表現(xiàn)編程語言的語法結(jié)構(gòu),樹上的每個節(jié)點都表示源代碼中的一種結(jié)構(gòu)。之所以說語法是“抽象”的,是因為這里的語法并不會表示出真實語法中出現(xiàn)的每個細節(jié)

簡單來講,就是?源代碼語法結(jié)構(gòu)的一種抽象表示??梢园阉斫鉃橐豢脴洌瑯渖嫌泻芏嗟墓?jié)點。我們通過操作這些節(jié)點,對其進行增,刪,替換等操作,讓源代碼更容易閱讀和理解。


在線解析JavaScript的源碼,并生成一顆樹的網(wǎng)站:

https://astexplorer.net/


首先需要安裝依賴:npm install @babel/core

參考大佬的代碼,導(dǎo)入依賴

這次我選的JS是生成Alina Cookie的JS。通過在Initiator 里面找到生成Alina的JS

原JS太長了,我起作用的代碼扣出來。


生產(chǎn)Alina的方法

4個大數(shù)組 然后o方法是反混淆函數(shù),其他的就是和生成Alina有關(guān)的函數(shù)。

我先保存到本地 命名index.js

反混淆的思路就是先把4個數(shù)組的值還原到函數(shù)里面,再執(zhí)行o方法反混淆。

跟著大佬的思路,先引入js文件,4個數(shù)組,反混淆方法

我們先讓數(shù)組賦值,去AST解析網(wǎng)站分析一下

開始寫代碼







調(diào)用本地的數(shù)組,賦予實參。

將計算出來的結(jié)果生成一個對應(yīng)的節(jié)點,并替換掉當前的節(jié)點。

替換結(jié)束后,將處理后的AST再轉(zhuǎn)換成源代碼,并保持到新的文件中去。

然后用類似的方法即可用o方法還原混淆的字符。

對比下還原前后


還原后


還原前

簡直天差地別!

感謝大佬發(fā)表的文章,今天又是學(xué)到新知識的一天。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容