JSnaughty: Recovering Clear, Natural Identifiers from Obfuscated JS Names

向日葵*1發表於2024-04-15

發表:FSE,2017,卡內基梅隆大學, Bogdan Vasilescu團隊(https://bvasiles.github.io/);加利福尼亞大學戴維斯分校,Casey Casalnuovo團隊(https://caseycas.github.io/)和 Premkumar Devanbu團隊(https://web.cs.ucdavis.edu/~devanbu/)(https://cmustrudel.github.io/projects/jsnaughty/),

開源:https://cmustrudel.github.io/projects/jsnaughty/ (工具現已停用,程式碼開源,提供docker映象)

內容概括

  本文描述了一種基於統計機器翻譯(SMT)的方法AUTONYM,加入JSNice互補,恢復被UglifyJS混淆的JS程式中的識別符號名稱。

  整個架構圖如下:


JSnaughty: Recovering Clear, Natural Identifiers from Obfuscated JS Names

  insight:要猜測被混淆的識別符號w的明確、自然的名字v,我們所要做的就是根據w出現的上下文k(變數作用域資訊)來猜測最有可能的名字。

  方法:使用一個JS混淆器(UglifyJS)生成大量pair(源JS-混淆JS)訓練資料,在一個現成的SMT系統(MoSeS)訓練。

  挑戰:(1)inconsistency. 預設情況下Moses獨立地翻譯每一行,沒有內在機制確保不同行的相同識別符號名稱的一致恢復;(2)ambiguity. 存在多個不同作用域中重複使用同一簡化名稱來命名不同變數,即“超載”問題;(例如:function Vec(x,y)被混淆為function t(t,n))
  解決方法:(1)後處理部分,包括兩部分;第一,COMPUTECANDIDATENAMES ,接受一個標記化輸入檔案,並使用 MosE 將每個輸入行反混淆,收集所有由 MosE 建議用於給定簡化的任何名稱的所有可能重新命名,並且將JSNice預測出的名稱加入候選列表;第二,RANKCANDIDATES,對每個識別符號名稱的一組候選名稱進行排序,計算它們在將要使用的上下文中的“naturaless score”(透過語言模型得到),並且設計遍歷名稱的順序,優先出現頻率高,候選名稱少的識別符號。
(2)前處理部分,結合作用域資訊,對簡化名稱進行雜湊重新命名;
JSnaughty: Recovering Clear, Natural Identifiers from Obfuscated JS Names
  評估:效能指標是每種技術恢復原始識別符號名稱的百分比;(UGlifyJS主要混淆區域性變數,單獨分析)
JSnaughty: Recovering Clear, Natural Identifiers from Obfuscated JS Names

相關文章