pyinstaller打包的.exe文件反编译成.py文件

原文地址:http://pluie.top/2020/09/03/pyinstaller打包的-exe文件反汇编成-py文件/

0x00 工具

pyinstxtractor

uncompyle6 安装命令如下:

pip install uncompyle6 

0x01 前言

在做ctf逆向题目时有时会遇到python写的.exe程序,如果能够将.exe反编译成python源码,就能更快解题。python打包exe文件有使用py2exe,pyinstaller,cx_Freeze,nuitka等方式,其中pyinstaller是最常用的方法。

0x02判断是否为pyinstaller打包的exe文件

IDA中打开字符串窗口,看到有一大堆Py_开头的字符串,可以判断是python写的程序

image-20200903215009571

接着再CTRL + F搜索 pyinstaller,如果搜索的到,就可以确定是pyinstaller打包

image-20200903215135862

0x03 .exe转.pyc

首先利用pyinstxtractor脚本将.exe文件转为.pyc文件,指令格式为

python pyinstxtractor.py  exe文件名称

image-20200903215811896

需要注意的是,如果你的本机python版本与写exe的python版本不同的话可能会失败。

最后一行显示,你可以反编译.pyc文件。

所以,我们就到生成的目录下找到.pyc文件。

注意:有时候会找不到pyc文件,这是因为生成的文件少了pyc文件头,所以我们要找到少了pyc文件头的文件。一般情况下,该文件在名称和exe名称相同的.manifest文件上面。如果不是,可以把没有后缀名的文件都试一试。

image-20200903222549282

0x04 添加pyc文件头

找到目录下名为struct的文件,用二进制编辑器打开,文件的前16个字节便是少掉的pyc文件头,将其添加到pyc文件偏移量为零的位置。

image-20200905001616558

注意,如果目录下本来就有.pyc文件也需要添加pyc文件头。

0x05 .pyc转.py

命令:

uncompyle6 -o 生成文件.py 目标文件.pyc

注意将pyc文件名改为XXX.pyc,否则会发生错误。

image-20200905002611490

0x06 总结

可能出现的问题:

  1. .exe转.pyc失败,可能原因是pyinstaller打包时的python版本与你的python版本不同。
  2. .pyc文件反编译失败,可能原因是pyc文件头没有正确添加。
原文地址:https://www.cnblogs.com/pluie/p/13621823.html