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