代碼混淆
代碼混淆(Obfuscation)是將電腦程式的原始碼或機械碼,轉換成功能上等價,但是難於閱讀和理解的形式的行為。
代碼混淆可以用於程式原始碼,也可以用於程式編譯而成的中間代碼。執行代碼混淆的程式被稱作代碼混淆器。目前已經存在許多種功能各異的代碼混淆器。
其主要工作有:
- 將代碼中的各種元素,如變數、函數、類的名字覆寫成無意義的名字。比如覆寫成單個字母,或是簡短的無意義字母組合,甚至覆寫成「__」這樣的符號,使得閱讀的人無法根據名字猜測其用途。
- 重寫代碼中的部分邏輯,將其變成功能上等價、但是更難理解的形式。比如將for迴圈覆寫成while迴圈、將迴圈覆寫成遞歸、精簡中間變數,等等。
- 打亂代碼的格式。比如刪除空格、將多行代碼擠到一行中、或者將一行代碼斷成多行等等。
- 添加花指令,通過特殊構造的指令來使得反編譯器或反組譯器出錯,進而干擾反編譯工作的進行。
代碼混淆器也會帶來一些問題。主要的問題包括:
白盒密碼
白盒密碼( White-box cryptography)是指夠抵抗白盒攻擊的密碼演算法,以及對應實現。常見的實現方式是藉助高強度的代碼及演算法混淆。[1][2]