Always keep a|

园龄:粉丝:关注:

2021-08-09 15:20阅读: 10966评论: 0推荐: 4

python逆向实战:反编译pyinstaller打包生成的exe

python逆向实战:反编译pyinstaller打包生成的exe

  1. 今天要逆向的软件叫you-dl.exe,它是一个pyinstaller生成的exe,它原本的名字和图标因为版权问题不能放出来了
    image

  2. 首先下载pyinstxtractor.py,github可下,然后在运行pyinstxtractor.py you-dl.exe(记得下pyhton)指令.

image

​ 为了避免被反编译,会进行一些混淆,使得pyinstxtractor转换出错。如下这个文件,使用pyinstxtractor.py进行转换时会报错,“Error : Unsupported pyinstaller version or not a pyinstaller archive”,意思就是说这不是一个pyinstaller打包的文件。

  1. 查看pyinstxtractor源码发现它会在文件末尾检测有没有MAGIC字段,没有找到就会报错

image

​ 往上追溯,可以看到标识MAGIC为 MEI\xxxxxx ,2.0版本的MAGIC位于 [end - 24] 处,2.1版本的MAGIC位于 [end - 88] 处。

image

​ 而当我们查看文件的二进制时,发现文件末尾都是些垃圾数据,根本没有 ‘MEI’ 标识

image

我们搜索一下,终于在上面的一个位置找到了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
image

  1. 我们就删除从’MEI’+88之后的所有垃圾数据。删除后的结果如下:

    image

image

修复后,可以正常转换了

image

  1. 但是我们打开解析后的文件夹you-dl.exe_extracted,发现PYZ-00.pyz_extracted是空的,PYZ-00.pyz_extracted非常重要,一般一个稍微大一点的项目都会分成多个py文件,甚至会依赖其他模块,这些被依赖的文件解析后都会放入PYZ-00.pyz_extracted中,可以说这里放的是核心代码。image

image

  1. 我们查看pyinstxtractor源码,发现它会检测PYZ-00.pyz的4到8个字节是否为MAGIC_NUMBER,而这个变量的值是由python的版本确定的,由第4步可知这个软件是由python3.7解释的

image

image

  1. 我下载了python3.7,使用它运行了pyinstxtractor.py,然后就可以正常解析了

image

image

哈哈,这个软件使用了youtube-dl框架.然后就是反编译pyc文件了,这个使用uncompyle6即可,这个工具网上有很多资料,我就不画蛇添足了。

本文作者:乘舟凉

本文链接:https://www.cnblogs.com/czlnb/p/15118864.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   乘舟凉  阅读(10966)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起