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偏移等于这个就停止反编译