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

2023-11-23

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

我听了一个会议乔瓦尼·巴霍(PyInstaller 创始人),他说 Dropbox 是这样做的:

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

我从来没有看过Python的源代码,所以,我不会声称我完全理解上面的话。

我需要听听专家的声音:这样的事情怎么办?如果重新编译后我将能够使用 PyInstaller 等可用工具打包我的应用程序?

Update:

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

根据哈根·弗里奇,他们分两个阶段进行:

  1. 他们使用 TEA 密码以及由一些值作为种子的 RNG 每个Python模块的代码对象。他们调整了翻译 相应地使得它

    a) 解密模块并

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

    这将是一个简单的路径,只需让 dropbox 解密所有内容并使用内置编组器转储模块即可。

  2. 使用的另一个技巧是手动加扰操作码。 不幸的是,这只能半自动修复,因此他们的 单字母替换密码被证明在以下方面非常有效 赢得一些时间。

我仍然想要更多关于如何做到这一点的见解,而且,我不知道解密是如何在这个过程中发生的......我希望这里所有专家的声音......普通人你在哪里。


我想这是关于洗牌中的数字include/opcode.h。我没有看到#define loadup不过,这可能是指某些旧的 Python 版本。我没有尝试过这个。

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

另请注意,您的包肯定会包含 Python 标准库中的一些模块。如果攻击者猜测您已经打乱了操作码,他可以在您的版本和标准模块的正常版本之间进行逐字节比较,并以这种方式发现您的操作码。为了防止这种简单的攻击,可以使用适当的加密来保护模块,并尝试隐藏解释器中的解密步骤,如更新的问题中所述。这迫使攻击者使用机器代码调试来寻找解密代码。


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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过解释器突变混淆 python 字节码 的相关文章

