如何从加载的模块(sys.modules)重建python源?

时间:2010-08-21 16:45:44

标签: python reverse-engineering decompiling

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

人们告诉我你不能,但我确信它可以在Python中使用。

2 个答案:

答案 0 :(得分:4)

您可以使用标准库的dis模块来反汇编Python编码的模块:它产生绝对人类可读的源,而不是 Python 源,而是字节码< / em>来源。从煎蛋卷开始将鸡蛋放回原处是一件困难的事。

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

答案 1 :(得分:0)

通常,源代码将在文件系统中可用,可以从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