在 Python 上保护 .exe 程序 运行 源代码的最佳方法?
Best way to protect source code of .exe program running on Python?
我正在开发将以 .exe 文件形式分发的专有软件。为了使用它,用户必须使用他们的白名单凭据(用户名+密码)进行身份验证。
我遇到的问题是,在我销售的行业中,有很多"hackers"会尝试反编译您的可执行文件,获取源代码并免费分发给其他人人。
为了对抗这些逆向工程尝试,我尝试混淆我的代码并使用各种编译器,但到目前为止都没有成功。
我试过的:
- 使用
py2exe
编译器:"hackers"在一个小时内成功反编译了可执行文件。
- 使用
pyinstaller
编译器:与 py2exe
. 相同
- 使用
pyminifier
混淆代码:"hackers" 设法对代码进行反混淆。
- 使用
Oxyry Python Obfuscator
:与pyminifier
相同。
那些设法反编译和反混淆我的程序的人解释说,上述 4 种工具的开源性质意味着他们的算法是众所周知的,并且有一些解决方案可以对使用这些工具的程序进行逆向工程开源编译器和混淆器。
我还没有尝试的:
- 使用
Pyarmor
混淆我的代码。我听说它很好,但要花 50 美元,所以我想在购买许可证之前确定它是最好的混淆工具。
- 使用
Cython
库为我的程序创建 C 包装器,使其在 C 中编译而不是 Python。由于 C 二进制文件更难阅读,这将使程序更难反编译。但是,我从来没有用 C 编程过,我想知道是否有更好的方法来编译我的源代码 Python,而不需要学习 C。
我不会尝试的:
- 用 Python 以外的语言完全重写我的整个程序。我其他语言不强,加上程序本身有1000多行代码,所以我不能为了反编译更难而完全重写它。
- 程序开源:这是一个营利性软件,所以我不会发布专有代码,谢谢理解。
- 使程序成为 Web 应用程序:由于我的程序直接与用户 PC 上的文件进行交互,因此我无法使其基于 Web,它必须在用户的 PC 上。
还请考虑,如果 "hacker" 甚至无需访问源代码就可以禁用白名单系统,他将能够不受限制地分发给其他用户。因此,我正在寻找一种方法,不仅可以使反编译程序变得极其困难,而且几乎不可能干预二进制文件并关闭程序代码的某些部分。
我想我会是勇敢者post作为答案:没有没有技术手段你可以采取防止软件运行在最终用户机器上被破解。
你也许可以让它变得更难,但既然你已经说过,在这个市场上,人们总是喜欢破解软件而不是正版软件,无论价格如何,在这种情况下你基本上没有获胜的希望:如果你确定了海盗,他们每次都会获胜。
所以:你不能;放弃
对不起:-(
由于此线程中的人没有提供任何令人满意的答案,我将解释我为保护我的程序所做的工作。正如我之前提到的,我的目标不是创建一个 "uncrackable" 程序,只是一个足够安全以阻止业余爱好者的程序。
我在一个逆向工程论坛上得到了帮助,所以支持那些人!
首先,我使用 Nuitka 将 .py 文件转换为基于 C 的独立可执行文件。然后,我通过 VMProtect 传递了一个生成的 .exe 文件来混淆二进制文件。
我已经在几个 CS 毕业生身上测试过,他们无法破解或反混淆程序,所以这对我来说已经足够了。
P.S。那些说"it is impossible"或"your business model is wrong"的人,除非你有逆向工程经验,否则请不要分享你的意见,谢谢:)
我正在开发将以 .exe 文件形式分发的专有软件。为了使用它,用户必须使用他们的白名单凭据(用户名+密码)进行身份验证。
我遇到的问题是,在我销售的行业中,有很多"hackers"会尝试反编译您的可执行文件,获取源代码并免费分发给其他人人。
为了对抗这些逆向工程尝试,我尝试混淆我的代码并使用各种编译器,但到目前为止都没有成功。
我试过的:
- 使用
py2exe
编译器:"hackers"在一个小时内成功反编译了可执行文件。 - 使用
pyinstaller
编译器:与py2exe
. 相同
- 使用
pyminifier
混淆代码:"hackers" 设法对代码进行反混淆。 - 使用
Oxyry Python Obfuscator
:与pyminifier
相同。
那些设法反编译和反混淆我的程序的人解释说,上述 4 种工具的开源性质意味着他们的算法是众所周知的,并且有一些解决方案可以对使用这些工具的程序进行逆向工程开源编译器和混淆器。
我还没有尝试的:
- 使用
Pyarmor
混淆我的代码。我听说它很好,但要花 50 美元,所以我想在购买许可证之前确定它是最好的混淆工具。 - 使用
Cython
库为我的程序创建 C 包装器,使其在 C 中编译而不是 Python。由于 C 二进制文件更难阅读,这将使程序更难反编译。但是,我从来没有用 C 编程过,我想知道是否有更好的方法来编译我的源代码 Python,而不需要学习 C。
我不会尝试的:
- 用 Python 以外的语言完全重写我的整个程序。我其他语言不强,加上程序本身有1000多行代码,所以我不能为了反编译更难而完全重写它。
- 程序开源:这是一个营利性软件,所以我不会发布专有代码,谢谢理解。
- 使程序成为 Web 应用程序:由于我的程序直接与用户 PC 上的文件进行交互,因此我无法使其基于 Web,它必须在用户的 PC 上。
还请考虑,如果 "hacker" 甚至无需访问源代码就可以禁用白名单系统,他将能够不受限制地分发给其他用户。因此,我正在寻找一种方法,不仅可以使反编译程序变得极其困难,而且几乎不可能干预二进制文件并关闭程序代码的某些部分。
我想我会是勇敢者post作为答案:没有没有技术手段你可以采取防止软件运行在最终用户机器上被破解。
你也许可以让它变得更难,但既然你已经说过,在这个市场上,人们总是喜欢破解软件而不是正版软件,无论价格如何,在这种情况下你基本上没有获胜的希望:如果你确定了海盗,他们每次都会获胜。
所以:你不能;放弃
对不起:-(
由于此线程中的人没有提供任何令人满意的答案,我将解释我为保护我的程序所做的工作。正如我之前提到的,我的目标不是创建一个 "uncrackable" 程序,只是一个足够安全以阻止业余爱好者的程序。
我在一个逆向工程论坛上得到了帮助,所以支持那些人!
首先,我使用 Nuitka 将 .py 文件转换为基于 C 的独立可执行文件。然后,我通过 VMProtect 传递了一个生成的 .exe 文件来混淆二进制文件。
我已经在几个 CS 毕业生身上测试过,他们无法破解或反混淆程序,所以这对我来说已经足够了。
P.S。那些说"it is impossible"或"your business model is wrong"的人,除非你有逆向工程经验,否则请不要分享你的意见,谢谢:)