- 資料獲取
(1)公開JS資料集,比如CodeSearchNet;
(2)自行構建JS資料集,爬取Github開源前端專案;
- 資料描述
Github中採集前端專案檔案分類如下,從中提取JS檔案
- 資料預處理
其中比較重要的步驟:
(1)程式碼混淆:使用現有工具,如UglifyJS、Terser、babel-minify、JS-Obfuscator;
以UglifyJS為例,結果如下(混淆前-->混淆後);
(2)變數名提取:包括靜態解析和動態分析兩種方法;透過靜態解析的方式可遞迴遍歷抽象語法樹節點以提取程式碼中定義的變數名。靜態解析的一種常用方法如下:
採用DTW演算法,透過宣告變數的節點到抽象語法樹根節點的路徑來表徵該變數,然後計算原始程式碼的抽象語法樹變數路徑和混淆程式碼抽象語法樹 中變數表徵路徑的相似度來進行變數名匹配, 以此建立變數名對映表(即原始變數 名和混淆變數名構成的鍵值對), 同時在此過程中丟棄不包含變數名的函式。