代码混淆

代码混淆（）是将计算机程序的源代码或機器碼，转换成功能上等价，但是难于阅读和理解的形式的行为。

代码混淆可以用于程序源代码，也可以用于程序编译而成的中间代码。执行代码混淆的程序被称作代码混淆器。目前已经存在许多种功能各异的代码混淆器。

其主要工作有：
 将代码中的各种元素，如变量、函数、类的名字改写成无意义的名字。比如改写成单个字母，或是简短的无意义字母组合，甚至改写成“__”这样的符号，使得阅读的人无法根据名字猜测其用途。
 重写代码中的部分逻辑，将其变成功能上等价、但是更难理解的形式。比如将for循环改写成while循环、将循环改写成递归、精简中间变量，等等。
 打乱代码的格式。比如删除空格、将多行代码挤到一行中、或者将一行代码断成多行等等。
 添加花指令，通过特殊构造的指令来使得反編譯器或反汇编器出错，进而干扰反编译工作的进行。

代码混淆器也会带来一些问题。主要的问题包括：

 被混淆的代码难于理解，因此调试也变得困难起来。开发人员通常需要保留原始的未混淆的代码用于调试。
 对于支持反射的语言，代码混淆有可能与反射发生冲突。
 代码混淆并不能真正阻止反向工程，只能增大其难度。因此，对于对安全性要求很高的场合，仅仅使用代码混淆并不能保证源代码的安全。

 白盒密码 
白盒密码（）是指够抵抗白盒攻击的密码算法，以及对应实现。常见的实现方式是借助高强度的代码及算法混淆。Chow S, Eisen P, Johnson H, et al. A white-box DES implementation for DRM applications[M]//Digital Rights Management. Springer Berlin Heidelberg, 2002: 1-15.林婷婷, 来学嘉. 白盒密码研究 [J]. 密码学报, 2015, 2(3): 258-267.

参考文献

 外部链接 
 Javascript 代码混淆器 on GitHub 
 JavaScript Obfuscator Tool

Daimahunxiao
Category:辨识混淆

es:Ofuscación#Informática