【问题标题】:How to reconstruct python source from loaded modules (sys.modules)?如何从加载的模块(sys.modules)重建python源?
【发布时间】:2011-04-02 01:56:51
【问题描述】:

如果您可以访问 sys.modules,是否可以为加载的模块构建人类可读的源代码?

人们告诉我你不能,但我确信在 Python 中这是可能的。

【问题讨论】:

    标签: python reverse-engineering decompiling


    【解决方案1】:

    您可以使用标准库的 dis 模块来反汇编 Python 编码的模块:这会产生绝对人类可读的源代码,而不是 Python 源代码,而是 字节码 来源。从煎蛋卷开始将鸡蛋重新组合起来有点困难。

    曾经有一个 Python 2.3 的反编译器(请参阅 here),但我不知道过去几年是否有人一直在维护它,这表明在开源中对这项任务没有太大兴趣社区。如果你不同意,你可以分叉那个项目,创建你自己的项目,目标是反编译 2.7(或任何你渴望反编译的 Python 版本),并吸引其他热衷于这项任务的人——如果你能找到他们,那就是。

    【讨论】:

    • ... 即使你得到了一个工作的反编译器(从结果工作的意义上说),它可能不会产生可读/可维护的源代码,至少不可靠。无论如何 +1。
    • 可能是的,很容易——一点也不。
    【解决方案2】:

    通常,源代码将在文件系统中,在可以从 sys.modules 中轻松发现的地方获得。

    for name, mod in sys.modules.items():
        try:
            fname = mod.__file__
        except AttributeError:
            continue
        if fname.endswith(".pyc"):
            fname = fname[:-1]
        try:
            fcode = open(fname)
        except IOError:
            continue
        code = fcode.read()
        # .. do something with name and code
    

    【讨论】:

      猜你喜欢
      • 2012-02-27
      • 2018-01-24
      • 2010-10-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-27
      相关资源
      最近更新 更多