.NET反编译,有多容易?

问题描述 投票:13回答:9

我正在研究应用程序的许可证密钥的最佳加密,有人说有人可以轻松地反编译应用程序,然后只是跳过许可证密钥的测试。

实际上,有人会如何做到这一点?所以他们有我的.dll,他们必须以某种方式反编译,然后注释掉函数调用以检查许可证,然后重新编译它?反编译器必须非常好,以便代码仍然可以编译!

.net decompiling copy-protection
9个回答
29
投票

尝试使用Reflector打开您的应用程序。你可能会感到惊讶:-)

一旦一个破解者在你的代码中找到了正确的位置,他们就可以使用ildasm / ilasm的组合从你的应用程序中删除检查 - 即使代码Reflector生成也无法编译。


14
投票

如果源代码是正常编译的,那么反编译.NET程序集非常容易。

您可以使用最初由Lutz Roeder开发的.NET Reflector,现在由Redgate Software提供支持。这个答案的底部有一个截图,让您了解Reflector的作用。

您可以浏览命名空间和类,并查看您喜欢的.NET语言中的源代码和方法。 Denis Bauer的FileDisassembler将允许您(或您的情况下的邪恶黑客)将其转换为VS解决方案并对程序进行修改。

有一些对策,比如使用代码混淆器来使代码几乎不可读。

关于这个主题,StackOverflow还有一些其他有趣的问题:

Reflector的屏幕截图:

alt text


5
投票

Josh Smith最近还发布了Crack.NET,它可以用来附加到正在运行的.NET进程,然后在Reflector中打开它 - 所以即使磁盘上的程序集以某种方式加密(以避免人们使用Reflector来获取它们),我仍然可以使用内存版本


2
投票

.NET非常容易反编译。混淆将使得理解正在发生的事情变得有点困难,但是如果某些代码是持久性的,那么反编译代码的人仍然可以解决它。

以下是我在网上找到的有关保护.NET代码的一些建议:

http://blogs.msdn.com/ericgu/archive/2004/02/24/79236.aspx

请注意,所讨论的技术都不是100%有效,它只是一个问题,即你将使饼干跳过多少箍。


2
投票

一般来说,.NET编译非常简单:要亲自体验一下,只需抓住.NET Reflector的副本并尝试一下。

在大多数情况下,没有必要重新编译代码以删除简单的许可证检查:只需修补MSIL就可以了。

保护自己免受这种情况的影响会产生迅速减少的回报:总会有人聪明地绕过你添加到代码中的任何额外检查。例如,您可以向代码添加数字签名,并拒绝运行签名不匹配(表示代码已被篡改,例如删除许可证检查)。

然后游戏将删除签名检查(除了许可证密钥检查)。因此,您添加另一个检查,然后可以绕过,等等,无限制。

有一整个行业的code obfuscatationcopy protection工具,以帮助您防御您的软件与这样的问题。您可以自行决定是否值得购买这些解决方案,以及您是否会为您的合法客户带来的烦恼......


2
投票

如果这是你想要防御的东西,你可能想要了解如何攻击它。

Greg Holland和Gary McGraw的Exploiting Software是一个很好的介绍。


2
投票

最好不要过多地使用许可证密钥技术。无论你做什么都可能被坚定的用户攻击,你冒着更大的风险来增加阻止合法用户使用你的应用程序的问题。我甚至看到用Hasp Dongles保护的代码被破解了。加密许可证密钥和混淆代码应该足以阻止机会主义者的攻击,除此之外没有什么意义。

qazxsw poi写了一篇很好的文章,涵盖了这一点,请参阅qazxsw poi of qazxsw poi


1
投票

即使没有Reflector,人们也已经这么做了很久。基本上你用调试器观看应用程序 - 像WinDBG那样 - 然后找出许可证检查何时发生。您可以观察返回值,然后只需修补应用程序即可直接跳转到“全部好”检查。

我会推荐人们上面发布的所有内容。你只需要意识到它是一个猫捉老鼠的游戏,如果你的投资回报是值得的。如果您的用户没有尝试游戏系统,那么可能会做一些简单的事情。如果你有破裂猖獗的东西,那么你将不得不考虑不同的策略并从那里开始。

您不必重新编译应用程序来修补它 - 那里存在大量的二进制修补程序工具。如果有足够的钱,它不会阻止你最坚决的破解者。


1
投票

“太”

任何类型的“标准”/通常的许可证检查机制都是自动删除工具的目标。在我反思的几个商业.NET应用程序中,这些“太微不足道”的检查看起来很常见。

最好的办法是通过使程序的一部分依赖于Web服务来保护。这不应该是过于繁琐的界面,以避免减慢执行速度,但它不应该是非常厚实的,因为这些块可能只是在“破解版本”中本地下载和缓存,除非应用程序依赖于它们经常更改。

如果您想避免网络连接(某些用途或用户可能会发现有问题/有问题取决于应用程序,除非您描述并提供价值)然后将一些程序拆分为本机dll或两个并进行许可证检查应用程序的所有部分,在本机dll中显然不那么明显,可能足以阻止大多数。

© www.soinside.com 2019 - 2024. All rights reserved.