为什么要做代码保护?
为了保护知识产权并让攻击者的利用更加困难,组织应该为其软件的逆向工程设置障碍(例如,反篡改、调试保护、反盗版特性、运行时完整性),增加攻击者分析和利用你的软件所需的投入。代码保护对于广泛分布的代码尤其重要,例如分布在浏览器上的移动应用程序和JavaScript。
混淆技术obfuscation techniques
对于某些软件,混淆技术可以作为产品构建和发布过程的一部分加以应用。在其他情况下,当应用程序在部署后动态重新生成时,可以在软件定义网络或软件编排层应用这些保护。
有各种各样的混淆技术可用,包括重命名变量和函数、添加冗余或无意义的代码、更改控制流和加密字符串。根据您的软件和威胁模型,您应该选择能够提供足够级别的保护而不会显著影响性能或可维护性的技术。
并非代码的所有部分都需要混淆。重点关注混淆关键部分,例如身份验证机制、敏感算法和专有逻辑。不太关键的部分,如UI组件或实用程序功能,可能不需要相同级别的混淆。
混淆工具
Proguard: Java Obfuscator and Android App Optimizer | ProGuard (guardsquare.com)
保护代码的完整性
这也是IEC62443 4-1的要求之一
代码签名:代码签名包括对可执行文件和脚本进行数字签名。这提供了一种验证代码的真实性和完整性的方法。用户可以检查数字签名,以确保代码在签名后没有被篡改。使用允许组织证明重要代码的来源、完整性和授权的代码保护机制(例如,代码签名)。