有没有办法从正在运行的脚本中隐藏 python 语言版本?

luc*_*rot 6 python ctf

我正在考虑创建一个编码难题,其要点是不同版本的 python 的行为不同。为此,我想防止玩家提供的 python 脚本轻易地找出 python 版本。

我认为这些方法很微不足道

  • 调用函数或读取变量来获取版本。例如来自sys
  • 从环境变量中读取版本
  • 找出python安装路径并找到那里的版本

如果真的可以完全隐藏它,我会感到惊讶,因为 python 解释器必然需要能够访问它自己的文件。但就我的目的而言,让阅读版本变得比确定不同版本行为更困难就足够了。我怎样才能通过合理的努力做到这一点?

我愿意对发行版进行猴子修补,完全搞乱机器中的一些文件,甚至可能用不同的版本号自己构建 python 源,或者审计挂钩可能会有所帮助(在较新的版本中)。但我不清楚我到底需要注意什么。

小智 4

我认为至少有一些标准可以通过重新定义可以帮助用户找到版本的内置函数来实现。例如:

def wall():
    print('Did you really think it would be that easy?')

help = wall
Run Code Online (Sandbox Code Playgroud)

现在,每当用户尝试使用帮助功能时......

>>> help
<function wall at 0xb5b31bf8>
>>> help()
Did you really think it would be that easy?
>>> 
Run Code Online (Sandbox Code Playgroud)

这也适用于 sys.version。

import sys

def wall():
    print('Did you really think it would be that easy?')

sys.version = wall
Run Code Online (Sandbox Code Playgroud)

当你呼唤它时...

>>> sys.version
<function wall at 0xb5b2abf8>
Run Code Online (Sandbox Code Playgroud)

我对此进行了一些测试,我知道这样的方法行不通:

>>> help
<function wall at 0xb5bb1bf8>
>>> help = help
>>> help
<function wall at 0xb5bb1bf8>
Run Code Online (Sandbox Code Playgroud)

对于比我有更多编码经验的人来说,这可能很容易破解,并且它并没有涵盖您的所有标准,但尽管如此,我希望它有所帮助!