pyc逆向——使用工具逆向

本文使用工具下载时间皆为2025/1/1时的最新版本,过去版本的工具出现的bug和需要微调的部分将不会在此讲解,请确保工具是在附件所指链接(官方仓库链接)中的最新版本。

​ pyc是现阶段python逆向中最简单的部分,我们站在巨人的肩膀上(pycdc、uncompyle6)可以更简单将机器码转化为python代码,只需要用工具转化pyc然后就能进行轻松愉快的python逆向了。

pycdc

linux编译

克隆项目

git clone https://github.com/zrax/pycdc.git

在对应的文件夹里进行编译

mkdir build
cd build
cmake ..
make

或者使用apt登工具来进行一键安装

windows

windows的安装方法本质是相同的,但是windows需要先安装一下gnu,各位师傅可以从网上搜索一下,记的配置到环境里

使用

pycdc [options] input.pyc

选项:
  -o <filename>  输出文件名 <filename>
  -c             指定加载已编译的代码对象。需要设置版本
  -v <x.y>       指定用于加载已编译代码对象的Python版本

pycdas相当于pycdc的详细版

Usage:  pycdas [options] input.pyc

Options:
  -o <filename>  输出文件名 <filename>
  -c             指定加载已编译的代码对象。需要设置版本
  -v <x.y>       指定用于加载已编译代码对象的Python版本
  --pycode-extra 在PyCode对象转储中显示额外字段
  --show-caches  不要在Python 3.11+反汇编中隐藏CACHE指令

uncompyle6

直接使用pip即可安装,但uncompyle6对高与3.9以上的版本并不是太支持

Usage: uncompyle6 [OPTIONS] FILES...

  Cross Python bytecode decompiler for Python bytecode up to Python 3.8.

Options:
  -A, --asm++ / --no-asm++      选择查看pvm字节码
  -a, --asm / --no-asm
  -g, --grammar / --no-grammar
  -t, --tree / --no-tree
  -T, --tree++ / --no-tree++    查看抽象语法树
  --linemaps / --no-linemaps    show line number correspondencies between
                                byte-code and generated source output
  --verify [run|syntax]
  -r, --recurse / --no-recurse
  -o, --output PATH
  --version                     查看版本
  --start-offset INTEGER        起始逆向偏移
  --stop-offset INTEGER         当pvm偏移等于这个就停止反编译