【问题标题】:protect python code from reverse engineering保护python代码免受逆向工程
【发布时间】:2017-05-28 17:35:07
【问题描述】:

我正在用 python (2.7) 创建一个程序,我想保护它免受逆向工程。

我使用cx_freeze 编译它(提供基本的安全性-混淆和反调试)

如何添加混淆、打包、反调试、加密代码识别VM等保护。

我想也许可以加密到有效载荷并在运行时对其进行解密,但我不知道该怎么做。

【问题讨论】:

  • 计算机上的每个锁都有一个洞,所以为什么还要费心实施一个昂贵且最终会在以后破坏的安全措施
  • 你到底想达到什么目的?
  • 如果你想实现某种混淆,我建议你使用一种在运行时不需要知道符号名称的编程语言(Python会这样做)。
  • 我会冒昧地从 "...在运行时解密它,但我不知道..." 评估您的编程技能。结论是,如果它是一些非常普通的应用程序,您可能不必担心有人会试图窃取您的代码。很可能有更好的存在。因此,在保护计划上花费太多精力,做一些基础知识是在浪费你的时间。也许您是非编程领域的专家,从那里带来了宝贵的知识-那么担心是可以的,我可以理解您为什么要保护它,但这很困难。 ://
  • 如果你真的想做一个不会被破解的程序,那么你需要劝阻人们这样做。迈出他们必须迈出的第一步非常努力,以至于他们放弃了。一次取得一点点进步会给继续下去的动力。

标签: python debugging assembly reverse-engineering obfuscation


【解决方案1】:

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

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

【讨论】:

  • 为什么这会让事情变得更难?使用 cython 你会得到机器码,我会说这让它更容易,不是吗?
  • 好吧,我想说理解python代码比理解机器代码相对容易。
  • 这仅在一定程度上适用于编译的 python 字节码,我希望他正在分发它,而不是简单的源代码。看,当它都是纯机器代码时,我相信它会变得更容易,因为两者之间没有 cpython。 Otoh python 调试器也存在,但很可能比机器代码调试器更容易被欺骗。
【解决方案2】:

故事时间:我长期从事 Python 程序员工作。最近我加入了一家公司,担任 Python 程序员。我猜我的经理是一名 Java 程序员有十年了。他给了我一个项目,在最初的审查中,他问我我们是否混淆了代码?我说,我们不会在 Python 中做那种事情。他说我们在 Java 中做这种事情,我们希望在 python 中实现同样的事情。最终我设法混淆了代码,只是删除了 cmets 和空格并重命名了局部变量)但整个 python 调试过程都搞砸了。

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

在厌倦了说服他们 Python 不是 Java 一年之后,我最终辞掉了工作。我也没有兴趣让他们在那个时候以不同的方式思考。

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

【讨论】:

  • 试试 pyarmor 或 cython
【解决方案3】:

现在没有办法确保任何数字安全。

你能做的就是让它变得很难做到令人沮丧,但我承认我不知道 python 特定的方法来实现这一点。您的程序的安全量实际上不是程序安全性的函数,而是心理学

是的,心理学。

鉴于这是破解者和反破解者之间的军备竞赛,双方都在不断地试图超越对方,唯一能做的就是尽量让它变得令人沮丧。我们如何做到这一点?

后背痛!

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

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

有很多方法可以弄乱人们的头脑,虽然我不能告诉你任何 python 特定的方法,但如果你在“如何变得困难”的背景下思考,你会发现让它成为最奇怪的方法乱处理你的代码。

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

召唤你内心的巨魔!

【讨论】:

  • 被否决,为什么?曾经挑战过别人破解你的密码吗?我做到了。这是一场心理游戏。
  • 也许:“现在没有办法让任何数字安全的东西”是夸大其词?
  • 您是否计算过从不连接任何地方、从不使用 USB、CD、DVD 的计算机?有软件成功地瞄准了 airgap!马克扎克伯格覆盖了他的电脑的凸轮。没有任何数字是安全的。当然,您可以将硬盘放在保险箱中,但这有什么意义呢? :)
  • 密钥永远不在其外部的 HSM。对于 iMessages Apple 哈希(使用搅拌器)管理卡,因此即使他们无权访问。还可以考虑 Whisper 系统。由 Open Whisper Systems 发出的信号。只是开玩笑,我的 CISSP 同意这是夸大其词。
  • 一般来说,安全就是增加攻击者的工作因素。需要考虑攻击者(PFY 资金充足的国家)和被攻击事物的价值(奶奶的秋葵食谱的核发射代码。一旦需要知道这一点并进行相应的设计。
猜你喜欢
  • 1970-01-01
  • 2018-06-22
  • 2019-03-19
  • 2020-05-02
  • 2017-09-21
  • 2019-10-11
  • 1970-01-01
  • 2011-11-18
  • 2021-02-08
相关资源
最近更新 更多