我希望创建包含注册算法的共享软件。我正在寻找一种编程语言,不能轻易地反编译成可读代码。例如,C#可以反编译成可读代码。
我有什么选择?
编辑:我正在寻找只能反编译成汇编的东西。例如,Delphi不能像C#或Java一样反编译,但从我所听到的,Delphi正在死亡。
答案 0 :(得分:30)
社区,delphifeeds 您还可以在Delphi Wikia查看更多delphi项目,免费软件,共享软件和商业广告。
因此我认为Delphi是软件开发的一个很好的选择。免费软件,共享软件或商业。
更新: 2011年9月1日Embarcadero发布Rad Studio XE2。这个发布增加了64位编译,Livebindings,Native Mac OSX编译,IOS(通过XCode)以及更强大的delphi Dev环境。
答案 1 :(得分:22)
如果你的CPU能够看到代码并运行它,根据定义,一个有才华的人也可以这样做。
但是,您可以通过混淆器运行代码来使其变得更难。
答案 2 :(得分:19)
我建议商家和经济的语言可以保护您的计划。
如果你的目标是消费者,并以10美元的价格定价,那么几乎所有人都会发现向你支付10美元而不是进入你的程序并对其进行逆向工程更容易。
如果您的目标是公司,并且说定价为10,000美元,那么让购买部门批准付款要比对代码进行反向工程更容易。对于购买产品的真实公司而言,运行未经许可的代码是不值得的审计风险。
最后,保护代码的成本 / 优势是什么?如果用汇编而不是C#编写程序,可能会产生更高的生产成本,同时降低逆向工程的可能性。但是,这个成本是否超过潜在的销售损失?这段时间可以更好地为购买产品的人增加价值吗?一般来说,试图将产品销售给那些从不为软件付费的人并不是一种经济策略。
答案 3 :(得分:13)
你可以用Perl编写它。
(我小子,我小子!放下干草叉!)
答案 4 :(得分:12)
但其他人没有说的是:
答案 5 :(得分:8)
在我之后重复:“不安全不是安全。”
你最好使用硬加密算法(“硬”并不意味着“困难”,但“不是双向的;不容易逆转”。
答案 6 :(得分:7)
这在逻辑上不可能吗?
如果可以运行代码,则可以获取CPU执行的指令。那时,对于某些可读的定义,您的算法是可读的。
答案 7 :(得分:4)
没有语言能够使用AFAIK ..因为它不可能,因为它总是可以进行逆向工程..虽然如果你在brainfvck编码它会有很多开发人员会哭。
答案 8 :(得分:3)
“我正在寻找一些只能反编译成汇编的东西。”
尝试在程序集中编写程序。这是最好的解决方案。
答案 9 :(得分:2)
如果您真的担心人们会拆解您的软件,请将您的软件即服务(SaaS)http://en.wikipedia.org/wiki/Software_as_a_service
答案 10 :(得分:1)
我将假设因为您正在编写共享软件而您提到注册算法,您希望保护您的软件免受绕过试用版限制的密钥或补丁。
你能做的最多就是威慑。像其他人一样提到有混淆技术可用,但它们不是预防性的。有一些商业软件打包器可以压缩文件并使其最初不可读。但程序必须在某个时候解压缩,以便机器可以运行它,所以它仍然是可逆的。
这就是你要看到的任何反转技术的拐点。它必须在某个时候被机器解释。更现代的包装商使用反调试技术来阻止更多的新手逆转器。但是这些技术最终会在流行的倒车网站上迅速记录下来。许多技术仅通过一个简单的调试器插件被绕过。
我能想到保护您的可执行文件不受任意反转的唯一方法是在您控制的服务器上运行整个操作,并将输出传递给用户。但这并不总是可行的。
就您的语言选择而言,请在this处获取战利品。我真的不能说它有多完整,但我确信其他人可以添加他们想到的语言。
答案 11 :(得分:1)
正如Dominic所说,如果你可以运行它,它可以被反编译。
也就是说,我相信是工具会混淆编译后的代码,使某人更难以反汇编,反向或拆分注册过程。
例如,我认为Adobe和微软等大公司都使用这样的产品,以便让人们更难以拆解和破解他们的程序。
这就像安全或加密,甚至是汽车/房子上的锁 - 有足够时间和资源的人可能会突破任何事情。
你只需要将曲线倾斜到足以让任何人真正尝试都没有吸引力,这样他们就更有可能移动到更容易的目标上。
答案 12 :(得分:1)
如果您对“只能反编译成汇编的内容”有所了解,那么这实际上意味着您希望使用直接编译(或汇编)到本机代码可执行文件中的语言。
通常的主要嫌疑人是C,C ++,Delphi,VB6。当然,组装也符合您的标准,但我怀疑您是否想要在其中编写任何体积适中的项目。
答案 13 :(得分:1)
很简单:
没有编程语言,没有程序可以保护您的软件。 软件破解者将重新启动你的应用程序,直到它只是汇编程序并将破解它。
答案 14 :(得分:0)
你无法100%确定没有人能够阅读你的代码,但你可以非常努力。您可以加密代码并在运行时修改它。
例如,我没有听说过任何成功的逆向工程Skype尝试。
答案 15 :(得分:0)
这不是选择正确语言的问题,因为它找到了一个可以为您进行代码混淆的工具。没有什么是防弹的,但有努力完成这类事情。
EG。请参阅this research project有关Java代码混淆的内容。
答案 16 :(得分:0)
尝试找一个混淆器。正如其名称所暗示的那样,对代码进行模糊处理,以便进行逆向工程并不是一件容易的事。
或者使用C / C ++。那些可以拆卸,但就是这样。
当然,这足以让竞争对手无法理解和逆向设计代码。
答案 17 :(得分:0)
所有代码都可以在汇编中回读。有人可以对您的应用程序进行反向工程,看看机器在做什么。
答案 18 :(得分:0)
您总是可以在APL中编写它。你可以提供来源,但仍然没有人能够理解它。