代码混淆
代码混淆(Obfuscation)是将电脑程序的原始码或机器代码,转换成功能上等价,但是难于阅读和理解的形式的行为。
代码混淆可以用于程序原始码,也可以用于程序编译而成的中间代码。执行代码混淆的程序被称作代码混淆器。目前已经存在许多种功能各异的代码混淆器。
其主要工作有:
- 将代码中的各种元素,如变量、函数、类的名字改写成无意义的名字。比如改写成单个字母,或是简短的无意义字母组合,甚至改写成“__”这样的符号,使得阅读的人无法根据名字猜测其用途。
- 重写代码中的部分逻辑,将其变成功能上等价、但是更难理解的形式。比如将for循环改写成while循环、将循环改写成递归、精简中间变量,等等。
- 打乱代码的格式。比如删除空格、将多行代码挤到一行中、或者将一行代码断成多行等等。
- 添加花指令,通过特殊构造的指令来使得反编译器或反汇编器出错,进而干扰反编译工作的进行。
代码混淆器也会带来一些问题。主要的问题包括:
白盒密码
白盒密码( White-box cryptography)是指够抵抗白盒攻击的密码算法,以及对应实现。常见的实现方式是借助高强度的代码及算法混淆。[1][2]