对,我说的是桌面应用程序中的许可证验证代码,例如方法bool ValidateLicense(string licenseCode)
。当然,任何保护方案都可以由熟练且坚定的破解者进行逆向工程。但是,我想防止任何具有一些基本编程知识的人都可以在几分钟内使用 Reflector 构建一个注册机。
可能的方法
混淆。我的理解是混淆会导致性能开销,并可能阻碍(合法的)调试。那么是否有工具允许仅对选定的方法进行混淆?
将方法移动到生成的程序集或非托管 DLL。但这不是简单地替换 DLL 的邀请吗?任何想法如何防止这种情况(阅读:让攻击者更难)?
其他?
PS:问题显然与保护 .NET 代码免受逆向工程有关?试图把那里的想法付诸实践
更新
1. 第一个混淆步骤肯定是重命名验证方法。(谢谢,乔纳森)
2. 假设应用程序使用 Win32 API 方法,可以通过非托管 DLL 重新路由调用,从而使其成为应用程序的一个组成部分。摆弄方法签名(例如更改名称、交换参数)会使这一点变得不那么明显。你认为先天的缺点是合理的吗?
到 3.不分发验证方法属于这里。将其保存在您的服务器上并远程调用,即使用在线验证(谢谢,David Hedlund)