有什么方法可以反编译dll和/或.pyd文件以提取用Python编写的源代码?
提前致谢
是。 它之前被问过,所以我投票关闭它,这里是参考-stackoverflow.com/questions/5287253/
不是相同的问题(dll不是.pyc文件)! 我的想法不行! 也许转换为汇编代码,但是如何遵循数据/功能树?
谢谢你的协助。
@Torxed这确实不是一个相同的问题,pyd文件由Cython产生。 与pyc / bytecode不同,pyd文件是不包含原始python源的二进制文件。 尽管它不能防止逆向工程,但确实会使它变得困难得多,并阻止某人获得您代码的确切原始资源。
我假设.pyd / .dll文件是在Cython中创建的,而不是在Python中创建的?
无论如何,通常是不可能的,除非有专门针对文件最初使用的语言设计的反编译器。虽然我了解C,C ++,Delphi,.NET和其他一些反编译器,但我还没有听说过Cython反编译器。
当然,Cython要做的是先将您的Python [esque]代码转换为C代码,这意味着您可能更幸运地找到了C反编译器,然后根据反编译的C代码划分原始Python代码。至少,通过这种方式,您将处理从一种(相对)高级语言到另一种高级语言的翻译。
最坏的情况是,您必须使用反汇编程序。但是,从反汇编程序的输出中重新创建Python代码并不容易(这完全类似于从构成其细胞的蛋白质的化学式中区分大脑的生物学功能)。
您可能会在有关各种反编译器和反汇编程序的想法和建议上查看此问题,然后从那里进行调查。
感谢您的有用回复,病态请务必做一些额外的研究。
@YoussefImam我不同意此答案,请参阅我的答案stackoverflow.com/a/41075212/1422096
@Basj阅读更新的答案后,似乎Cython编译的.pyd文件毕竟没有嵌入源代码。如果您能证明是相反的话,我会很感兴趣,但是在那之前,我会坚持我的回答。
你是对的@Lav。
@Basj,是否可以对C代码进行逆向工程,那么,我需要对该软件进行逆向工程,它是用Python编写的,并且具有.pyd文件。
所以我认为我们可以使用。用于混淆的Pyd文件。 Py文件
我不同意接受的答案,似乎可以,即使在.pyd中也可以访问源代码的内容。
例如,让我们看一下如果出现错误会发生什么:
1)创建此文件:
whathappenswhenerror.pyx
A = 6
print 'hello'
print A
print 1/0 # this will generate an error
2)用python setup.py build编译:
setup.py
from distutils.core import setup
from Cython.Build import cythonize
setup(ext_modules = cythonize("whathappenswhenerror.pyx"), include_dirs=[])
3)现在,将.pyd文件导入标准的python文件中:
testwhathappenswhenerror.py
import whathappenswhenerror
4)让我们用python testwhathappenswhenerror.py运行它。这是输出:
hello
6
Traceback (most recent call last):
File"D:\testwhathappenswhenerror.py", line 1, in
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
如您所见,将显示.pyx源代码中的代码行print 1/0 # this will generate an error!甚至显示评论!
4之二)如果在步骤3)之前删除(或移到其他地方)原始.pyx文件,则不再显示原始代码print 1/0 # this will generate an error:
hello
6
Traceback (most recent call last):
File"D:\testwhathappenswhenerror.py", line 1, in
import whathappenswhenerror
File"whathappenswhenerror.pyx", line 4, in init whathappenswhenerror (whathappenswhenerror.c:824)
ZeroDivisionError: integer division or modulo by zero
但这是否意味着它不包含在.pyd中?我不
移动pyx表示回溯使用了从pyd(在Linux中为so)到pyx中的行的某种链接。该代码不在pyd中。
@Basj,如果pyx文件位于同一位置,并且在执行import whathappenswhenerror时,如何知道其导入.pyd而不是pyx?可能是其导入pyx,因此代码显示错误。
通过查看回溯(File"whathappenswhenerror.pyx", line 4),可以确定它正在使用pyx文件。