随机推荐

  • 使用 UNION 时,SQL 查询是否保证以原子方式执行?

    我正在发出一个由使用 UNION 分组的多个 SELECT 组成的单个 SQL 查询 SELECT FROM employee LEFT JOIN department ON employee DepartmentID department
  • 是否可以在 Visual Studio 调试会话之间保留 Cookie

    我有一个身份验证 cookie 当我在本地环境中点击登录屏幕后 该 cookie 就会被设置 该 cookie 已被设置为持久性的 并被赋予未来 7 天的超时期限 当我结束调试会话并在另一个构建后开始调试时 cookie 不存在 每个浏览器
  • jquery 获取加载时 iframe 内容的高度

    我有一个帮助页面 help php 我正在 main php 的 iframe 中加载该页面 在 iframe 中加载此页面后 如何获取该页面的高度 我问这个是因为我无法将 iframe 的高度设置为 100 或自动 这就是为什么我认为我需
  • C++ 中的除法[重复]

    这个问题在这里已经有答案了 我是 C 新手 我尝试了这个简单的代码 include
  • 如何将数组作为参数传递给 vararg 函数?

    我有一些代码看起来像这样 uint8 t activities 8 uint8 t numActivities 0 activities numActivities someValue activities numActivities so
  • 将 Dropbox 集成到 Android 应用程序中,但没有登录弹出窗口

    我想在我的应用程序中使用保管箱 我开发了一个用于上传和下载文件的示例应用程序 它要求身份验证 但我不想打开登录弹出窗口 其他用户是否可以使用默认帐户 单个帐户 登录详细信息访问保管箱 因此任何用户都可以直接使用 dropbox 而无需弹出登
  • 可以在 Visual Studio 中使用 WSDL 自动生成代码

    您好 我想使用测试以下功能 http msrmaps com terraservice2 asmx op ConvertLonLatPtToNearestPlace 是否有一些更快的方法可以使用 Visual Studio 2010 对其进
  • 部分匹配行名时发出警告

    我刚刚发现了数据框中行名称部分匹配导致的错误 有没有办法禁用部分匹配 运算符或在使用全局匹配时生成警告 我知道这是可能的exact TRUE为了 运算符或与options warnPartialMatchDollar TRUE for 索引
  • 派生类的指针可以类型转换为其基类的指针吗?

    new 返回的派生类的指针可以进行 类型转换为其基类的指针 这是对还是错 我知道dynamic cast可以用来消除缺点 一般来说 如何将派生类的指针转换为其基类的指针 是的 从指向派生类的指针到指向基类的指针的转换是隐式的 因此 以下内容
  • JUnit - 如何测试具有不同值的方法?

    我有一个方法并希望用不同的值来测试它 我的问题是 如何编写 JUnit 测试来测试具有不同值的相同方法 您可以查看参数化测试 例如example 你也可以使用理论这在很多情况下更方便
  • Android 中使用 Kotlin 的 HTTP 请求

    我想使用 POST 方法进行登录验证并使用 GET 方法获取一些信息 我已经有了我之前项目的 URL 服务器用户名和密码 对于安卓系统 Volley是一个很好的起点 对于所有平台 您可能还想查看ktor客户或http4k这都是很好的图书馆
  • React Admin 显示非常混乱

    我的 RA 项目在本地部署时渲染良好 但是 当我将构建目录复制到 S3 存储桶进行部署时 它渲染得一团糟 有时它会起作用 但大多数时候它会呈现如下图所示 它在使用 AOR 的两种环境中都可以正常工作 环境 React admin版本 2 0
  • 使用 JavaScript 更改浏览器中的 URL,而不加载新页面

    我怎样才能有一个JavaScript可能会对当前页面产生一些影响 但也会更改浏览器中的 URL 的操作 因此如果用户点击重新加载或添加书签 则会使用新的 URL 如果后退按钮能够重新加载原始 URL 那就太好了 我正在尝试在 URL 中记录
  • Pylint 忽略特定名称[重复]

    这个问题在这里已经有答案了 我有 pylint 问题 即有时它会对某些变量 类 模块等重复相同的消息 但我找不到解决方法 我想说的是 pylint 不要使用某些选项或 rcfile 指令检查 此模块 模块 ZZZ 中的 消息 XXX 任何消
  • 有关如何将 SwipeRefreshLayout 与 ListView 结合使用的简单示例

    有人有关于如何将 SwipeRefreshLayout 与 ListView 一起使用的简单示例吗 这是我的情况 我有一个类 SynchDogs 从服务器提取数据 所以该类作为我的适配器的源 我想使用 SwipeRefreshLayout
  • -viewDidLoad 未在子类 UIViewController 中调用

    请耐心等待 我还在学习 Cocoa Touch 其他 viewDidLoad 未被调用问题与我的问题无关 我进行了搜索 I have FooViewController a UIViewController子类 FooViewControl
  • Web API 和 MVC 异常处理

    我们目前正在将 Web 表单系统重新开发为 Web API 和 MVC 这对我们来说是新技术 到目前为止 一切似乎都很好 但是我们正在努力将错误从 Web API 应用程序发送回 MVC 应用程序 我们意识到我们需要捕获任何异常并将这些异常
  • 在 pandas DataFrame/Series 中快速选择时间间隔

    我的问题是我想过滤 DataFrame 以仅包含间隔内的时间 开始 结束 如果不关心这一天 我只想过滤每天的开始和结束时间 我有一个解决方案 但速度很慢 所以我的问题是是否有一种更快的方法来进行基于时间的过滤 Example import
  • TestNG 使用多个 DataProvider 和单个测试方法

    我一直在寻找一种在我的测试方法中使用多个 DataProvider 的方法 我的场景如下 假设我们有一个 DataProvider 类 Test public class ExampleDataProvider Returns the li
  • 通过解释器突变混淆 python 字节码

    事实上 Dropbox 做得非常好 他们能够保护用 python 制作的桌面应用程序 我对此进行了很多研究 但没有比混淆更好的解决方案 这不是很安全的方法 您最终会看到您的代码上传到某个地方 我听了一个会议乔瓦尼 巴霍 PyInstalle