Python exe 文件反编译为 Python 脚本

2026-02-17

    前言

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

最近发表
标签列表