Java程式碼混亂化

Obfuscation of Java Code

朱家彥, 民國91年12月

摘要:

Java是一種全球通用的程式語言,由於使用封裝、繼承、虛擬等物件導向的機制, Java程式在閱讀與維護上的困難度均遠低於傳統程式語言(如C)的程式。 Java程式在編譯後以bytecode組成的classfile散佈。 classfile的規格是公開的,這使得釋出(release)的Java程式非常容易被反組譯, 而程式的高可讀性將使得有心人士能很容易的取得程式的核心知識, 因此避免釋出的Java程式中的核心知識被探知是必要的。

本論文提出一個系統TkJO,以單一的套件為對象, 以我們稱為反物件化(deOO)的方式對套件中的程式碼做混亂化(Obfuscate)的動作。 經TkJO處理後的Java程式結構將變為如傳統程式語言一般,可讀性將大幅降低, 進而使得程式的核心知識得到保護。

TkJO的反物件化包含五件事,(1)去除套件中介面的使用,使套件中不存在複繼承的關係, (2)去除套件中的虛擬函數與相關虛擬呼叫的存在, (3)去除套件中的建構元與相關建立類別實體的程式碼, (4)去除套件中的私有函數與相關私有函數呼叫, (5)以套件中的一個類別模擬傳統程式語言的全域, 並將所有套件中封裝於類別中的函數集中該類別中,破壞程式的封裝結構。