官方品质家居装修改造门户

Python exe 文件反编译为 Python 脚本

不秃头程序员 2026-02-17 09:20:00 39 次阅读
Python exe 文件反编译为 Python 脚本
导读:前言将Python可执行文件(.exe)反编译为Python脚本是一项有趣的技术挑战,可以帮助我们理解程序的工作原理,以及可能包含的逻辑和算法。虽然反编译不是一项简单的任务,并且对于使用各种保护措施的

前言

将Python可执行文件(.exe)反编译为Python脚本是一项有趣的技术挑战,可以帮助我们理解程序的工作原理,以及可能包含的逻辑和算法。虽然反编译不是一项简单的任务,并且对于使用各种保护措施的程序可能无效,但对于一般情况下的Python可执行文件,我们可以尝试使用一些工具来进行反编译。

下面我们就来学习如何将Python可执行文件(.exe)反编译为Python脚本。

版本反编译

反编译是将已编译的程序代码还原为其原始源代码的过程。在Python中,由于其解释性质,通常没有像编译语言那样生成的二进制文件,但是我们可以将Python脚本转换为字节码文件(.pyc),而.exe文件通常是由pyinstaller、cx_Freeze等工具编译生成的。

Python可执行文件(.exe)反编译

Python可执行文件(.exe)反编译为Python脚本主要分为两个步骤,(1)从.exe文件中提取pyc文件(2)将pyc文件转换为Python脚本。

打包一个简单的.exe可执行文件
__name__=="__main__":_info()使用pyinstaller构建可执行.exepyinstaller--onefile-pvenv/Lib/site-packages.\print-student\
提取pyc文件

使用脚本提取

pyi-archive_viewer是PyInstaller自己提供的工具,它可以直接提取打包结果exe中的pyc文件。

详细介绍可参考官方文档:

补全非入口类文件pyz_dir="_extracted/_extracted"forpyc_(pyz_dir):pyc_file_src=f"{pyz_dir}/{pyc_file}"pyc_file_dest=f"pycfile_tmp/{pyc_file}"print(pyc_file_src,pyc_file_dest)withopen(pyc_file_src,"rb")asread,open(pyc_file_dest,"wb")aswrite:((12))(b"\0"*4)(())

转换补全后的pyc文件

uncompyle6反编译

如:uncompyle6.\pycfile_tmp\(3425)Embeddedfilename:,3.9.0,fordecompilationUnsupportedPythonversion,3.9.0,fordecompilation

由于我使用的是3.9.0版本,uncompyle6不再支持decompilation,有兴趣的朋友可以去试试。

在线工具

我们也可以使用一些在线工具进行解密,比如:

反编译结果

可能遇到的问题

_extracted文件为空

构建.exe文件Python版本和解压包时使用的版本不一致,比如我使用进行解包:

Python.\\[*]Processing.\[*]Pyinstallerversion:2.1+[*]Pythonversion:312[*]Lengthofpackage:7675728bytes[*]Found60filesinCArchive[*]Beginningextractionpleasestandby[!]Warning:ThescriptisrunninginadifferentpythonversionthantheoneusedtobuildtheexecutableRunthisscriptinPython312topreventextractionerrors(ifany)duringunmarshalling[!][*]Successfullyextractedpyinstallerarchive:.\directory#查看解压后的文件\print-student\_extracted\_extractedls\print-student\_extracted\_extracted
如何防止exe被反编译

我们可以在打包命令后面添加--key参数来进行加密,例如:

pyinstaller--onefile-pvenv/Lib/site-packages.\print-student\'1234'

再次解压,抽取的中间结果变为了.,无法正常反编译。

思考

=

可以看到在加密参数已经被废弃,大家可以思考一下原因。

总结

反编译Python可执行文件可以帮助我们理解程序的工作原理和逻辑,但在实践中可能会受到许多因素的限制。对于复杂的程序,反编译可能只是了解其工作原理的第一步,可能需要进一步的分析和研究。最后,我们需要明白技术没有好坏,需要谨守道德和法律的底线。