Pyinstaller Repack 指南

查看 119|回复 10
作者:hitachimako   
Pyinstaller Repack 指南
大一牲,想要Patch一个抢学校图书馆座位的软件,却困于Pyinstaller程序的重打包,以此为契机研究了一下Repack的完整流程,避免接触难懂难修改的字节码,并使用了一个几乎无人知晓的工具pyinstaller-repacker(截至这篇文章完稿,仅有4个star)
0. 目标
本指南将用这个简单的例子教你如何:
  • 导出程序中所有的pyc文件
  • 反编译并阅读程序源码
  • 直接对源码进行修改,并Repack一个修改版

    1. 准备工具
  • 查看源程序Python版本的工具:pyinstxtractor
  • Repack工具:pyinstaller-repacker
  • 在线反编译器:PyLingual
  • 一个任意版本的 Python环境

    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]
  • 进入目录[源程序名]-repacker/FILES,在此处即可找到程序的入口点pyc,将其拖入PyLingual反编译器进行反编译:


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

    如图,发现入口点启动了igotolib_editable包含的App窗口,接着分析该文件
  • 进入目录[源程序名]-repacker/FILES/PYZ-00.pyz,找到其中的igotolib_editable.pyc,拖入反编译器:


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

    找到购买检测逻辑
    [/ol]
    4. 修改与重新打包
    [ol]
  • 点击反编译器右上角的蓝色下载按钮,即可将源码下载至本地。
  • 完全删除status检测逻辑,并加上一些Cracked信息:


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

    ]
  • 使用对应版本的Python环境将修改后的源码编译为pyc文件:python -m py_compile [源码]:


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

    如图,将会生成一个__pycache__文件夹,内含的文件即为修改后的pyc文件
  • 将修改后的pyc文件重命名为被替换的pyc文件名称,替换原pyc文件后,重新打包为exe:python .\pyinst-repacker.py build .\[源程序名]-repacker\


    图片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. 说明
  • 使用到的两个工具pyinstxtractor与pyinstaller-repacker已上传至附件
  • 即使使用的Python版本不对应,pyinstaller-repacker也能够从pyz中解压出文件,但是会导致无法反编译,所以请务必使用与源程序相同的Python版本!!
  • 经测试,PyLingual能够正确反编译3.13及以下所有版本的pyc

    源程序, 下载次数

  • Jx29   

    解包可以用pyinstxtractor-ng,而且还有web版本
    xiatao   

    刚看文章之前我还在想既然用了pyinstxtractor为啥不用pyinstxtractor-ng解包然后直接用Decompyle++反编译,直到看完文章试了下PyLingual ,居然之前遇到Decompyle++无法反编译的都支持了,666!
    hitachimako
    OP
      

    沙发,学习了,不过我一般是正向使用pyinstaller,怕破解的话可以用Themida加壳
    waimn   


    Jx29 发表于 2025-4-19 10:36
    解包可以用pyinstxtractor-ng,而且还有web版本

    虽然ng跨版本解包比较方便,但是好像不支持repack
    fanqie8   

    跨版本!!我的3.13版本无法反编译
    燃香小狼   

    这是好东西,不错,以后有需要解包的回来找
    gxlly   

    大一都这么厉害了,赞一个
    hitachimako
    OP
      

    Python的加密pye文件有解密的工具吗?
    chadzhao   


    gxlly 发表于 2025-4-20 09:31
    Python的加密pye文件有解密的工具吗?

    这个是用AES128 ECB模式加密的,要逆向_pyconcrete.pyd拿到密钥才行
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部