我遇到的问题是,在我所销售的行业中,有很多“黑客”,他们将尝试反编译您的可执行文件,获取源代码并将其免费分发给其他人。各种编译器,但到目前为止都没有成功。
我已经尝试过:
使用
py2exe
编译器:“黑客”设法在一小时内反编译可执行文件。 使用
pyinstaller
编译器:与py2exe
相同。使用
pyminifier
混淆代码:“黑客”设法使代码模糊化。使用
Oxyry Python Obfuscator
:与pyminifier
相同。那些设法对我的程序进行反编译和反混淆的人解释说,这4种工具的开源性质意味着它们的算法是众所周知的,并且存在解决方案转向使用这些开源编译器和混淆器的反向工程程序。
我还没有尝试过:
使用
Pyarmor
混淆我的代码。我听说它很好,但是它要花50美元,所以在购买许可证之前,我想确保它是最好的混淆工具。 ,使其使用C而不是Python进行编译。由于C二进制文件更难阅读,因此将使程序更难以反编译。但是,我从来没有用C编程过,我想知道是否有更好的方法来编译我的源Python代码,而无需学习C。使用
Cython
,VMProtect
或Enigma Protector
。每个工具的价格都超过150美元,所以在购买它们之前,我想知道这是否是解决我的问题的最佳方法。我不打算尝试的方法:
用Python以外的语言完全重写我的整个程序。我不懂其他语言,而且程序本身包含5,000行以上的代码,因此我不能仅仅为了使其更难于反编译而完全重写它。
使程序开源:这是一个营利性软件,因此,我不会发布专有代码,谢谢您的理解。不能使其基于Web,它必须位于用户的PC上。可以无限制地分发给其他用户。因此,我正在寻找一种方法,该方法不仅将使反编译程序变得极其困难,而且几乎不可能使它与字节码/二进制文件混合并关闭程序代码的某些部分。
#1 楼
有一些方法可以使Python程序难以进行反向工程。有可能,但是您需要弄弄Python源代码(用C编写),并为您的目的编译一个特殊的构建。Python的工作方式已得到全面记录和开源。例如,考虑pyc文件格式。可以在marshal.c中找到许多处理读/写pyc的代码。如果您修改了代码并重新排序了读/写对象的顺序,则可以轻松地抛弃反编译器。为了进一步加强保护,您可以加密仅在运行时解密的字节码。
另一种常用的技术是操作码重映射。 Python中的字节码指令集可以在opcode.h中找到。
考虑这两个指令
#define DUP_TOP_TWO 5
#define BINARY_TRUE_DIVIDE 27
您可以互换这些指令的操作码。结果,您的自定义Python版本只能理解该字节码。
Dropbox的早期版本是用Python开发的,他们使用了上述一些技术来加强其代码,但是与任何DRM系统一样,最终对其进行了反向工程和分析。有此过程的书面记录,您可以进行研究以供进一步参考。 (免责声明:我是本文的作者,但不是GitHub存储库的所有者)。
评论
我想知道您对保护python应用程序做出了什么决定。你做到了吗?您是否使用了Cython或任何受VM保护的软件?@AkramMo是的,它是2的组合。首先将.py传输到cython可执行文件中,然后将其通过VM模糊处理程序传递。不知道它是否不可破解,但足以使业余爱好者远离。