什么是.NET
.NET 是由 Microsoft 创建的开源开发平台,用于生成多种不同类型的应用程序,主要支持C#、F#及VB。
.NET程序运行原理
.NET程序的运行是由其虚拟机CLR(公共语言运行时)把程序编译成IL中间语言,然后由CLR即时编译器JIT编译成机器代码交由CPU执行。
.NET语言开发虽有众多优点,但众所周知,其编译后的程序极易被反编译,即
使用最常规的调试工具 如Refelctor,其代码都可以被轻松反编译,也因此各种代码混淆横空出世。代码混淆技术仅能混淆加密方法名称及部分流程,并不能混淆加密代码,也不能完全隐藏程序逻辑,只是增加了阅读代码的难度,使用反混淆技术即可轻松破解还原代码。
那么如何高效安全地保护.NET程序不被反编译破解呢?我们通过德国威步的.NET代码加密技术,可窥一斑。
AxProtector .NET是一款全自动纯代码保护工具,开发者无需任何代码开发即可实现软件加密。我们将从以下四个方向了解AxProtector .NET的安全原理。
AxProtector .NET按需加解密代码原理
AxProtector .NET是实现.NET软件保护最节省时间和精力的理想解决方案。无需任何代码开发,使用AxProtector .NET,可以以全自动的方式保护.NET程序免受盗版和逆向工程的侵害。
AxProtector .NET对需要保护的软件的类和方法进行加密,并使用安全加密工具AxEngine对其进行保护。通过集成AxProtector .NET,将最佳反调试和反汇编方法注入到软件当中。
各个方法以加密的形式加载,并一直保持加密状态,直到需要调用时再在后台中自动解密。在由JIT编译器转换之后,这些方法再次从内存中删除,从而将IL代码以未加密形式花费的时间保持在最小。这对软件性能的影响可以忽略不计,以换取尽可能高的保护级别。
授权锁定阻止调试继续
每当第一次运行一个加密后的方法时,AxEngine就会被激活,其将立即查找是否有可用许可证,如有许可证可用,许可证会自动激活并用于解密相关方法。作为完整性检查的一部分,AxEngine还测试软件是否被篡改过。其使用最先进的反调试和反逆向工程方法识别各种威胁,并在发现任何此类风险时停止它。在这种情况下,软件商可以选择将许可证锁定。
AxProtector包含后台监控系统,以实现定期检查许可证、软件完整性以及是否存在威胁。
加密陷阱让破解无法深入
AxProtector .NET还提供了可选的隐藏命令,可作为额外陷阱方法添加至软件中。任何试图解密加密后的功能以达到破解目的的行为,均会误入陷阱,并触发锁定许可证的命令,用于阻止解密更多的功能。自动陷阱使得AxProtector .NET成为阻止系统分析的绝佳手段。
相比普通的混淆器,AxProtector .NET的安全加密级别更高。传统的混淆只是改变名称,并将软件扰乱为条状的代码,而AxProtector .NET则使用强大的256位AES对称算法对可执行代码进行加密。即使使用最好的破解工具也无法反编译硬盘上的程序集。受保护的代码在安全的加密狗黑箱中或windows系统服务中解密,相比.NET层面上的简单混淆更让破解者无法得逞。破解者如果没有合法授权或密钥,则无法从内存中获取代码。有了陷阱的加持,更是让方法钝化、系统化解密以及遍历方法等破解手段在实际应用中变得完全不可能。
当有陷阱被触发时,许可证被锁定,钥匙丢失,无法再进行任何其他解密尝试。AxProtector .NET与混淆器相比还有一个基本优势:函数无需重新命名,这意味着反射、远程或WCF等功能仍然可用,不会对软件的安全性造成任何影响。
通讯加密防止录制回放通讯被破解
相比使用CodeMeter Core API,使用AxProtector .NET能够以一种最小的代价达到极高的软件保护水平。当然软件商也可以选择额外使用CodeMeter Core API功能以进一步增加安全强度。比如我们可以使用Core API对数据或代码使用ECC非对称算法进行加密,从而保证通信安全。
总而言之,加密是木桶效应,安全的高低取决于短板,只有全面、整体的方案才能真正保证加密方案的安全。
德国威步的软件加密方案从软件代码加密、通讯加密及授权安全等三个方面保证安全防护做到极致。
除了高安全性之外,加密方案的兼容、稳定性及运行效率都是软件保护方案需考虑的重要因素。AxProtector .NET支持C#、.NET Core、.NET Standard以及Mono平台,并且可通过选择加密或不加密代码平衡安全性及兼容性。虽然AxProtector .NET加密的是可执行代码,对运行效率影响极小,但仍然可以通过调整加密方法,把在极端特殊情况下出现的效率影响降到最低。