打包exe
打包python用pyinstaller这个库,命令为pyinstall -F --icon-xx.ico xxx.py
会直接生成一个exe可执行文件,免去给其他计算机用装环境的烦恼。
反编译exe
如果拿到一个pyinstaller编译的exe程序 如何拿到源码
需要用到pyinstxtractor.py,命令为python pyinstxtractor.py xx.exe,这时候会生成一部分文件,找到extracted结尾的文件夹 里面会又一些.pyc的文件,打开 https://tool.lu/pyc/ 网址,直接拖拽,得到源码
加密打包
如果我们不想让别人通过上面的方法看到我们的源码,我们可以在pyinstaller内加入--key=xxxx参数,这样别人在用的时候就不能通过pyinstxtractor.py 来拿到.pyc文件了。
使用pyinstaller的—key选项
操作如下:
- 安装Visual Studio 2017 Community, 需要用到它的c语言编译功能;
- 安装PyCrypto模块:
pip install PyCrypt i https://pypi.douban.com/simple, 需要调用该模块;
- 运行pyinstaller --key 0123456789 –F [other options]
- 对生成的exe破解时, 会报告Fail to decompress xx, probably encrypted. 破解输出的目录中生成的是xx.pyc.encrypted文件, 不再是xx.pyc.
- 注意: 只能加密py文件, 如果加密的模块是pyd文件, 则pyd文件会直接打包, 不会被加密.
- 听说密钥也一并打包到输出文件中了, 所以好像也不安全. 感觉还是pyd靠谱些, 至少差不多是C编译后的文件.
将py文件转为pyd格式
- 安装easycython模块 pip install easycython
- 使用easycython命令将py转pyd: easycython xx.py, 会在同一目录生成xx.pyd(如果是64位系统生成的文件名为xx.cp36-win_amd64.pyd);
- 将xx.cp36-win_amd64.pyd重命名为xx.pyd;
- 使用pyinstaller打包(由于xx.py和xx.pyd在同一目录, pyinstaller会优先打包pyd), 打包时添加—hidden-import xx选项.
- 生成的打包文件中会包含xx.pyd;
- 注意: 如果打包时使用了—key选项, 但打包的模块是pyd格式的, 则pyd文件不会被加密, 只是打包.