亲测有效,测试环境:python3.7.4
今天尝试着反编译别人发的小工具(python生成的exe文件)。
第一步:上搜索引擎搜一下如何反编译,大概总结一下:
一、获取python的.pyc(即将exe解压)
参考链接:https://www.jianshu.com/p/4da8dada77bc
推荐另一篇关于防止python exe反编译的方法:https://blog.csdn.net/HW140701/article/details/93494869
总结一下:
1、拆解exe为pyc
将pyinstxtractor.py文件(下载链接:https://pan.baidu.com/s/1aNPOMd1a1-Ln0TucKw8JHw&shfl=sharepset)复制到Test.exe(需要反编译的文件)同目录下,鼠标光标停留在文件夹,按住键盘shift按钮同时右击鼠标右键,选择在此处打开命令窗口,运行cmd.exe,输入以下命令进行反编译:python pyinstxtractor.py Test.exe
python pyinstxtractor.py generate_can_struct.exe
解压后生成Test.exe_extracted的文件夹,打开,里面有两个文件需要用到:解压的exe文件名命名的文件,和struct文件,这两个文件都没有后缀名(这里文件格式没有显示为.pyc 查了一下可能是pyinstxtractor的问题,这不重要。)。
2、得到pyc文件
网上下载:010 Editor这个16进制编辑器,打开上述的两个文件。
(破解版:https://download.csdn.net/download/ly_561/11878527 或者也可以自行百度下载,也是百度运输过来的)
按照网上的教程都是从struct文件中获取前8个字节(magic)补充到目标文件,然后将目标文件另存为.pyc文件然后利用Easy Python Decompiler v1.3.2进行反编译遇到错误:Invalid pyc/pyo file - Magic value mismatch! 或者使用uncompyle6命令也是遇到错误!这应该就是magic码没有正确还原。
根据其他人的经验,将struct文件E3前面的16位复制到目标文件。
光标停留在在目标文件卡头位置,选择顶部编辑菜单栏->插入/改写->插入字节。
插入后,将struct文件E3前面的16字节复制替换目标文件新增的前16个字节,使得这两个文件中的版本信息和时间戳一致。
替换使之一致后将目标文件保存,另存为xxx.pyc文件(后缀名.pyc需要手动输入)。这样就得到了目标文件。
二、使用了uncompyle进行py还原
回到命令行,打开刚才得到的pyc文件目录,安装uncompyle
pip install uncompyle
运行命令:uncompyle6 目标文件.pyc > 最终文件.py
最后可以开开心心的查看源代码了
此方法适用于只有一个py文件的,多个文件合成一个exe的破解有待探索。