混淆 Python 程序的技术和工具有哪些?

逆向工程 工具 混淆 Python
2021-07-07 05:14:55

这个问题与另一个有关 我只是想知道哪些技术适用,哪些技术可以在现实世界中找到来混淆 Python 程序(类似的问题可以在这里这里的stackoverflow 上找到)。

mikeazo 提到他的程序提供了一个自定义的 Python 解释器,但其他技术是什么?它们的效率如何?

4个回答

以下是使用自定义解释器打包 Python 应用程序时可以使用的技巧。

  1. 重新映射解释器的操作码
  2. 加密 pyc 文件(自定义解释器在导入前解密)
  3. 删除解释器中对 co_code 的访问(删除解释器的 codeobject.c 中的 code_memberlist 数组声明中对 co_code 的引用)
  4. 混淆/保护 python 解释器
  5. 不要捆绑诸如dis有助于逆向工程的模块(基本上对未混淆的 Python 程序进行逆向工程,注意您认为有用的所有模块/技术并将它们从自定义解释器中删除)
  6. 修改解释器,使其只能导入 pyc 文件(可以通过在解释器中移除编译模块或过滤来完成)
  7. 解热乡亲给进入自定义解释一些标准技术。在您的应用程序上测试这些并尝试禁用这些访问方法会使逆向工程师变得更加困难。
  8. 从解释器中删除 RE 可以调用以帮助他/她的功能,例如PyRunString(). 否则,他们可以附加调试器并运行任意 Python 代码。

参考

我不知道任何特定的 Python 混淆工具(可能是因为想要编写混淆代码的那种人不会用 Python 来做,除了娱乐/教育)。

但是,如果我确实需要混淆 Python 代码,我可能会使用您用于任何语言程序的相同技术。缺少工具意味着您需要编写自己的混淆器,但这并不难。

基本上,想想你会做什么来对程序进行逆向工程并将其转换为更难。

  • 让你的不变量变得复杂。将程序不变量转换为诸如`(x ** y) % p == 457' 或“这个数据结构代表一个弦图”之类的东西。这种不变量极不可能被静态或动态分析工具猜到,人类需要很长时间才能弄清楚。

  • 将不同方法的逻辑混合在一起。采取每一个好的设计实践并做相反的事情。将方法的一部分随机内联到其他方法中,然后重新排列代码。复制 CFG 的部分并在两个版本的对应点之间随机插入跳转,然后对它们进行变异,使它们不会明显重复。

  • 添加打包机。如果您只在实际需要执行代码时解密部分代码,并且使结果取决于程序状态,因此很难提前确定密钥,那么奖励指针。尽量确保原始程序永远不会立即出现在内存中。

混淆的主要挑战是它需要理解程序并且通常会损害性能。更极端的混淆仅适用于性能无关紧要且经受严密审查很重要的情况(即恶意软件)。

我认为来自 SO 的这些问题可能会有所帮助:

混淆 Python 代码?

如何保护 Python 代码?

Python代码混淆[关闭]

这个免费工具将混淆多模块 Python 源代码,同时保留从 3rd 方库导入的标识符。其他标识符也可以免于混淆。我在一个多年的项目中为自己使用它,但决定其他人也可以从中受益。