如何将 pyinstaller 生成的 .pyd 文件转换为源文件?

逆向工程 Python
2021-07-08 14:21:50

我已经反编译了一个 pyinstaller exe,然后反编译了其中的 .pyc 源代码。唯一的问题是来源是这个

import secretmodule
secretmodule.main()

烦人,我知道。我找到了 secretmodule 但它是一个 .pyd 并且我使用的反编译器只反编译 pyo 或 pyc。我搜索了如何反编译 pyd,但它说这几乎是不可能的,我认为 pyinstaller 使 pyd 不同,所以我继续。

如何反编译由 pyinstaller 专门制作的 pyd 文件

1个回答

这可能比将 pyc 转换为等效的 python 代码要困难得多

根据python文档

是的,.pyd 文件是 dll,但有一些区别。如果你有一个名为 foo.pyd 的 DLL,那么它必须有一个函数 PyInit_foo()。然后,您可以编写 Python “import foo”,Python 将搜索 foo.pyd(以及 foo.py、foo.pyc),如果找到,将尝试调用 PyInit_foo() 对其进行初始化。您不要将 .exe 与 foo.lib 链接,因为这会导致 Windows 要求存在 DLL。

请注意,foo.pyd 的搜索路径是 PYTHONPATH,与 Windows 用于搜索 foo.dll 的路径不同。此外,运行您的程序不需要 foo.pyd,而如果您将程序与 dll 链接,则需要 dll。当然,如果你想说import foo,foo.pyd 是必须的。在 DLL 中,链接在源代码中使用 __declspec(dllexport) 声明。在 .pyd 中,链接在可用函数列表中定义。

因此,您现在必须反转 pyd 文件中的本机代码,假设它是一个 DLL,并从导出开始。