python逆向实战:反编译pyinstaller打包生成的exe
python逆向实战:反编译pyinstaller打包生成的exe
-
今天要逆向的软件叫
you-dl.exe
,它是一个pyinstaller
生成的exe,它原本的名字和图标因为版权问题不能放出来了
-
首先下载
pyinstxtractor.py
,github
可下,然后在运行pyinstxtractor.py you-dl.exe
(记得下pyhton
)指令.
为了避免被反编译,会进行一些混淆,使得pyinstxtractor
转换出错。如下这个文件,使用pyinstxtractor.py
进行转换时会报错,“Error : Unsupported pyinstaller
version or not a pyinstaller
archive”,意思就是说这不是一个pyinstaller
打包的文件。
- 查看
pyinstxtractor
源码发现它会在文件末尾检测有没有MAGIC
字段,没有找到就会报错
往上追溯,可以看到标识MAGIC为 MEI\xxxxxx
,2.0版本的MAGIC位于 [end - 24] 处,2.1版本的MAGIC位于 [end - 88] 处。
而当我们查看文件的二进制时,发现文件末尾都是些垃圾数据,根本没有 ‘MEI’ 标识
我们搜索一下,终于在上面的一个位置找到了MAGIC,这个就是pyinstaller
标识。接下来就是要把垃圾数据去除掉,使MAGIC位于24或88的位置,那到底是24还是88呢?(该文件是pyinstaller2.0
还是pyinstaller2.1
打包的),这就得看下2.0和2.1的区别了。与2.0相比,2.1多了64字节的pylibname
,那我们就看看该文件里存不存在pylibname
。这里找到了python37.dll
明显是2.1
-
我们就删除从’MEI’+88之后的所有垃圾数据。删除后的结果如下:
修复后,可以正常转换了
- 但是我们打开解析后的文件夹
you-dl.exe_extracted
,发现PYZ-00.pyz_extracted
是空的,PYZ-00.pyz_extracted
非常重要,一般一个稍微大一点的项目都会分成多个py
文件,甚至会依赖其他模块,这些被依赖的文件解析后都会放入PYZ-00.pyz_extracted
中,可以说这里放的是核心代码。
- 我们查看
pyinstxtractor
源码,发现它会检测PYZ-00.pyz
的4到8个字节是否为MAGIC_NUMBER
,而这个变量的值是由python
的版本确定的,由第4步可知这个软件是由python3.7
解释的
- 我下载了
python3.7
,使用它运行了pyinstxtractor.py
,然后就可以正常解析了
哈哈,这个软件使用了youtube-dl
框架.然后就是反编译pyc
文件了,这个使用uncompyle6
即可,这个工具网上有很多资料,我就不画蛇添足了。
本文作者:乘舟凉
本文链接:https://www.cnblogs.com/czlnb/p/15118864.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具