Python逆向特点

  • 在 exeinfo pe 中查看到文件信息:

CTF - Reverse_Python逆向1.png

  • 在文件信息中出现 PyInstaller 即为 Python 文件经过 pyinstaller 打包生成的可执行 .exe 文件

  • 这类由 Python 生成的可执行文件无法通过 IDA 反编译,需要使用 pyinstxtractor.py 文件进行解包得到 Python 的反编译文件 .pyc


Python 逆向流程

  1. 下载 pyinstxtractor.py 工具包:GitHub - extremecoders-re/pyinstxtractor: PyInstaller Extractor

CTF - Reverse_Python逆向2.png

  1. pyinstxtractor.py 文件置于 pyinstaller 打包成的 .exe 文件夹下

  2. 在该目录下执行 cmd,输入:

python pyinstxtractor.py exe文件名
  1. 转换后会在该目录下生成一个文件夹,其中必定存在一个无后缀名的 struct 文件,通过 exeinfo pe 可查看该文件为 .pyc 文件 【必要时可用它恢复文件头】

pyc 反编译

  • 安装 uncompyle6:
pip install uncompyle6
  • 在 .pyc 文件目录下,执行 cmd:
uncompyle6 pyc文件名
uncompyle6 -o py文件名 pyc文件名

若 Python 版本不对,会提示 KeyError: ‘3.10.4’ ( 3.10.4 为 Python 版本)


获取 pyc 文件头

  • 方法一,通过 Pycharm 手动生成 .pyc 文件,获取文件头

代码如下:

# 代码开头需导入py_compile
import py_compile

# 随意写正确的python代码即可
def print_hi(name):
	print(f'Hi, {name}')

if __name__ == '__main__':
	print_hi('PyCharm')

# 最后调用该函数进行编译操作,单引号中是保存路径
py_compile.compile(r'D:\py_project')
  • 方法二,通过 cmd 命令生成 .pyc 文件
python -m py_compile py文件名