保护python代码不受反向工程的影响

保护python代码不受反向工程的影响,python,debugging,assembly,reverse-engineering,obfuscation,Python,Debugging,Assembly,Reverse Engineering,Obfuscation,我正在用python(2.7)创建一个程序,我想保护它不受逆向工程的影响 我使用cx\u freeze编译了它(提供基本的安全性-模糊处理和反调试) 如何添加更多保护,如模糊处理、打包、反调试、加密代码和识别VM 我想在运行时对有效负载进行加密和解密,但我不知道怎么做。一般来说,只要黑客有足够的动机,你几乎不可能让你的程序牢不可破 但是你仍然可以让逆向工程变得更加困难,试着使用将核心代码编译成pyd或so文件 故事时间:我做了很长时间的Python程序员。最近我加入了一家公司,担任Python程

我正在用python(2.7)创建一个程序,我想保护它不受逆向工程的影响

我使用
cx\u freeze
编译了它(提供基本的安全性-模糊处理和反调试)

如何添加更多保护,如模糊处理、打包、反调试、加密代码和识别VM


我想在运行时对有效负载进行加密和解密,但我不知道怎么做。

一般来说,只要黑客有足够的动机,你几乎不可能让你的程序牢不可破


但是你仍然可以让逆向工程变得更加困难,试着使用将核心代码编译成
pyd
so
文件

故事时间:我做了很长时间的Python程序员。最近我加入了一家公司,担任Python程序员。我想我的经理做了十年的Java程序员。他给了我一个项目,在最初的评审中,他问我我们是否混淆了代码?我说,我们在Python中不做这种事情。他说我们用Java做这类事情,我们希望用python实现同样的事情。最终,我成功地混淆了代码(仅删除注释和空格并重命名局部变量),但整个python调试过程都搞砸了

然后他问我,我们能用ProGuard吗?我不知道那到底是什么。在谷歌搜索了一番之后,我说它是用于Java的,不能在Python中使用。我还说过,无论我们在构建什么,我们都会在自己的服务器上部署,因此我们不需要实际保护代码。但他不情愿地说,我们有一套程序,在部署之前必须遵循这些程序

经过一年的努力,我终于辞去了我的工作,说服他们Python不是Java。我也没有兴趣让他们在那个时候有不同的想法


TLDR由于Python的开源特性,并没有可行的工具可用于混淆或加密代码。我也不认为这不是一个问题,只要您在自己的服务器上部署代码(将软件作为服务提供)。但是,如果您确实向客户提供了产品,那么可以使用一些工具来包装您的代码或字节码,并将其作为可执行文件提供。但如果他们愿意,总是可以查看您的代码。或者,如果绝对有必要保护代码,您可以选择其他提供更好保护的语言。再次请记住,对代码进行反向工程总是可能的。

如今,任何数字安全都无法实现

你能做的就是把它弄得很难,让人沮丧,但我承认我不知道用python的具体方法来实现这一点。程序的安全性实际上不是程序安全性的函数,而是心理学的函数

是的,心理学

鉴于这是一场黑客和反黑客之间的军备竞赛,双方都在不断地试图超越对方,唯一能做的就是尽可能让人沮丧。我们如何做到这一点

被后方的一个痛苦所折磨

您为确保代码难以破译而采取的每一个额外步骤都是好的

例如,您可以将您的程序转换为一个已编译的字节码块,然后从程序内部调用它。使用外部库预先对其进行加密,然后对其进行解密。对函数的代码块执行相同的额外步骤。或者,使预编译块中的函数准备就绪,但已断开。在运行时,利用byteplay,根据不同函数的其他字节,用字节修复字节码,这将在修改时停止程序的工作

有很多方法可以搞乱人们的头脑,虽然我不能告诉你任何特定于python的方法,但如果你在“如何变得困难”的上下文中思考,你会发现最奇怪的方法可以让代码变得一团糟

有趣的是,这在汇编中比python容易得多,所以也许您应该考虑通过CType或其他方式执行外部代码


召唤你内心的巨魔

计算机上的每一个锁都有一个漏洞,所以为什么要费心实现一个代价高昂且最终会被破坏的安全性呢?您到底想实现什么?如果您想实现某种模糊处理,我建议您使用一种在运行时不需要知道符号名称的编程语言(Python就是这样做的)。我将冒昧地从“…在运行时解密它,但我没有任何线索…”部分评估您的编程技能。结论是,如果你的代码是一个非常普通的应用程序,你可能不需要担心有人会试图窃取你的代码。很可能有更好的。所以,在保护计划上花费太多精力是在浪费时间,做一些基础工作。也许你是非编程领域的专家,从那里带来了有价值的知识——那么担心是可以的,我可以理解你为什么想要保护它,但这很难/如果你真的想做一个不会被破解的程序,那么你需要阻止人们这么做。迈出他们不得不迈出的第一步,他们非常努力,以至于放弃了。一次取得一点点进步会激励人们继续前进。为什么这会让事情变得更难呢?使用cython你会得到机器代码,我想说这会使它更容易,不是吗?我想说,理解python代码相对来说比理解机器代码更容易。这只在一定程度上适用于编译的python字节码,我希望他正在分发,而不是普通的源代码。看,当它都是普通的机器代码时,我相信它会变得更容易,因为两者之间没有cpython。Otoh python调试器也存在,但很可能比机器代码调试器容易上当。为什么被否决?曾经挑战