逆向工程:Python反编译工具的一点介绍(如何还原pyc文件)

Posted 小哈里

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了逆向工程:Python反编译工具的一点介绍(如何还原pyc文件)相关的知识,希望对你有一定的参考价值。

文章目录

1、什么是pyc 文件?

pyc是一种二进制文件,是由py文件经过编译后,生成的可执行的字节码文件
pyc文件是可以跨平台部署的,类似Java的.class文件。

1.1 产生pyc文件

两种编译生成pyc文件的方法:
1、编译时选用 -m py_compile

# python -m py_compile test0.py

a = int(input())
b = int(input())
c = int(input())
print(a+b)
for i in range(c):
    print(i)

2、使用代码编译

import py_compile
py_compile.compile(r'test0.py') 

3、使用-O选项,将.pyc文件优化为.pyo文件(体积更小)

# python -O -m py_compile test0.py

1.2 pyc文件结构

pyc 文件由三大部分组成

  • 最开始 4 个字节是一个 Maigc int, 标识此 pyc 的版本信息
  • 接下来四个字节还是个 int, 是 pyc 产生的时间
  • 序列化的 PyCodeObject

PyObject的序列化格式结构

  • 参考资料:https://kdr2.com/tech/python/pyc-format.html

2、将pyc反编译为py

2.1 uncompyle(win / linux)

uncompyle6 input.pyc > output.py
uncompyle6 test2.pyc > test2.py

下载:https://github.com/rocky/python-uncompyle6
安装:pip install uncompyle
报错:ValueError: check_hostname requires server_hostname
解决:需要断开代理服务器

2.2 pycdc(linux)

将 python 字节码转换为可读的 python 源代码, 包含了反汇编 (pycads) 和反编译 (pycdc) 两种工具

使用
./pycdc xxxx.pyc # 得到py代码
./pycdas xxxx.pyc # 得到字节码

下载:https://github.com/zrax/pycdc
安装:

sudo apt install git   #安装git
sudo apt install cmake #安装cmake
git clone https://github.com/zrax/pycdc.git #下载pycdc到桌面

cd pycdc #进入到pycdc的目录
cmake .
make #安装pycdc工具

3、将exe反编译为pyc

python pyinstxtractor.py xxx.exe

下载:https://github.com/extremecoders-re/pyinstxtractor
备注:
1.0会去掉头部的struct,2.0已经解决了这个bug
注意: 需要将解包出来的pyc头部加上33 0d 0d 0a 00 00 00 00 00 00 00 00 e3 00 00 00
才能反编译出py

以上是关于逆向工程:Python反编译工具的一点介绍(如何还原pyc文件)的主要内容,如果未能解决你的问题,请参考以下文章

逆向工程:Python反编译工具的一点介绍(如何还原pyc文件)

关于反编译pyc的一点技巧

交互式反汇编器专业版IDA Pro的一点介绍

Python使用Python将Shellcode转换成汇编

Android 逆向工程 实践篇

Android逆向工具简单介绍