大一牲,想要Patch一个抢学校图书馆座位的软件,却困于Pyinstaller程序的重打包,以此为契机研究了一下Repack的完整流程,避免接触难懂难修改的字节码,并使用了一个几乎无人知晓的工具pyinstaller-repacker(截至这篇文章完稿,仅有4个star)
0. 目标
本指南将用这个简单的例子教你如何:
1. 准备工具
2. 解包源程序
[ol]
查看源程序打包使用的Python版本:

图片1.png (79.22 KB, 下载次数: 0)
下载附件
2025-4-19 03:15 上传
如图得知源程序打包使用的Python版本为3.8,所以我们要安装一个3.8版本的Python环境(此处不作管理多Python版本的教程,请自行管理环境),并在对应的Python版本中安装所需的依赖: pip install lxml lief
使用对应版本的Python环境运行pyinstaller-repacker脚本,解包源程序: python .\pyinst-repacker.py extract [源程序名]

图片2.png (125.33 KB, 下载次数: 0)
下载附件
2025-4-19 03:15 上传
运行至[+] Done!时,即为完成解包
[/ol]
3. 反编译源码
[ol]

图片3.png (231.29 KB, 下载次数: 0)
下载附件
2025-4-19 03:16 上传
如图,发现入口点启动了igotolib_editable包含的App窗口,接着分析该文件

图片4.png (166.42 KB, 下载次数: 0)
下载附件
2025-4-19 03:16 上传
找到购买检测逻辑
[/ol]
4. 修改与重新打包
[ol]

图片5.png (31.87 KB, 下载次数: 0)
下载附件
2025-4-19 03:16 上传
]

图片6.png (68.25 KB, 下载次数: 0)
下载附件
2025-4-19 03:16 上传
如图,将会生成一个__pycache__文件夹,内含的文件即为修改后的pyc文件

图片7.png (135.97 KB, 下载次数: 0)
下载附件
2025-4-19 03:16 上传
等待一段时间后运行至[+] Done!时,即为完成打包,在目录[源程序名]-repacker\中即可找到Repack后的程序。
[/ol]
5. 大功告成
测试程序,运行正常:

图片8.png (33.97 KB, 下载次数: 0)
下载附件
2025-4-19 03:16 上传
6. 说明