Facebook推出語(yǔ)言模型DOBF 專治代碼混淆

發(fā)布時(shí)間:2021-08-25 13:34:37  |  來(lái)源:量子位  

有的人能把代碼寫(xiě)成推理小說(shuō)。需要一個(gè)臨時(shí)變量的時(shí)候就叫 temp,需要多個(gè)就叫 var1,var2。甚至用拼音縮寫(xiě)當(dāng)函數(shù)名,比如查詢訂單就叫 cxdd。

要想看懂這樣的代碼,得聯(lián)系上下文反復(fù)推敲,還原每個(gè)部分的真實(shí)作用。

這個(gè)過(guò)程叫做反混淆 (Deobfuscation)。麻煩,著實(shí)麻煩。就沒(méi)有省事兒點(diǎn)的辦法嗎?

讓 AI 來(lái)啊!

最近,F(xiàn)acebook 就出了這樣一個(gè)語(yǔ)言模型 DOBF,專治代碼混淆。像下圖這種,所有不影響運(yùn)行的變量名、函數(shù)名、類名,都被替換成無(wú)意義的符號(hào),AI 都能作出猜測(cè)并嘗試還原。

來(lái)看看和正確答案的對(duì)比,雖然不是完全一樣,但 AI 的改法也大大提高了代碼的可讀性。

像 FUNC_0,源代碼中是“重置參數(shù)”,AI 改成“初始化權(quán)重”,也完全說(shuō)得通。

DOBF 模型目前除了 Python 還支持 C++ 和 Java。

編碼不規(guī)范的人畢竟是少數(shù),這個(gè)模型更廣泛的用途是恢復(fù)故意做混淆以保護(hù)知識(shí)產(chǎn)權(quán)的代碼,比如這種:

代碼寫(xiě)好后,把不影響編譯運(yùn)行的部分,批量替換成人類難以分辨的符號(hào),給破譯增加難度。

在這之前也有掩碼語(yǔ)言模型 (Masked Language Model) 用于恢復(fù)被遮蔽的文本。

用于恢復(fù)代碼的有哈工大 & 微軟開(kāi)發(fā)的 CodeBERT 和 Facebook 之前開(kāi)發(fā)的 TransCoder,但效果都不如最新的 DOBF。

DOBF 超過(guò)它們靠的不是模型架構(gòu)上的創(chuàng)新或數(shù)據(jù)集的完善,而是提出了新的預(yù)訓(xùn)練任務(wù)。

合理的任務(wù)指導(dǎo) AI 學(xué)習(xí)

之前的掩碼語(yǔ)言模型多是隨機(jī)選擇要掩蔽的部分,經(jīng)常會(huì)選到括號(hào)逗號(hào)這種對(duì) AI 來(lái)說(shuō)沒(méi)什么難度的。

DOBF 的做法是指定遮蔽變量名、函數(shù)名和類名并讓 AI 去恢復(fù),這個(gè)任務(wù)難度更大,能迫使 AI 學(xué)到更深層的規(guī)律。

另外還用相同的符號(hào)替代多次出現(xiàn)的同一名稱,這樣可以防止 AI 發(fā)現(xiàn)有的名字可以復(fù)制粘貼之后學(xué)會(huì)偷懶走捷徑。

像上圖中的變量 V3,AI 從第 3 行的定義可以看出這個(gè)變量是 List 類型,再一看第 5 行調(diào)用的是 pop (0)。這不是先進(jìn)先出嘛,AI 就會(huì)命名成 queue (隊(duì)列) 而不是 stack (堆棧) 了。更厲害的還在后面,DOBF 通過(guò)代碼內(nèi)容甚至能判斷出相應(yīng)函數(shù)是生成斐波那契數(shù)列和做向量點(diǎn)積的。

DOBF 在架構(gòu)上其實(shí)沒(méi)有特別的設(shè)計(jì),只是為了公平對(duì)比分別訓(xùn)練了兩個(gè)和 CodeBERT、TransCoder 層數(shù)一樣的模型。成功的關(guān)鍵之處就在于合理的訓(xùn)練任務(wù)。微調(diào)一下能完成更多任務(wù)驗(yàn)證了這個(gè)方法有效后,F(xiàn)acebook 把這個(gè)訓(xùn)練任務(wù)提取出來(lái)稱為 DOBF 任務(wù),還可以用于訓(xùn)練其他語(yǔ)言模型。比如在 TransCoder 模型上把 DOBF 作為預(yù)訓(xùn)練任務(wù),再用 CodeXGLUE 基準(zhǔn)測(cè)試中的下游任務(wù)進(jìn)行微調(diào)。結(jié)果在代碼抄襲檢測(cè)、總結(jié)代碼生成文檔、和自然語(yǔ)言搜索代碼片段這 3 個(gè)任務(wù)上,使用 DOBF 或 MLM+DOBF 預(yù)訓(xùn)練都取得了更好的成績(jī)。

Facebook 下一步還要以 DOBF 作為指導(dǎo),看看能不能為自然語(yǔ)言設(shè)計(jì)更好的預(yù)訓(xùn)練目標(biāo)。不過(guò)代碼上的事還不算完,人類在混淆代碼上可是無(wú)所不用其極的。期待著有一天,AI 連國(guó)際 C 語(yǔ)言混亂代碼大賽上的變態(tài)代碼也能看懂。

關(guān)鍵詞: Facebook 語(yǔ)言模型 代碼混淆 DOBF

 

網(wǎng)站介紹  |  版權(quán)說(shuō)明  |  聯(lián)系我們  |  網(wǎng)站地圖 

星際派備案號(hào):京ICP備2022016840號(hào)-16 營(yíng)業(yè)執(zhí)照公示信息版權(quán)所有 郵箱聯(lián)系:920 891 263@qq.com