Python可执行文件反编译教程(exe转py)

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之后的所有垃圾数据。删除后的结果如下:

修复后,可以正常转换了,之后的步骤如上。

到此这篇关于Python可执行文件反编译教程(exe转换py)的文章就介绍到这了,更多相关Python可执行文件反编译内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 关于使用python反编译apk签名出包的问题

    demo实现脚本下载 安装工具 需要python3,apktool.jar,apktool 1.用apktool进行反编译 cmd = 'apktool d -f '+apkPath+' -o '+outPath 2.修改需要配置的参数值 说明:如果是AndroidManifest.xml,注意在 parse 前 一定要设置namespace, 不然就会出现 ns0:name错误, 而不是预期的 android:name,设置namespace的方法 ET.register_namespace(

  • python 反编译exe文件为py文件的实例代码

    我们用pyinstaller把朋友文件打包成exe文件,但有时候我们需要还原,我们可以用pyinstxtractor.py 用法: python pyinstxtractor.py xxx.exe 之后得到一个这样结构的文件夹 --- xxx.exe_extracted -- out00-PYZ.pyz_extracted - 各种.pyc文件 -- out00-PYZ.pyz -- some -- others -- xxx(注意这些都是没后缀的) 然后再终端pip install uncom

  • python反编译学习之字节码详解

    前言 如果你曾经写过或者用过 Python,你可能已经习惯了看到 Python 源代码文件:它们的名称以.Py 结尾.你可能还见过另一种类型的文件是 .pyc 结尾的,它们就是 Python "字节码"文件.(在 Python3 的时候这个 .pyc 后缀的文件不太好找了,它在一个名为__pycache__的子目录下面.).pyc文件可以防止Python每次运行时都重新解析源代码,该文件大大节省了时间. Python是如何工作的 Python 通常被描述为一种解释语言,在这种语言中,你

  • python反编译教程之2048小游戏实例

    目录 一.背景 二.工具准备 1.pyinstxtractor.py脚本用于反编译python 2.winhex用于编辑16进制的软件 三.反编译 1.放置脚本 2.运行脚本 3.找到软件名文件和struct文件 4.托入winhex进行对比 5.将struct多出的那一行复制到puzzle前面 6.更改其后缀为.pyc 7.安装第三方库uncompyle 8.python版本为3.8以下可以调用uncompyle 9.python版本为3.8以上可以选择在线工具(.pyc>.py) 10.最后

  • Python可执行文件反编译教程(exe转py)

    python的便利性,使得如今许多软件开发者.黑客都开始使用python打包成exe的方式进行程序的发布,这类exe有个特点,就是可以使用反编译的方法得到程序的源码,是不是很神奇?我们接下来就开始学习如何反编译有python打包成的exe程序吧.PS:下面介绍的是使用比较广泛的pyinstaller的反编译方法. 下面是一个由pyinstaller打包的勒索病毒,我们通过其图标,就可以知道它是pyinstaller打包的. 反编译的第一步是将exe文件转换成pyc文件,这里使用的是pyinstx

  • 使用SNK密钥文件保护你的DLL和代码不被反编译教程

    大家做项目开发一般都是分层的,比如UI层,业务层,数据访问层.业务层引用数据访问层的DLL(比如dataAccess.dll),并使用dataAccess.dll中的方法.当项目完成并给客户用了,可有些心里BT的客户这个时候也可以请个稍微懂NET的人来引用你的dataAccess.dll并调用其中的方法搞破坏.比如可以直接使用里面的ChangePwd(string UserName,string Pwd)方法把其他用户的密码改了,这个时候就你就....... 好了,该开始说怎么保护我们的代码了:

  • PyInstaller将Python文件打包为exe后如何反编译(破解源码)以及防止反编译

    环境: win7+python3.5(anaconda3) 理论上,win7及以上的系统和python任意版本均可. 一.基础脚本 首先我们构建一个简单的脚本,比如输出一串数字.文本之类,这里我们输出一串文字的同时计算一下3次方好了. # -*- coding: utf-8 -*- """ Created on Wed Aug 29 09:18:13 2018 @author: Li Zeng hai """ def test(num): pri

  • 在Python反编译中批量pyc转 py的实现代码

    什么是pyc文件 pyc是一种二进制文件,是由py文件经过编译后,生成的文件,是一种byte code,py文件变成pyc文件后,加载的速度有所提高,而且pyc是一种跨平台的字节码,是由python的虚拟机来执行的,这个是类似于JAVA或者.NET的虚拟机的概念. 使用uncompyle6可以将pyc文件转换为py文件,因此,也可以调用CMD进行批量操作,代码如下: import os import sys def walk_dir(dir,topdown=True): words=[] wor

  • Android APK反编译图文教程

    在学习Android开发的过程你,你往往会去借鉴别人的应用是怎么开发的,那些漂亮的动画和精致的布局可能会让你爱不释手,作为一个开发者,你可能会很想知道这些效果界面是怎么去实现的,这时,你便可以对改应用的APK进行反编译查看.下面是我参考了一些文章后简单的教程详解. (注:反编译不是让各位开发者去对一个应用破解搞重装什么的,主要目的是为了促进开发者学习,借鉴好的代码,提升自我开发水平.) 测试环境: win 7 使用工具: 我们下载地址: apktool (资源文件获取)  下载        

  • Python将py文件编译为exe文件

    使用PyCharm工具写好的Python程序脚本,怎么将.py文件编译为可执行的.exe文件 前提是已经安装了Python环境. 第一步:在PyCharm内下载安装pyinstalle库或使用CMD安装 PyCharm内安装: File->Settings->Project Interpreter->添加相应的包 或者使用CMD安装,提示安装成功即可pyinstaller pip install pyinstaller 第二步:进入pyinstaller .exe所在的文件夹内,进入CM

  • Pyinstaller加密打包成反编译可执行文件

    目录 前言 PYD 打包 说明 前言 了解 Python 的都知道 Pyinstaller 可以将 .py 文件打包成 windows 下可执行的 .exe 文件, 但是在我们不想让他人反编译获取源码的时候就显得无能为力, 此时我们可以了解 .pdy 文件. PYD pyc 是二进制文件, 是由 Python 编译器进行编译后生成的文件, 加载速度快.pyo 是优化编译后的二进制文件, 可以通过 python -O file.py 生成.pyd 则是 Python 的动态链接库, 由其他语言编写

随机推荐