1、什么是代码混淆:
两个关键点:
1.1、不影响原有程序正常运行
1.2、增加人阅读、理解的难度
优点:
1.1、通过对代码进行混淆,可以使代码更难读懂,增加破解的难度,进而提高代码安全性
1.2、通过压缩等方式,可以一定程度缩小代码体量
缺点:
1、过度混淆可能带来运行时错误,不便于调试、排查
2.、可能造成代码反射冲突,找不到对应类,需要正确配置规则文件
2、代码混淆不等于加密
加密是要在我们想要隐藏的东西上上锁,可以是一道锁,也可以是多道锁,而混淆则不同,在进行混淆处理时,信息将保持原样,只是以一种模糊的格式呈现出来,提高被理解或解析的复杂性。
代码混淆并不能真正防止逆向工程,只能增加难度,对于安全性要求很高的场景,仅使用代码混淆并不能保证原始代码的安全。
3、代码混淆的常见方式:
3.1、名称混淆:
将字段、方法名称更改为无意义的字符串。
3.2、代码缩减:
删除代码中对运行无用的注释、空格、换行、回车、调试信息等,减小代码体积同时降低代码中有效的信息量。
3.3、控制流混淆:
对于if, switch, while,for等关键字,对代码进行细微的修改,模糊控制流,而不改变代码在运行时的行为。流模糊的字节码通常强制反编译器将一系列标签和非法的go to语句插入到它们生成的源代码中。
3.4、数据流混淆:
对一些通用的计算,将其替换为等价的形式.比如a=b+c替换为a=b+1+c-1。
3.5、花指令:
在正常的指令序列中添加一些无用指令,对运行时无害,但是会造成逆向工具崩溃、无法反汇编,无法反编译、功能异常等。
4、java场景混淆类库
4.1、ProGuard:这是一个广泛使用的开源代码混淆工具。它可以删除无用的代码、重命名类和方法,以及重新组织代码结构,从而增加了源代码的保护程度。
4.2、Allatori:这是一个商业代码混淆工具,提供了许多高级功能,如字符串加密、控制流混淆和资源文件加密等。它还可以将类和方法名压缩为短名称,增加了破解的难度。
4.3、DashO:这是另一个商业Java代码混淆工具,具有强大的功能。它支持多种混淆技术,如类和方法的重命名、字符串加密和控制流混淆等。此外,它还提供了性能优化和错误检测功能。
标签:混淆,随手,代码,控制流,加密,源代码,难度 From: https://www.cnblogs.com/whaleX/p/18619381