当前位置: 首页 > 面试题库 >

通过解释器变异混淆python字节码

朱啸
2023-03-14
问题内容

实际上,Dropbox非常出色,他们能够保护以python制作的桌面应用程序;我对此进行了很多研究,但没有比混淆更好的好的解决方案了,这不是很安全的方法,您最终会看到将代码上传到某个地方。

我听了 Giovanni Bajo (PyInstaller创始人)的会议,他说Dropbox这样做:

  1. 通过重新编译CPython的解释器进行字节码加扰,这样,标准的CPython解释器将无法运行它,只能重新编译cpython解释器。
  2. 您需要做的就是将数字下方的数字打乱define loadup 8

我从没看过Python的源代码,因此,我不会声称我完全理解上述词语。

我需要听听专家的声音:该怎么做?如果重新编译后,我能够使用PyInstaller等可用工具打包我的应用程序?

更新:

我对Dropbox如何进行这种混淆/突变进行了一些研究,发现了这一点:

根据哈根·弗里奇(Hagen
Fritsch)的
说法,他们分两个阶段进行:

  1. 他们使用TEA密码以及由每个python模块的代码对象中的某些值播种的RNG。他们相应地调整了口译员,以便

a)解密模块并

b)防止访问解密的代码对象。

这本来是一条简单的路径,只是让保管箱解密所有内容并使用内置的编组器转储模块。

  1. 使用的另一个技巧是手动对操作码进行加扰。不幸的是,这只能是半自动修复的,因此就赢得时间而言,他们的单字母替换密码非常有效。

我仍然希望获得有关如何完成此操作的更多见解,而且,我不知道解密在此过程中是如何发生的……我希望所有专家的声音在这里……普通人你在哪里。


问题答案:

我想这是关于将数字洗牌include/opcode.h#define loadup不过,我看不到那里,但这也许是指某些旧的Python版本。我还没有尝试过。

这会混淆您的.pyc文件,以使它们无法被识别普通.pyc文件的任何工具检查。这可以帮助您在程序中隐藏一些安全措施。但是,攻击者可能能够(例如)从应用程序包中提取您的自定义Python解释器,并利用它来检查文件。(只需启动交互式解释器,并通过在模块上导入和使用dir开始调查)

还要注意,您的软件包肯定会包含Python标准库中的某些模块。如果攻击者猜想您已经对操作码进行了改组,他可以在您的版本与标准模块的普通版本之间进行逐字节比较,并以此方式发现您的操作码。为了防止这种简单的攻击,可以使用适当的加密保护模块,并尝试在解释器中隐藏解密步骤,如更新的问题所述。这迫使攻击者使用机器代码调试来查找解密代码。

我不知道解密在这个过程中是如何发生的…

您将修改解释器的导入模块部分,并在其中插入解密C代码。



 类似资料:
  • 本文向大家介绍深入Python解释器理解Python中的字节码,包括了深入Python解释器理解Python中的字节码的使用技巧和注意事项,需要的朋友参考一下 我最近在参与Python字节码相关的工作,想与大家分享一些这方面的经验。更准确的说,我正在参与2.6到2.7版本的CPython解释器字节码的工作。 Python是一门动态语言,在命令行工具下运行时,本质上执行了下面的步骤:     当第一

  • 问题内容: 我正在寻找一个好的Java混淆器。 我已经对以下Java混淆器进行了初步研究:proguard,yguard,retroguard,dasho,alatorari,jshrink,smokescreen,jobfuscate,marvin,jbco,jode,javaguard,jarg,joga,cafebabe,donquixote,mwobfu,bbmug,zelix klass

  • 问题内容: 我是Python装饰器的新手(哇,很棒的功能!),并且我很难使以下内容起作用,因为参数混杂在一起。 运行此命令时,我得到: 我做的那条线 问题 -显然,问题在于缓存器对象而不是Session实例,而该实例实际上没有属性。但是我找不到解决方法。 我已经考虑过但不能使用的解决方案 -我想到使decorator类返回一个函数而不是一个值(如本文的2.1节),以便在正确的上下文中进行评估,但这

  • 问题内容: 我试图从不同的部分组成URL,并且在理解此方法的行为时遇到了麻烦。例如: Python 3.x 您能否解释这种方法的确切行为? 问题答案: (对我而言)最好的方式是第一个参数,就像您在浏览器中所在的页面一样。第二个参数是该页面上锚点的href。结果是您单击后将定向到的最终URL。 根据我的描述,这很有意义。尽管希望基础包括一个方案和领域。 如果您在某个虚拟主机上,并且有一个类似的锚,则

  • 问题内容: 在CPython的上下文中,我并没有真正理解“字节码解释器”的概念。有人可以说明整个情况吗? 这是否意味着CPython将编译并执行pyc文件(字节码文件?)。那么什么将py文件编译为pyc文件呢?而且Jython与CPython有何不同(除了它们以不同的语言实现)。 我还在某处读到Python是C ++的解释。这个对吗?那是什么意思呢? 我对Python还是很陌生,所以请原谅我这个愚

  • 我一直在摆弄Proguard配置,我想测试只是为了优化 但我仍然会遇到这样的错误: java.lang.IllegalArgumentExc0019:找不到[org/apache/log/log4j/core/jackson/Log4jXmlMoules](有1个已知的超级类)和[org/apache/log/log4j/core/jackson/Log4jJsonMoules](有4个已知的超级

  • Powershell的混淆目前已经使用的越来越多,国内外也有了较多的研究,在今年的BH大会上也有对应的议题,关注点是反混淆,那么里面的一些姿势很值得我们学习,我们提供一些混淆实例,来让大家对于PS的混淆做到一个初步了解,也为防御混淆提供一些思路。 实例 在混淆之前,先看看powershell编码执行的方式。 -EC,-EncodedCommand,-EncodedComman,-EncodedCo

  • 我对是否允许以下情况感到困惑: UPDATE:我知道当我在for循环中提供正确的声明类型时,它就会工作。问题是如果我不这样做会发生什么?