第二章 研究背景
2.1 程式碼混淆
Savio 等對程式碼混淆的調查[19]中,將程式碼混淆的技巧分成四大類,包 括程式重新排版、資料抽象化、控制流程轉換及程序抽象化,這些混淆演算法可
2https://github.com/QQuick/Opy/blob/master/opy/opy.py,Python 名稱混淆工具
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
組碼,由不同平台上的Java 虛擬機器來解釋並執行位元組碼。使用者也能依據 這樣的概念建立自訂的指令集架構,接著製作特定的直譯器來解譯程式。
圖1: Opy 混淆實例
透過在原始碼中嵌入自製的直譯器來解譯轉換後的程式來實現上述以自訂 的指令集架構運行的作法,相當於另程式添加額外一層解譯程序( interpretation )
,增加每層解譯程序包含隨機產生一套指令集架構、將原程式轉換至採用該指 令集運作的版本、建立使用該指令集的直譯器。表1 列出的項目為虛擬化混淆轉 換後程式的構成元件。虛擬化混淆轉換後程式的運作方式如圖2 所示,根據虛擬 程式計數器在位元碼陣列所指的位置,調度單位指定相對應的指令處理器工作,
指令處理器使用所產生的虛擬指令集執行程式指令,過程將反覆執行直到程式 目的達成。
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
表1: 虛擬化轉換程式的組成單位
圖2: 虛擬化轉換程式運作示意圖
虛擬化混淆轉換特性讓它可以達成多種程式保護的需求。除了混淆程式內 部運作資訊、使同樣的程式可以被再製出多種版本來滿足樣性,也能讓程式不易 被竄改來確保程式的完整性。Anckaert 等的研究[1]描述了虛擬化轉換有充分的 混淆能力,例如自訂指令集的指令語意可以合併或分割而更複雜、編碼可以隱
‧
工具可分為多種類型如debuggers、profilers、tracers、emulators。使用 debugger 可以讓使用者在程式執行期間與之互動,最常見的使用方式是設定執行中斷點,這除了幫助使用者開發程式外,也讓攻擊者了解程式做了怎樣的保護設定。
profiler 的使用可以得知程式個個部分的執行次數與時間,從攻擊者的角度這可 以推測程式裡不同部分的關係。tracer 可以記錄程式執行的過程,直到程式運行 結束後再進行事後的分析。emulator 對攻擊者而言則可以作為一種特殊的 debugger 使用。
上述工具及分析分法屬於程式碼混淆在面臨Man-At-The-End ( MATE )的攻 擊時需要能有所抵抗的目標,攻擊者在程式執行環境上擁有軟硬體的控制權,在 不斷的竄改與測試下嘗試了解程式內涵。MATE 的攻擊分為兩種情形,其一是惡 意代碼( malicious code )使用來令受害者端執行潛在破壞可能的命令,其二是惡