Python可执行文件反编译教程(exe转py)
作者:G4rb3n 发布时间:2022-05-07 19:37:11
python的便利性,使得如今许多软件开发者、黑客都开始使用python打包成exe的方式进行程序的发布,这类exe有个特点,就是可以使用反编译的方法得到程序的源码,是不是很神奇?我们接下来就开始学习如何反编译有python打包成的exe程序吧。PS:下面介绍的是使用比较广泛的pyinstaller的反编译方法。
下面是一个由pyinstaller打包的勒索病毒,我们通过其图标,就可以知道它是pyinstaller打包的。
反编译的第一步是将exe文件转换成pyc文件,这里使用的是pyinstxtractor,项目地址:
https://github.com/countercept/python-exe-unpacker/blob/master/pyinstxtractor.py
输入命令:python pyinstxtractor.py [filename]
,即可完成转换。PS:python要使用相对应的版本。
解压成功后,同路径下会出现一个[filename]_extracted的文件夹,这里面就包含了主程序lockyfud,我们要反编译的就是这个文件,其他的都是依赖库,如out00-PYZ-extracted文件夹里的都是库文件,我们不必关心。我们这时可能会纳闷,为什么该文件不是.pyc文件?这可能是pyinstxtractor的一点不足,转换出来的主程序格式不对,我们还需要对其进行手动修复。
我们需要在该文件起始位置加上8个字节的pyc头,由4字节的magic和4字节的时间戳组成,其中magic会因为python版本的不同而不同,那我们怎么知道是啥呢?有个技巧就是,查看struct文件的magic,直接复制过去。
添加完pyc头之后是这样的,新增了magic和时间戳:03 F3 0D 0A 00 00 00 00,然后保存为.pyc文件后,就完成修复了。
最后的工作就是将pyc反编译成py了,这里使用uncompyle6,使用命令:pip install uncompyle6
,即可完成安装。然后输入uncompyle6 [filename] > lock.py
,将文件反编译成py。
lock.py里的就是程序源码了。
这里补充一点,有些病毒程序,为了避免被反编译,会进行一些混淆,使得pyinstxtractor转换出错。如下这个文件,使用pyinstxtractor.py进行转换时会报错,“Error : Unsupported pyinstaller version or not a pyinstaller archive
”,意思就是说这不是一个pyinstaller打包的文件。
它就是个py可执行文件呀,怎么会说不是一个pyinstaller打包程序呢?那就从这问题入手呗,看看为什么会出现这个错误。
来到pyinstxtractor代码的第50行,原来代码逻辑是这样的,一旦读取不到MAGIC,就会报错,提示不是pyinstaller打包程序。
网上追溯,可以看到标识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。
我们在 ‘MEI' 后面发现了python27.dll,这个就是pylibname,看来这个是pyinstaller2.1打包的,所以我们就删除从'MEI'+88之后的所有垃圾数据。删除后的结果如下:
修复后,可以正常转换了,之后的步骤如上。
来源:https://blog.csdn.net/m0_37552052/article/details/88093427


猜你喜欢
- 一.运行效果先说两句,之前我在网上找的相关文章标题上写的是处理多连接,尼玛,全是假的。网上那些,根本不能异步处理多连接,不能主动给客户端发消
- 这篇文章主要介绍了Python使用configparser库读取配置文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考
- 什么是内存逃逸分析内存逃逸分析是go的编译器在编译期间,根据变量的类型和作用域,确定变量是堆上还是栈上简单说就是编译器在编译期间,对代码进行
- 安装:yum -y install php php-devel php-pear
- 首先简单介绍使用vue-router的四个基本步骤:(为了方便演示,所有代码都写在一个文件里)1.定义组件2.定义路由3.创建router实
- 一、软件下载与安装VScode下载地址:https://code.visualstudio.com/VScode的github项目地址(本文
- 本文实例为大家分享了js实现计算器功能的具体代码,供大家参考,具体内容如下在老师的带领下完成了这个简单的计算器,这是一个神奇的过程,计算器的
- MySQL中常用到判断符号,而不等于是比较常用的符号,下面讲解以下三种不等于符号符号意义<>不等于的最早用法,可移植性优于下面两
- 安装包 PyCharm笔者使用PyCharm2018.3.2,请根据机器是64位还是32位来选择对应的PyCharm版本。(相信绝大部分人都
- 本文实例为大家分享了python封装对象实现时间效果的具体代码,供大家参考,具体内容如下# 钟表import timeclass Clock
- MySql批量插入优化Sql执行效率实例详解itemcontractprice数量1万左右,每条itemcontractprice 插入5条
- 前言本文主要给大家介绍了关于不同版本中Python matplotlib.pyplot.draw()界面绘制异常的相关内容,分享出来供大家参
- XML、 XLink、 Namespace、 DTD、 Schema、 CSS、 XHTML...假如你从未接触XML, 或许你会感觉不知从
- 本文主要介绍如何通过python生成ppt文件,以及借助ppt模板来生成ppt环境python 3python-pptx安装pip3 ins
- Python 使用tf-idf算法计算文档关键字权重,并生成词云1. 根据tf-idf计算一个文档的关键词或者短语:代码如下:注意需要安装p
- 本文实例为大家分享了mysql5.7安装图文教程供大家参考,具体内容如下1.在官网下载解压缩版2.解压后配置默认文件新建个my.ini(可以
- 1.文件结构MySQLdb和pymysql的使用差不多阅读的小伙伴可以自己尝试实现2.实验效果3.主文件:main.pyimport MyS
- PS:下面是转过来的,用于记录下,这个不是正则的初衷,只是用了REGEXP而已,正则的更灵活更方便 将comment表中的author_ur
- 批量生成word文件场景:需要新建多个类似文件名比如:今天的事例是新建12个文件名为:保安员考试试卷1及答案.docx保安员考试试卷2及答案
- 今天看到一个教程,是关于Python安装pygame模块的。觉得很好,拿来分享一下。安装Python额,这个小题貌似在这里很是多余啊。但是为