📜  什么是混淆?(1)

📅  最后修改于: 2023-12-03 15:06:27.224000             🧑  作者: Mango

什么是混淆?

混淆(Obfuscation)是指在代码中添加一些无意义的语句、变量名等,以达到混淆代码结构、降低代码可读性的目的。在软件开发中,混淆可用于保护代码的知识产权,防止反编译、破解等行为。

为什么需要进行混淆?
  • 保护知识产权:混淆可使代码难以阅读和理解,从而增加了盗用者复制程序的难度。
  • 安全性:混淆可减少攻击者对代码的了解,从而增加了攻击的难度。
  • 加速代码执行:混淆后,程序文件变小,可以减少磁盘IO和网络传输,加快代码执行速度。
常见的混淆技术
字符串混淆

将代码中的常量字符串转为用变量表示的形式。例如:

String password = "123456";

混淆后变为:

String a = "123";
String b = "456";
String password = a + b;
控制流混淆

通过改变代码流程,增加代码的阅读难度。例如:

if(a == 1) {
    // do something
} else if(a == 2) {
    // do something else
} else {
    // do other thing
}

混淆后变为:

switch((int) (((a & 0x0000FF) << 24) | ((a & 0x00FF00) << 8) | ((a & 0xFF0000) >>> 16)) % 3) {
    case 0:
        // do something
        break;
    case 1:
        // do something else
        break;
    case 2:
        // do other thing
        break;
}
变量名混淆

通过修改变量名使得源代码难以理解,例如:

int a = 10;
int b = 20;
int sum = a + b;

混淆后变为:

int d = 10;
int e = 20;
int f = d + e;
常见的混淆工具
  • ProGuard:免费且开源的混淆工具,支持多种语言和多种代码格式。
  • DexGuard:基于ProGuard的商业混淆工具,支持Android平台。
  • ConfuserEx:免费且开源的.NET混淆工具。
  • JavaScript Obfuscator:免费的JavaScript混淆工具。
参考资料