這幾天看了一篇大佬寫的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太長了,我起作用的代碼扣出來。

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é)到新知識的一天。