pyc反编译那些事儿

image

内容介绍

PyInstaller封装程序的反编译:

  1. 使用PyInstaller Extractor 提取由PyiIstaller生成的可执行文件内容
  2. 使用Uncompyle6进行反编译

PyiIstaller生成的可执行文件

如果要建立独立应用,那么需要把python的依赖包全部打包。
安装:

pip install pyinstaller

打包:

pyinstaller -F -w XXX.py

打包完成后,会建立两个文件夹,分别是builddist,可执行文件就在dist下面,同时需要把程序用到的文件放到同一个目录(如果用的是相对路径的话)
build下面有一个warn-UI.txt文件,如果打包完成后无法运行文件可以在此查看问题
以下是pyinstaller的常用选项

-h,--help	查看该模块的帮助信息
-F,-onefile	产生单个的可执行文件
-a,--ascii	不包含 Unicode 字符集支持
-d,--debug	产生 debug 版本的可执行文件
-w,--windowed,--noconsolc	指定程序运行时不显示命令行窗口(仅对 Windows 有效)
-c,--nowindowed,--console	指定使用命令行窗口运行程序(仅对 Windows 有效)
-o DIR,--out=DIR	指定 spec 文件的生成目录。如果没有指定,则默认使用当前目录来生成 spec 文件
-p DIR,--path=DIR	设置 Python 导入模块的路径(和设置 PYTHONPATH 环境变量的作用相似)。也可使用路径分隔符(Windows 使用分号,Linux 使用冒号)来分隔多个路径
-n NAME,--name=NAME	指定项目(产生的 spec)名字。如果省略该选项,那么第一个脚本的主文件名将作为 spec 的名字
-D,--onedir	产生一个目录(包含多个文件)作为可执行程序

使用PyInstxtractor提取 *.pyc 文件

工具准备:
PyInstaller Extractor 项目地址:https://github.com/extremecoders-re/pyinstxtractor

工作目录:

Mode                LastWriteTime         Length Name

----                -------------         ------ ----

-a----        2020/3/24     15:37       45937021 Main_cfg_editor.exe
-a----        2020/3/25     14:33          13194 pyinstxtractor.py

提取文件:

    python pyinstxtractor.py Main_cfg_editor.exe
[+] Processing Main_cfg_editor.exe
[+] Pyinstaller version: 2.1+
[+] Python version: 37
[+] Length of package: 45659005 bytes
[+] Found 2823 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_multiprocessing.pyc
[+] Possible entry point: pyi_rth_traitlets.pyc
[+] Possible entry point: pyi_rth__tkinter.pyc
[+] Possible entry point: Main_cfg_editor.pyc
[+] Found 1627 files in PYZ archive
[+] Successfully extracted pyinstaller archive: Main_cfg_editor.exe

You can now use a python decompiler on the pyc files within the extracted directory

使用Uncompyle反编译 *.pyc 文件

工作准备:

Uncompyle6 库的安装:

pip install uncompyle6

反编译:

uncompyle6 Main_cfg_editor.pyc > Main_cfg_editor.py

常见错误信息

Invalid pyc/pyo file - Magic value mismatch!

原因:由于每个 *.pyc 文件都有一个magic head,PyInstaller 生成 .exe 的时候会把.pyc 的 magic 部分去掉,在反编译的时候需要补齐,高版本 PyInstxtractor 2.0 已经解决这个问题。

如果需要手动补齐 magic head 的情况下:

使用16进制模式查看主文件与主文件目录下的 struct 文件,需要在主文件头插入16个字节与 struct文件保持一致(其中前4个字节是Python编译版本,要完全一致)
注意模板文件仅需要插入8个字节,与 struct 文件保持一致

ValueError: source code string cannot contain null bytes

通常在反编译后执行 *.py 文件时发生,原因时反编译后的文件中存在一些空字符。最简单的解决办法是把文本复制到其他文本编辑器(例如UltraEdit),然后复制回来。

如使用python 3.9 报错

Error: uncompyle6 requires Python 2.6-3.8

我们只需要给uncompile包加一个3.9支持

image

.pyc文件首部损坏

struct.pyc文件包含一个完整可用的首部,可以用来修复.pyc文件.

image

posted @ 2021-11-17 20:06  404p3rs0n  阅读(1091)  评论(0编辑  收藏  举报