對於js,python這類語言在執行的時候都會有乙個類似如下的過程:
詞法分析--》生成語法樹--》編譯--》執行
對於js來說,分析他的語法樹就更加容易了,因為他有封裝好的庫,可以幫助我們方便的提取出來語法樹。
要分析它首先得有他的開發環境:
1.安裝nodejs,
2.安裝vs code,方便除錯**
首先要知道下面兩個模組:
可以將原始碼提取成語法樹
語法樹還原為原始碼
具體用法看下面**:
3.開啟vs code ,建立乙個nodejs應用,如下:
控制台初始化,生成乙個package.json。
4.然後繼續安裝esprima 和 escodegen。
5.新建index.js檔案,test.js 檔案,生成test的語法樹。
編寫index指令碼,如下,除錯下可以看到語法樹已經生成,具體esprima的用法網上有很多,我這裡把它轉成json,然後看一下它的結構。
具體對照著test看一下應該就非常清晰了。
6.語法樹還原成指令碼**。
下圖中很明顯ast已經被還原成**了。
7.利用。
在我們抽取出來ast模組後就可以有一些其他的操作了,可以對語法樹的一些結構進行替換,修改等,然後就可以進行**混淆以及函式抽取等等操作了。
JS基本語法
1.1變數宣告例如 var a 100 先申請再賦值 也可以 var a 10,必須,隔開 b 10,c 可以賦值可以不賦值,但是一定要換行,最後分號結尾。宣告 賦值分解 單一var1.2 命名規則1.變數名必須以英文名 開頭 2.變數名可以包括英文本母 數字 3.不可以用系統的關鍵字 保留字作為變...
JS基本語法
語句表示式 語句表示式的區別 大小寫敏感 大部分空格沒有實際意義識別符號 命名規則if結構 if 布林值 語句 或者 if 布林值 語句 if.else結構 if m 3 else if 表示式 else if 表示式 else switch結構 不推薦用 switch fruit 三元運算子 短路...
介紹JS基本語法
表示式和語句 表示式 console.log表示式的值為函式本身 只有函式才有返回值 語句 var a 1是乙個語句 二者區別 表示式一般都有值,語句可能有也可能沒有 語句一般會改變環境 宣告 賦值 上面兩句話並不是絕對的 識別符號的規則 a 空格 大部分空格沒有實際意義 加回車大部分時候不影響,只...