是否可以反编译.dll/.pyd文件以提取Python源代码?

是否可以反编译.dll/.pyd文件以提取Python源代码?,python,dll,decompiling,extraction,pyd,Python,Dll,Decompiling,Extraction,Pyd,有没有办法反编译dll和/或.pyd文件以提取用Python编写的源代码 提前感谢我假设.pyd/.dll文件是用Cython而不是Python创建的 无论如何,一般来说这是不可能的,除非有专门为文件最初编译所用的语言设计的反编译器。在我了解C、C++、Delphi、.NET和其他反编译程序的同时,我还没有听说过Cython decompiler。 当然,Cython所做的是首先将Python[esque]代码转换为C代码,这意味着您可能更幸运地找到C反编译器,然后根据反编译的C代码推测原始Py

有没有办法反编译dll和/或.pyd文件以提取用Python编写的源代码


提前感谢

我假设.pyd/.dll文件是用Cython而不是Python创建的

无论如何,一般来说这是不可能的,除非有专门为文件最初编译所用的语言设计的反编译器。在我了解C、C++、Delphi、.NET和其他反编译程序的同时,我还没有听说过Cython decompiler。 当然,Cython所做的是首先将Python[esque]代码转换为C代码,这意味着您可能更幸运地找到C反编译器,然后根据反编译的C代码推测原始Python代码。至少,通过这种方式,您将处理从一种(相对)高级语言到另一种语言的翻译

在最坏的情况下,您必须使用反汇编程序。然而,从反汇编程序的输出中重新创建Python代码并不容易(相当类似于从构成大脑细胞的蛋白质的化学公式中推测大脑的生物功能)


您可以查看关于各种反编译器和反汇编程序的想法和建议,然后从那里开始调查。

我不同意公认的答案,似乎是的,即使在
.pyd
中也可以访问源代码的内容

例如,让我们看看如果出现错误会发生什么:

1) 创建此文件:

WhenError.pyx出现了什么 2) 使用python setup.py build编译它:

setup.py 3) 现在将.pyd文件导入标准python文件:

testwhathappenswhenerror.py 4) 让我们使用python testwhathappenswhenerror.py运行它。以下是输出:

hello 
6 
Traceback (most recent call last):
  File "D:\testwhathappenswhenerror.py", line 1, in <module>
    import whathappenswhenerror
  File "whathappenswhenerror.pyx", line 4, in init whathappenswhenerror (whathappenswhenerror.c:824)
    print 1/0 # this will generate an error 
ZeroDivisionError: integer division or modulo by zero

但这是否意味着它不包含在.pyd中?我不确定。

不是同一个问题(dll不是.pyc文件)!我的主意不行!可能转换为汇编代码,但如何遵循数据/函数树?谢谢您的帮助。@Torred这确实不是同一个问题,pyd文件由Cython生成。与pyc/字节码不同,pyd文件是不包含原始python源代码的二进制文件。虽然它不能防止逆向工程,但它确实使它变得更加困难,并阻止某人获得您代码的确切原始源代码。感谢您的帮助性回复,我将确保做一些额外的研究。@YoussefImam我不同意这个答案,请参阅我的答案@Basj阅读您的更新答案,看来Cython编译的
.pyd
文件毕竟没有嵌入源代码。如果你能证明不是这样,我会很感兴趣,但在那之前,我会坚持我的答案。@Basj,有可能对C代码进行反向工程吗?那么,我需要对这个软件进行反向工程,它是用Python编写的,里面有.pyd文件。移动
pyx
表明回溯使用了从
pyd
so
在Linux中)到
pyx
中的行的某种链接。代码不在
pyd
@Basj中,如果pyx文件位于同一位置,并且当您执行
导入错误时出现的内容时,您如何知道它正在导入
.pyd
而不是
pyx
?很可能它正在导入
pyx
,因此代码显示错误。通过查看回溯(
文件“whathappenswhenerror.pyx”,第4行),您可以判断它正在使用
pyx
文件。确切地说,这个答案是不正确的。看起来,它是从.pyx导入的
from distutils.core import setup
from Cython.Build import cythonize
setup(ext_modules = cythonize("whathappenswhenerror.pyx"), include_dirs=[])
import whathappenswhenerror
hello 
6 
Traceback (most recent call last):
  File "D:\testwhathappenswhenerror.py", line 1, in <module>
    import whathappenswhenerror
  File "whathappenswhenerror.pyx", line 4, in init whathappenswhenerror (whathappenswhenerror.c:824)
    print 1/0 # this will generate an error 
ZeroDivisionError: integer division or modulo by zero
hello
6
Traceback (most recent call last):
  File "D:\testwhathappenswhenerror.py", line 1, in <module>
    import whathappenswhenerror
  File "whathappenswhenerror.pyx", line 4, in init whathappenswhenerror (whathappenswhenerror.c:824)
ZeroDivisionError: integer division or modulo by zero