python - 将 python 逆向工程为字符串

标签 python import reverse-engineering

问题:是否可以将 python 对象逆向工程为字符串?


信息:我现在正在做一个项目,将我教授的研究分布在几十台计算机上,而不仅仅是他的。作为一名优秀的程序员,我正在使它成为一个通用程序,不仅可以用于他的特定程序。因此,将运行他的代码的计算机不会也不会有他的 .py 文件供他们导入。我过去解决这个问题的方法是他只需要将所有内容都放在一个文件中并将该文件的路径传递给我的系统,然后将该代码作为字符串从其状态导入(使用从中收集的信息this 问题)。

但这让我感到奇怪。我现在可以从一个字符串中导入并让代码执行得很好。一切都很好,但这让我思考,有没有办法让我绕过不得不让他将他的代码文件传递给我?特别是我想知道这样的事情。说他的文件里有所有这些:

def hello():
    print "Hello world!"

导入此文件后,“hello”将被添加到全局命名空间中。但现在我想通过网络传输它。你不能在“你好”时调用 pickle 并让它工作,我已经尝试过,pickle out right refuses。

在另一端,我让节点计算机使用“newMod.dict”中的执行代码来创建代码。因此,如果我可以使用“hello”并将其推送到某个返回给我的函数“def hello():\n print\"Hello world!\"”,这样我的 exec 方法就可以运行了。我会是金色的。然后我可以做到这一点,这样他就可以拥有不止 1 个文件,因为我可以对他拥有的任何非标准导入进行逆向工程。

老实说,我希望答案是否定的,但我认为值得一试。再简单说一遍,我想拿一个已经导入的模块,把它转成字符串。

最佳答案

虽然这不是一个好方法,但您可以只从函数中 pickle __code__...

>>> def foo():
...     print "Hello"

>>> import pickle
>>> code = pickle.dumps(foo.__code__)
>>> def bar():
...     pass

>>> bar()
>>> bar.__code__ = pickle.loads(code)
>>> bar()
Hello

关于python - 将 python 逆向工程为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6565293/

相关文章:

import - xcodebuild 导入 XLIFF 本地化

java - 如何在 Eclipse 中导入 Java 库?

c - “b++”的汇编

python - Heroku Python 远程拒绝错误

python - 在 Django QuerySet.values 调用中为 dict 键设置别名

python - 从 pandas 中的对象中选择

android - 如何从外部网页访问本地数据?

assembly - 轰炸实验室阶段 5 - 6 个字符字符串、movzbl 加载和 $0xf、%ecx,并用它索引一个数组?

encryption - 如何对加密算法进行逆向工程?

Python 2.7 - 帮助使用 API (HL7)