代碼混淆

代碼混淆  是將計算機程序的源代碼或機器碼 ， 轉換成功能上等價 ， 但是難於閱讀和理解的形式的行爲 。 代碼混淆可以用於程序源代碼 ， 也可以用於程序編譯而成的中間代碼 。 執行代碼混淆的程序被稱作代碼混淆器 。 目前已經存在許多種功能各異的代碼混淆器 。 其主要工作有 ： 將代碼中的各種元素 ， 如變量 、 函數 、 類的名字改寫成無意義的名字 。 比如改寫成單個字母 ， 或是簡短的無意義字母組合 ， 甚至改寫成 “ __ ” 這樣的符號 ， 使得閱讀的人無法根據名字猜測其用途 。 重寫代碼中的部分邏輯 ， 將其變成功能上等價 、 但是更難理解的形式 。 比如將for循環改寫成while循環 、 將循環改寫成遞歸 、 精簡中間變量 ， 等等 。 打亂代碼的格式 。 比如刪除空格 、 將多行代碼擠到一行中 、 或者將一行代碼斷成多行等等 。 添加花指令 ， 通過特殊構造的指令來使得反彙編器出錯 ， 進而干擾反編譯工作的進行 。 代碼混淆器也會帶來一些問題 。 主要的問題包括 ： 被混淆的代碼難於理解 ， 因此調試也變得困難起來 。 開發人員通常需要保留原始的未混淆的代碼用於調試 。 對於支持反射的語言 ， 代碼混淆有可能與反射發生衝突 。 代碼混淆並不能真正阻止反向工程 ， 只能增大其難度 。 因此 ， 對於對安全性要求很高的場合 ， 僅僅使用代碼混淆並不能保證源代碼的安全 。