记录一次反编译pyInstaller打包的python脚本

  • 一次偶然,我在群里看到有人分享了一个脚本打包程序, 尝试运行此脚本显示如下图,可以看得出来这个exe程序是用python打包的。
    在这里插入图片描述

  • 用“python打包”这几个关键字在网上搜索了一下,发现一般都是用pyInstaller工具打包成单独的exe程序,为了确认下这个脚本是否也用pyInstaller工具打包,我打开IDE, 搜索字符串pyinstaller,找到了以下信息,可以判定是pyinstaller打包。在这里插入图片描述

  • 然后又在网上搜了一下,找找有没有反编译python打包之类的文章,不出所料有很多,一般大家都是用工具来提取源码,我依葫芦画瓢,自己亲自动手实验下能否提取。

  • 首先把工具找齐,有archive_viewer.py或pyinstxtractor.py脚本,以及二进制工具010Edit。
    archive_viewer.py在github上有,链接:https://github.com/pyinstaller/pyinstaller/blob/develop/PyInstaller/utils/cliutils/archive_viewer.py
    使用了下觉得pyinstxtractor.py这个脚本更好操作,那我就使用这个脚本来提取。

  • 运行上面的脚本前我先安装pyinstaller,(之前电脑安装的是2.7.13版本的python,暂时还不知道打包的exe脚本是用的哪个python版本,网上说要版本对应才可以,那就先试试。)在cmd命令窗口下运行pip install pyinstaller,出现了网络超时的错误,花了点时间找到错误原因,原来是我上网用的代理,所以要加上自己的代理地址–proxy=http://192.168.x.xxx:925,合在一起变成 pip install pyinstaller --proxy=http://192.168.x.xxx:925,但是又出现了新的问题,从图中可以看出是无法找到资源,下载中断了,最后指定安装了一个通用版本才解决(这个要去网上下到本地安装,地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyqt4),运行这个命令pip installer PyInstaller‑3.6‑py2.py3‑none‑any.whl,安装pyinstaller成功。
    在这里插入图描述---测试

  • 安装好pyinstaller工具后运行pyinstxtractor.py脚本,输入python pyinstxtractor.py zukang.exe,成功把打包的脚本解压出来了,运气好,我安装的python与目标打包的脚本版本一致。
    在这里插入图片描述

  • 解压出来会在当前目录下生成一个_extracted结尾的文件夹,里面包含一些脚本在独立运行时需要的动态库、python27还有一些其它的信息。
    在这里插入图片描述

  • 上图文件夹里面有个struct和zukang这两文件比较重要,用010edit打开这两个文件,发现zukang文件头少了一些信息,把struct文件头里面的前8个字节 03 F3 0D 0A 70 79 69 30 插入到zukang这个头文件里面,另存为zukang.pyc文件名。
    在这里插入图片描述
    在这里插入图片描述

  • 安装uncompyle工具,运行命令 pip install uncompyle6 --proxy=http://192.168.x.xxx:925,最后把pyc文件转换成源码,运行命令uncompyle6 -o . zukang.pyc,在当前目录下自动生成zukang.py。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值