python逆向
为什么打包
Python脚本不能在没有安装Python的机器上运行。将脚本打包成exe文件发送给别人,即使他的电脑上没有安装Python解释器,这个exe程序也能在上面运行
这时候如果直接将这个exe文件拖入ida,会有大量的python内置解释器等冗余信息干扰逆向,并且无法很清楚的看到程序的真实逻辑
如何解包
pyinstxtractor
下载:
extremecoders-re/pyinstxtractor: PyInstaller Extractor (github.com)
使用:
1
| python pyinstxtractor.py test.exe
|
成功示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| C:\Users\86186\Desktop\pyinstxtractor-master>python pyinstxtractor.py game.exe [+] Processing game.exe [+] Pyinstaller version: 2.1+ [+] Python version: 3.8 [+] Length of package: 15340963 bytes [+] Found 134 files in CArchive [+] Beginning extraction...please standby [+] Possible entry point: pyiboot01_bootstrap.pyc [+] Possible entry point: pyi_rth_pkgres.pyc [+] Possible entry point: pyi_rth_win32comgenpy.pyc [+] Possible entry point: pyi_rth_pywintypes.pyc [+] Possible entry point: pyi_rth_pythoncom.pyc [+] Possible entry point: pyi_rth_inspect.pyc [+] Possible entry point: pyi_rth_pkgutil.pyc [+] Possible entry point: game.pyc [+] Found 212 files in PYZ archive [+] Successfully extracted pyinstaller archive: game.exe
You can now use a python decompiler on the pyc files within the extracted directory
|
逆向
然后就可以在解包的文件夹下找到python的主函数,是一个pyc文件,pyc文件时python编译后的文件,可以放到在线网站直接转换成py文件,即变为可读源码
在线Python pyc文件编译与反编译 (lddgo.net)
python反编译 - 在线工具 (tool.lu)
或者本地也可以反编译:
Uncompyle6 安装与使用
1
| pip install uncompyle6 //安装
|
1
| uncompyle6 -o test.py test.pyc //使用
|
和 pyinstxtractor使用类似,一条命令即可。
pycdc 安装与使用
pycdc支持到python3.11,uncompyle6不支持3.9即以上
安装与使用
可以看看UKFC一位大佬的文章
pycdc配置和使用-CSDN博客
Magic number
在反编译过程中,可能会遇到反编译不成功的情况,一般来说是因为出题人改了文件头,每个python版本的文件头是不一样的,手动修改文件头,即可继续将pyc反编译为py文件
python Magic Number对照表以及pyc修复方法 - iPlayForSG - 博客园 (cnblogs.com)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| enum PycMagic { MAGIC_1_0 = 0x00999902, MAGIC_1_1 = 0x00999903, /* Also covers 1.2 */ MAGIC_1_3 = 0x0A0D2E89, MAGIC_1_4 = 0x0A0D1704, MAGIC_1_5 = 0x0A0D4E99, MAGIC_1_6 = 0x0A0DC4FC,
MAGIC_2_0 = 0x0A0DC687, MAGIC_2_1 = 0x0A0DEB2A, MAGIC_2_2 = 0x0A0DED2D, MAGIC_2_3 = 0x0A0DF23B, MAGIC_2_4 = 0x0A0DF26D, MAGIC_2_5 = 0x0A0DF2B3, MAGIC_2_6 = 0x0A0DF2D1, MAGIC_2_7 = 0x0A0DF303,
MAGIC_3_0 = 0x0A0D0C3A, MAGIC_3_1 = 0x0A0D0C4E, MAGIC_3_2 = 0x0A0D0C6C, MAGIC_3_3 = 0x0A0D0C9E, MAGIC_3_4 = 0x0A0D0CEE, MAGIC_3_5 = 0x0A0D0D16, MAGIC_3_5_3 = 0x0A0D0D17, MAGIC_3_6 = 0x0A0D0D33, MAGIC_3_7 = 0x0A0D0D42, MAGIC_3_8 = 0x0A0D0D55, MAGIC_3_9 = 0x0A0D0D61, };
|