混淆是一种方法,但它不能防止破坏应用程序的盗版保护安全性。如何确保应用程序不被篡改,如何确保注册机制不会被逆向工程?

此外,还可以将c#应用程序转换为本机代码,而Xenocode的成本太高。

c#提供了很多特性,是编写代码的理想语言,所以用c++重新编写整个代码库是不可能的。

安全证书可以很容易地从. net中的签名程序集中删除。


当前回答

我认为这个话题主要有两个方面。

A) .NET只是反向工程而不是原生的吗?

B)我们是什么类型的程序员?

标题: 保护.NET代码不受逆向工程的影响

我的观点:

Least preference to make commercial application in .NET, because it will expose even your comments on the built binary after decompile. (I don't know what is the logic to include the comments also with binary) So any one can just decompile it, rename/modify/change the look and resell the application in 24 hours. In native application rename/modify/change of look is not possible as easy as one could do in .NET Worried part in .NET is that you could get the whole project with solution from a single binary exe/dll.

想象一下现在的安全状况有多糟糕。 因此,即使是外行也可以轻松地对. net应用程序进行逆向工程。

如果它是本地应用程序,如c++ /VB6/Delphi,只有知道ASM的专家破解者才能修补exe,而不是像。net那样100%逆向工程。

但是现在整个世界都在使用。net,因为用它的高级特性和库很容易做项目。

好消息是,微软似乎在2020年支持。net的本地输出,这将使像我这样的程序员考虑将。net c#作为主要语言。

https://www.codeproject.com/Articles/5262251/Generate-Native-Executable-from-NET-Core-3-1-Proje?msg=5755590#xx5755590xx

其他回答

是的。如果代码没有混淆,. net代码非常容易进行逆向工程。

混淆将给试图逆向工程您的软件的人增加一层烦恼。根据你得到的版本不同,你会得到不同程度的保护。

Visual Studio包括Dotfuscator的一个版本。因为它是一个捆绑版本,你肯定不会得到最强烈的混淆。如果您查看它们的特性列表,就会清楚地看到您遗漏了什么(以及应用程序将如何使您的代码更安全)。

还有其他一些免费或开源的。net混淆器(但我不能评论它们的质量或使用的各种方法):

Obfuscar 巴别塔。网上

最后,没有什么是完美的。如果有人真的想看看你的软件是如何工作的,他们会的。

你无法阻止别人破解你的软件。

However, you can make them create cracks that will hurt your sales less. Keygenerators that can issue a valid registration code for your software are much worse than simple patches that remove registration incentives from your software. That's because a crack will work for one software version only, and will cease to work with the next software update you release. The keygenerator will continue to work until you change your registration key algorithm and that's something you don't want to do often because it will put off your honest clients.

因此,如果您正在寻找一种方法来对抗非法的密钥生成器,并且您不想使用不对称加密,因为这会生成很长的注册码,您可以看看部分密钥验证。

Partial Key Verification makes sure that each illegal keygenerator works only for one particular release of your software. Basically what you do is to make sure that each release of your software only links with the code for checking SOME digits of the registration code. Which digits exactly is random, so crackers would have to reverse engineer many different versions of your software and combine all this into one keygenerator in order to release a keygenerator that works for all versions of your software.

如果你定期发布新的软件版本,这将导致大量的密钥生成器散布在各种软件盗版档案中,这些文件不再工作。潜在的软件盗版者通常会寻找最新版本的破解或关键元素,所以他们可能会尝试其中的一些,并最终放弃。

我在我的(c++)新共享游戏中使用了部分密钥验证,它非常有效。之前我们遇到了很多无法对抗的关键生成器问题。后来出现了许多漏洞,一些按键生成器只适用于特定版本的游戏,但没有一个按键生成器适用于所有版本。我们定期发布游戏的小更新,让之前存在的所有漏洞都变得无用。

似乎有一个用于部分密钥验证的开源。net框架,尽管我还没有尝试过。

如何确保应用程序不被篡改,以及如何确保注册机制不会被逆向工程。

两者都有一个非常简单的答案:不要把目标代码交给不可信的一方,比如(显然)你的客户。在您的机器上托管应用程序是否可行只取决于它的功能。

如果它不是一个web应用程序,也许你可以允许SSH登录,X转发到应用服务器(或者远程桌面连接,我猜,对于Windows)。

如果你把目标代码交给书呆子,而他们认为破解你的程序可能很有趣,那么它就会被破解。没有办法。

如果你不相信我,那就指出一个没有被破解和盗版的引人注目的应用程序。

如果你使用硬件键,它会使生产成本更高,你的用户会因此讨厌你。在地板上爬来爬去,插拔你27个不同的USB设备,这真是个婊子,因为软件制造商不信任你(我想)。

有一些包可以加密你的EXE,并在允许用户使用它时解密它

当然,绕过它的方法是破解“我能使用它吗”测试,以便它总是返回true。

一个令人讨厌的技巧可能是以一种肮脏的方式在程序的其他地方使用执行测试的操作码的字节值,这将使程序很可能崩溃,除非值刚刚好。它让你链接到一个特定的架构,尽管:-(

这真的值得吗?只要有足够的决心,任何保护机制都可以被打破。考虑你的市场、产品价格、客户数量等。

如果您想要更可靠的东西,那么就使用硬件键,但这相当麻烦(对用户来说),而且成本更高。软件解决方案可能会浪费时间和资源,它们唯一会给你的是一种虚假的“安全感”。

还有一些想法(没有一个是完美的,因为没有完美的人)。

AntiDuplicate 改变语言,使用Skype的作者使用的好技巧 许可证服务器

不要在这上面浪费太多时间,因为破解者在典型技术方面有很多经验,比你领先几步。除非你想使用大量的资源,可能会改变编程语言(做Skype的方式)。

Use online update to block those unlicensed copies. Verify serial number from different modules of your application and do not use a single function call to do the verification (so that crackers cannot bypass the verification easily). Not only check serial number at startup, do the verification while saving data, do it every Friday evening, do it when user is idle ... Verify application file check sum, store your security check sum in different places. Don't go too far on these kind of tricks, make sure your application never crash/get into malfunction while verifying registration code. Build a useful app for users is much more important than make a unbreakable binary for crackers.