我希望创建包含注册算法的共享软件。我正在寻找一种不能轻易反编译成可读代码的编程语言。例如,可以将 C# 反编译为可读代码。
我有哪些选择?
编辑:我正在寻找只能反编译成程序集的东西。例如,Delphi 不能像 C# 或 Java 那样被反编译,但据我所知,Delphi 正在消亡。
我希望创建包含注册算法的共享软件。我正在寻找一种不能轻易反编译成可读代码的编程语言。例如,可以将 C# 反编译为可读代码。
我有哪些选择?
编辑:我正在寻找只能反编译成程序集的东西。例如,Delphi 不能像 C# 或 Java 那样被反编译,但据我所知,Delphi 正在消亡。
Delphi 没有死,它还活着,而且很好。
与社区一样,在delphifeeds。
您还可以在Delphi Wikia上看到更多的 delphi 项目、免费软件、共享软件和商业软件。
因此,我会说 Delphi 是软件开发的一个非常好的选择。免费软件、共享软件或商业软件。
更新:2011 年 9 月 1 日,Embarcadero发布了Rad Studio XE2。这个版本增加了 64 位编译、Livebindings、Native Mac OSX 编译、IOS(通过 XCode)和更多功能到已经强大的 delphi 开发环境中。
如果你的 CPU 能够看到代码并运行它,根据定义,一个足够有才华的人也可以做到。
但是,您可以通过混淆器运行代码来使其更难。
我建议商业和经济学的语言可以保护你的程序。
如果您以消费者为目标,并且定价为 10 美元,那么几乎所有人都会发现向您支付 10 美元比进入您的程序并对其进行逆向工程更容易。
如果您的目标是公司,并说定价为 10,000 美元,那么让采购部门批准付款要比对您的代码进行逆向工程更容易。对于购买你产品的真实公司来说,运行未经许可的代码是不值得冒审计风险的。
最后,保护代码的成本/收益是什么?如果您使用汇编而不是 C# 编写程序,您的生产成本可能会高得多,同时减少逆向工程的机会。然而,这个成本是否超过了潜在的销售损失?这段时间是否可以更好地为购买产品的人增加价值?一般来说,试图将你的产品卖给从不为软件付费的人并不是一种经济策略。
你可以用 Perl 编写它。
(我开玩笑,我开玩笑!放下干草叉!)
但其他人没有说的是:
跟着我重复一遍:“默默无闻不是安全。”
最好使用硬加密算法(其中“硬”并不意味着“困难”,而是“不是双向的;不容易可逆”。
这在逻辑上不是不可能吗?
如果你能运行代码,你就能得到你的 CPU 正在执行的指令。那时,您的算法是可读的,对于可读的一些定义。
没有一种语言能够实现这种 AFAIK .. 因为它是不可能的,因为它总是可以被逆向工程.. 虽然如果你用brainfvck 编写它,很多开发人员会哭泣。
“我正在寻找只能反编译成汇编的东西。”
尝试在汇编中编写程序。这是最好的解决方案。
如果您真的担心人们会反汇编您的软件,请将您的软件作为服务 (SaaS) http://en.wikipedia.org/wiki/Software_as_a_service
很简单:
没有编程语言,没有程序可以保护您的软件。Software Cracker 将反转您的应用程序,直到它只是汇编程序并破解它。
I am going to make the assumption that because you're writing shareware and you mention a registration algorithm you are wanting to protect your software from a keygen or patch that bypasses the restrictions on your trial versions.
Really the most you can do is deter. Like others have mentioned there are obfuscation techniques available, but they are not preventative. There are commercial software packers available which compress the file and make it initially unreadable. But the program has to be decompressed at some point so the machine can run it, so it's still reversible.
And that is pretty much the crutch against any of the anti-reversing techniques you'll see. It has to be interpreted by the machine at some point. More modern packers use anti-debugging techniques to deter the more novice reversers. But these techniques end up being documented rather quickly on popular reversing sites. Many of the techniques are bypassed with nothing more than a simple debugger plugin.
The only way I can think of to protect your executable from being arbitrarily reversed is to run the whole thing on a server you control and just pipe the output to users. But that's not always feasible.
As far as your language options go, take a loot at this. I can't really speak to how complete it is but I'm sure some others can add languages they think of.
尝试找到一个混淆器。顾名思义,它对代码进行了足够的混淆,以至于对其进行逆向工程并非易事。
或者使用 C/C++。这些可以拆卸,但仅此而已。
当然,这足以使能力不足的人员无法理解和逆向工程代码。
正如多米尼克所说,如果你能运行它,它就可以被反编译。
也就是说,我相信有些工具会混淆编译后的代码,使人们更难以反汇编、逆向或拆开注册过程。
例如,我相信像 Adobe 和微软这样的大公司使用这样的产品是为了让人们更难以反汇编和破解他们的程序。
这就像安全或密码学,甚至你的汽车/房子上的锁 - 有足够时间和资源的人可能会突破任何东西。
你只需要把曲线倾斜到足以让任何人都无法真正尝试的程度,这样他们就更有可能转向更容易的目标。
如果您正在寻找“只能反编译成程序集的东西”,那本质上意味着您想要使用一种可以直接编译(或组装)成本机代码可执行文件的语言。
通常的主要嫌疑人是 C、C++、Delphi、VB6。当然,汇编也符合您的标准,尽管我怀疑您是否想在其中编写任何大小合适的项目。
You can't be 100% sure nobody will able to read your code, but you can make it very hard. You can encrypt your code and modify it during run time.
For example I have not heard of any successful attempts to reverse engineering Skype.
所有代码都可以在汇编中读回。有人可以对你的应用程序进行逆向工程,看看机器在做什么。
这与其说是选择正确的语言,不如说是寻找一种可以为您进行代码混淆的工具。没有什么是万无一失的,但有努力来完成这种事情。
例如。请参阅这个关于 Java 代码混淆的研究项目。
你总是可以用 APL 编写它。您可以提供源代码,但仍然没有人能够理解它。