我正在研究应用程序的许可证密钥的最佳加密,有人说有人可以轻松地反编译应用程序,然后只是跳过许可证密钥的测试.
实际上,有人会如何做到这一点?所以他们有我的.dll,他们必须以某种方式反编译,然后注释掉函数调用以检查许可证,然后重新编译它?反编译器必须非常好,以便代码仍然可以编译!
尝试使用Reflector打开您的应用程序.你可能会感到惊讶:-)
一旦一个破解者在你的代码中找到了正确的位置,他们就可以使用ildasm/ilasm的组合从你的应用程序中删除检查 - 即使代码Reflector生成也不会编译.
如果源代码是正常编译的,那么反编译.NET程序集非常容易.
您可以使用最初由Lutz Roeder开发的.NET Reflector,现在由Redgate Software提供支持.这个答案的底部有一个截图,让您了解Reflector的作用.
您可以浏览命名空间和类,并查看您喜欢的.NET语言中的源代码和方法.Denis Bauer的FileDisassembler将允许您(或您的情况下的恶意黑客)将其转换为VS解决方案并对程序进行修改.
有一些对策,比如使用代码混淆器来使代码几乎不可读.
关于这个主题,StackOverflow还有一些其他有趣的问题:
你应该混淆商业.Net应用程序吗?
如何将.NET EXE反编译为可读的C#源代码?
最好的.NET混淆工具/策略
用于许可证密钥的.NET加密?
Reflector的屏幕截图:
Josh Smith 最近还发布了Crack.NET,它可以用来附加到正在运行的.NET进程,然后在Reflector中打开它- 所以即使磁盘上的程序集以某种方式加密(以避免人们使用Reflector来获取它们) ,他们仍然可以使用内存版本