如何还原PyInstaller打包的可执行文件

by LauCyun May 6 15:12:24 15,845 views

前段时间,忙于应急驱动人生挖矿病毒,该病毒程序是用Python编写,然后通过PyInstaller打包成可执行文件(体积为7MB左右),然而可对其还原成Python源代码,为此将我所用的还原方法分享出来。

至于,想了解PyInstaller打包过程的小伙们,可阅读:PyInstaller打包exe文件

0x0 判断文件是否PyInstaller打包

将文件拖进IDA进行反编译,选择view -> open subview -> string提取文件中的字符串内容,如下图所示:


图1 字符串资源

如果有如图1所示的字符串,则说明这个文件是由由Python编写,然后通过Pyinstaller将其打包成可执行文件文件。

0x1 还原方法

目前,有两种方法可以还原成.py文件,具体如下:

1. python-exe-unpacker

使用方法很简单,直接执行命令python python_exe_unpack.py -i <待还原文件>即可还原,如下图所示:


图2 python-exe-unpacker还原过程

当然也有可能还原失败,不过绝大多数情况下是可以使用的,报错如下:


图3 还原失败

如果还原失败,那接着尝试第二种方法。

2. pyi-archive_viewer

通过查看PyInstaller的文档,发现它提供pyi-archive_viewer这样一款工具,它可以提取可执行文件中Python代码。

根据官网的介绍,它的作用就是查看可执行文件中Python代码,详细介绍可参考官方文档:https://pyinstaller.readthedocs.io/en/stable/advanced-topics.html#using-pyi-archive-viewer

注:需要安装PyInstaller才能使用pyi-archive_viewer工具。

执行如下命令,即可查看可执行文件中Python代码:


图4 查看可执行文件中Python代码

如图5所示,将列出pnwxb.exe文件中集成Python包,然后选择需要提取的文件(如:ii),提取命令如下图所示:


图5 提取.pyc文件

但是还有一个问题,就是PyInstaller在打包.pyc时,会把.pyc的magic和时间戳去掉,所以需要手工修复。

修复之前,先看一下正常.pyc文件的magic和时间戳,如下图所示:


图6 pyc文件格式

图6红框中的前4个字节为文件magic(03 F3 0D 0A),后4个字节为时间戳(随机即可),所以需在ii.pyc添加如下图所示的8个字节即可修复:


图7 修复pyc文件

修复完成后,将.pyc文件解码成.py文件即可还原完成。

解码可使用uncompyle6工具,也可以在线解码https://tool.lu/pyc/https://python-decompiler.com/en/


图8 解码pyc为py文件

到此为止,已成功还原PyInstaller打包的可执行文件。

0x2 参考

Tags