python - 保护在 Python 上运行的 .exe 程序源代码的最佳方法?
问题描述
我正在开发以 .exe 文件形式分发的专有软件。为了使用它,用户必须使用他们的白名单凭据(用户名 + 密码)进行身份验证。
我遇到的问题是,在我销售的行业中,有很多“黑客”会尝试反编译您的可执行文件,获取源代码并将其免费分发给其他人。
为了对抗这些逆向工程尝试,我试图混淆我的代码并使用各种编译器,但到目前为止都没有成功。
我试过的:
- 使用
py2exe
编译器:“黑客”设法在一小时内反编译可执行文件。 - 使用
pyinstaller
编译器:与py2exe
. - 用于
pyminifier
混淆代码:“黑客”设法对代码进行反混淆。 - 使用
Oxyry Python Obfuscator
:与使用相同pyminifier
。
那些设法对我的程序进行反编译和去混淆的人解释说,上述 4 种工具的开源性质意味着它们的算法是众所周知的,并且有针对使用这些开源编译器的逆向工程程序的解决方案和混淆器。
我还没有尝试的:
- 用来
Pyarmor
混淆我的代码。我听说它很好,但它要 50 美元,所以我想在购买许可证之前确定它是最好的混淆工具。 - 使用
Cython
库为我的程序创建一个 C 包装器,使其在 C 而不是 Python 中编译。由于 C 二进制文件更难阅读,这将使程序更难反编译。但是,我从来没有用 C 编程过,我想知道是否有更好的方法来编译我的 Python 源代码,而无需学习 C。
我不打算尝试的:
- 用 Python 以外的语言完全重写我的整个程序。我不擅长其他语言,加上程序本身包含超过 1,000 行代码,所以我不能仅仅为了使其更难反编译而完全重写它。
- 使程序开源:这是一个营利性软件,所以我不打算发布专有代码,谢谢您的理解。
- 使程序成为网络应用程序:由于我的程序直接与用户 PC 上的文件进行交互,因此我不能使其基于网络,它必须在用户的 PC 上。
另请注意,如果“黑客”能够在不访问源代码的情况下禁用白名单系统,他将能够无限制地将其分发给其他用户。因此,我正在寻找一种方法,它不仅会使反编译程序变得极其困难,而且几乎不可能干预二进制文件并关闭程序代码的某些部分。
解决方案
由于该线程中的人没有提供任何令人满意的答案,我将解释我为保护我的程序所做的工作。正如我之前提到的,我的目标不是创建一个“无法破解”的程序,而是一个足够安全以阻止业余爱好者的程序。
我在一个逆向工程论坛上得到了帮助,所以对那些人的支持!
首先,我使用Nuitka将 .py 文件转换为基于 C 的独立可执行文件。然后,我通过VMProtect传递了一个生成的 .exe 文件来混淆二进制文件。
我已经在一些 CS 毕业生身上进行了测试,他们无法破解或去混淆程序,所以这对我来说已经足够了。
PS 那些说“不可能”或者“你的商业模式错了”的人,除非你有逆向工程经验,否则请不要发表你的意见,谢谢:)
推荐阅读
- lightweight-charts - Tradingview轻量级图表:如何增加点数?
- reactjs - 如何处理 AppStack 4.0 版( headerLeft )中的后退按钮功能?
- android - Flutter 依赖错误 (flutter_svg: ^0.19.2+1)
- css - 使用 css 属性作为资产的基本 url
- mysql - MySQL:计算一个月内多天存在的记录
- python - RemoteException 包装 UiPath.Core.ElementOperationException
- python - 如何将python脚本的输出重定向到bash变量?
- xamarin.android - 如何使用 NFC 和 Xamarin.Android 发送消息?
- c++ - gcc 7.5 上的 C++ 隐式转换和通用转发
- rule-engine - 使用 ExternalAction 的参数创建接触器