Pau*_* B. 5 .net security obfuscation
是的,我在谈论桌面应用程序中的许可证验证代码,例如方法bool ValidateLicense(string licenseCode).当然,任何保护方案都可以由技术熟练且坚定的破解者进行逆向工程.但是,我想防止具有一些基本编程知识的人可以在几分钟内使用Reflector来构建keygen.
可能的方法
混淆.我的理解是,混淆会导致性能开销并可能阻碍(合法)调试.那么是否有工具允许混淆选定的方法?
将方法移动到ngen'ed程序集或非托管DLL.但这不是简单替换DLL的邀请吗?任何想法如何防止这种情况(阅读:让攻击者更难一点)?
其他?
PS:问题显然与Protect .NET代码的逆向工程有关吗?试图把思想从那里带到实践中
UPDATE
要1.第一个混淆步骤肯定是重命名验证方法.(谢谢,乔纳森)
为2.假设应用程序使用Win32 API方法,可以通过非托管DLL重新路由调用,从而使其成为应用程序的组成部分.摆弄方法签名(例如更改名称,交换参数)会使这一点变得不那么明显.你认为天生的弊端是否合理?
要3. 不要分发验证方法属于这里.将它保存在您的服务器上并远程调用,即使用在线验证(谢谢,David Hedlund)
Eazfuscator仅允许您在 Release 中混淆代码,我们使用它并没有感觉到任何性能问题。它也可以让你混淆选定的方法。请注意,公共方法不能被混淆。
任何像 ValidateLicense 这样的函数都可以使用良好的反射器轻松修改,在第一行插入 return true :( 我向您推荐这篇关于程序集中代码注入的文章:http://www.codeproject.com/Articles/20565/Assembly-操作和 C-VB-NET 代码注入
您应该对程序集进行签名以避免修改,但是...也可以使用适当的工具删除签名:http://www.nirsoft.net/dot_net_tools/strong_name_remove.html
抱歉,在 .Net 中没有任何技巧可以避免逆向工程,你只能让事情变得更加困难。(例如,不要将函数命名为 ValidateLicense 并使您的验证逻辑有点神秘)