前言

闲来无事,就喜欢瞎折腾,之前用python打包过exe小工具,然后今天就突然想到,既然能打包,那就肯定能反编译成py文件,为了这个想法,就网上查资料,自己操作了一下

如果觉得我写的看不懂,可以去看这个,哈哈哈


逻辑

这个逻辑的话,其实很简单,但是里面的详细原理,就要再研究研究了(本人不才,只知其然,不知其所以然)

首先,.py文件打包生成exe文件的过程就不过多讲了,网上有很多资料,我之前文章也写过(利用pyinstaller打包)

然后说下反编译的过程,总体逻辑就两步:

1、将.exe反编译成.pyc的二进制文件
2、将.pyc文件反编译成.py文件

需要用到的插件有以下三个,这两个到网上找下资源,自己下载一下:

pyinstxtractor.py

uncompyle6

16进制编辑器(


然后下面说下具体操作步骤。

操作步骤

1.首先,这两个文件放到同一个文件路径下(exe文件就是此次需要反编译的文件,pyinstxtractor.py文件是需要下载的插件)

python做的exe怎么反编译 python生成的exe反编译_ide

然后在cmd命令行或者pycharm中执行以下命令:

python pyinstxtractor.py gxtest2023060101.exe

python做的exe怎么反编译 python生成的exe反编译_python_02

对应路径下会生成一个文件夹

python做的exe怎么反编译 python生成的exe反编译_反编译_03

2.然后将生成的文件夹中,对应的以下两个文件拷贝出来(其中一个是与exe文件名字相同的,没有后缀的) 

python做的exe怎么反编译 python生成的exe反编译_ide_04

3.然后用16进制编辑器打开上述两个文件,下图是struct文件,可以看出,struct文件和gxtest2023060101文件中都有E3字段,不同的是,struct文件中,在E3前面多了一行,所以要把这一行的数据拷贝到gxtest2023060101文件中(直接在这个工具中拷贝就行),拷贝完成后,将gxtest2023060101文件另存为gxtest2023060101.pyc文件(加个后缀)

 

python做的exe怎么反编译 python生成的exe反编译_pycharm_05

python做的exe怎么反编译 python生成的exe反编译_python做的exe怎么反编译_06

4.以上都做完后,最后执行命令: uncompyle6 -o gxtest2023060101.py gxtest2023060101.pyc

python做的exe怎么反编译 python生成的exe反编译_python做的exe怎么反编译_07

然后在文件夹中查看,就会发现新增一个.py文件

python做的exe怎么反编译 python生成的exe反编译_ide_08

 这个反编译的文件和原始文件,会有些不同,一是注释没有了,二是双引号变成单引号了

 

总结

整体来说不复杂,后面有时间可以再加一层加密,就是反编译过程中加密一层,这样可以避免别人破解自己的代码