【问题标题】:Best way to protect source code of .exe program running on Python?保护在 Python 上运行的 .exe 程序源代码的最佳方法?
【发布时间】:2020-03-25 19:48:18
【问题描述】:

我正在开发以 .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 上。

还请注意,如果“黑客”能够在不访问源代码的情况下禁用白名单系统,他将能够无限制地将其分发给其他用户。因此,我正在寻找一种方法,它不仅可以让反编译程序变得极其困难,而且几乎不可能干预二进制文件并关闭程序代码的某些部分。

【问题讨论】:

  • 接受免费/破解版的人会成为您的客户吗?因为如果没有,就没有伤害。无论如何,真正的客户会付费(并获得支持?),被黑客入侵的客户只会增加更大的用户群。你可以考虑的另一件事是改变你的商业模式,即使代码被泄露(订阅模式、基于云的等),你仍然可以赚钱。
  • 所有技术方案都有缺点。大多数人都会被轻而易举地击败。无论您使用哪种语言,这都是正确的。您最好的保护是良好的用户协议和公平的定价。
  • @Chris ... 以及出色的支持 :-)
  • 致 OP:您的目标是光荣的,但可能没有可行的技术解决方案。你只需要 一个人 有足够的决心来破解这个,然后其他人都可以免费获得他们的工作。令人沮丧的是,您实际上是在要求圣诞老人为您带来一只独角兽作为圣诞节礼物。
  • 那么您的企业可能不是企业。如果您的代码必须在用户的机器上运行实际上所有的技术限制都会被打破。有些人会被轻而易举地击败,有些人会更加努力。这不是 Python 特有的。

标签: python c compilation exe obfuscation


【解决方案1】:

由于该线程中的人没有提供任何令人满意的答案,我将解释我为保护我的程序所做的工作。正如我之前提到的,我的目标不是创建一个“无法破解”的程序,而是一个足够安全以阻止业余爱好者的程序。

我在一个逆向工程论坛上得到了帮助,向那些人致敬!

首先,我使用 Nuitka 将 .py 文件转换为基于 C 的独立可执行文件。然后,我通过 VMProtect 传递了一个生成的 .exe 文件来混淆二进制文件。

我已经在几个 CS 毕业生身上进行了测试,他们无法破解或去混淆程序,所以这对我来说已经足够了。

附注那些说“不可能”或者“你的商业模式错了”的人,除非你有逆向工程经验,否则请不要发表你的意见,谢谢:)

【讨论】:

  • 你能分享更多关于你使用的这个VMProtect软件的信息吗?非常感谢
【解决方案2】:

我想我会勇敢地发布答案:没有任何技术手段可以防止最终用户机器上运行的软件被破解。

也许你可以让它变得更困难,但既然你已经说过,在这个市场上,人们总是更喜欢破解软件而不是任何价格的合法软件,这是你基本上没有希望获胜的情况:如果你已经确定海盗,他们每次都会赢。

所以:你不能;放弃

对不起:-(

【讨论】:

  • 或者:您自己进行混淆,这可能不会引起更广泛的黑客注意,但不太可能非常好,而且无论如何肯定不值得您花时间重新发明这一轮。
  • 是的,很公平。我在帖子中已经提到 Pyarmor 是一个很好的混淆工具,它也是私有的。虽然有些人知道如何绕过它,但他们是非常优秀的专家,不会将时间浪费在像我这样的非常小众的产品上。那我可能会把它当作一个混淆工具。因为没有人提出任何更好的建议。
  • 祝你好运,请告诉我们进展如何。
  • 但是混淆代码只是问题的一半,因为我需要找到一种方法来让反编译程序变得困难。
  • 使它成为一个混合系统,基于网络,然后将文件下载到用户的电脑。你的系统必须有某种专有的数据处理,只要它的一部分是远程的,你就会得到更好的保护。
猜你喜欢
  • 1970-01-01
  • 2022-07-07
  • 1970-01-01
  • 1970-01-01
  • 2019-10-09
  • 1970-01-01
  • 1970-01-01
  • 2014-09-12
  • 1970-01-01
相关资源
最近更新 更多