参考链接:

https://blog.csdn.net/qq_44198436/article/details/97314626?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

https://www.cnblogs.com/pcat/p/8990482.html

https://www.cnblogs.com/pcat/p/11625300.html

准备工作:

1. 下载pyinstxtractor.py(百度上搜):https://github.com/extremecoders-re/pyinstxtractor

2. 安装uncompyle6: pip install uncompyle6

3. 下载16进制编辑器:https://www.jb51.net/softs/557257.html#downintro2

为了验证效果,接下来从创建py开始一步步看结果。

第一步:自己写一个py打包成exe -- target_exe.py(简单的两数相加)

#!/usr/bin/env python
# _*_ coding: UTF-8 _*_
"""=================================================
@Project -> File : Python-20210127 -> target_exe.py.py
@IDE : PyCharm
@Author : Aimee
@Date : 2021/2/23 8:57
@Desc :
================================================="""
import sys def main():
print("target_exe started") # main()函数开始了
argc = len(sys.argv)
if argc == 3:
a = int(sys.argv[1])
b = int(sys.argv[2])
result = a + b # 两数相加
print("a + b =", result)
if a < 0 or a > 100: # 对a的作用域进行判断
print("a is not in [0, 100]")
if a > 0 and b > 0:
print("a and b >0") if __name__ == '__main__':
main()

target_exe.py->target_exe.exe

pyinstaller -F target_exe.py

将target_exe.py重命名为target_exe_origin.py

第二步:解压exe

将pyinstxtractor.py放在与exe同级目录下,运行

python pyinstxtractor.py target_exe.exe

会在当前目录生成一个target_exe.exe_extracted文件夹,里面会有一些没有后缀的文件名,target_exe就是我们需要进行反编译的文件。在正向编译过程中,生成的pyc会把python版本信息和时间戳去掉,但是反编译的时候我们需要将其补齐。

注意到在target_exe.exe_extracted还存在一个没有后缀名的文件struct,用16进制编辑器打开struct和target_exe文件。

两个文件都有E3,可以看到struct在E3的前面还有一段,应该就是Python版本和时间戳了,将前面一段复制到target_exe中,直接在16进制编辑器里面复制就好了。

保存,然后重命名target_exe为target_exe.pyc。

第三步:反编译pyc文件,得到target_exe.py

uncompyle6 -o target_exe.py target_exe.pyc

得到target_exe.py,那么现在将得到的target_exe.py和原本写的target_exe_origin.py进行对比,看看结果

可以发现,注释没有了,双引号变单引号,if-and变成两个if,功能没啥变化。

OK,反编译就讲到这里。

如何反编译Python写的exe到py的更多相关文章

  1. 反编译python打包的exe文件

    目录 1.前言 2.使用环境 3.还原过程 4.号外 5.exe文件和所用到的反编译工具 6.参考 7.去签名(补漏) 前言 拿到了利用驱动人生进行传播的病毒样本,发现是python打包成的exe文件 ...

  2. 反编译pyinstaller打包的exe安装包

    PyInstaller将Python文件打包为exe后如何反编译(破解源码)以及防止反编译 在这里分享一些技巧和经验给大家.辛苦撰文分享,转载或引用请保留本文作者信息及文章链接. 作者的环境: win ...

  3. 使用uncompyle2直接反编译python字节码文件pyo/pyc

    update:在Mac OS X版的September 10, 2014版(5.0.9-1)中发现安装目录中的src.zip已更换位置至WingIDE.app/Contents/Resources/b ...

  4. uncompyle2反编译python的.py文件

    前几天学用github,一不小心把a.py文件给删除了,由于1天没有提交,也无法找回.突然发现同a.py文件生成的编译文件a.pyc还在,逐去搜索一番反编译的方法. 查询得知python比较好的工具u ...

  5. 反编译.net下的exe程序

    1. 什么叫.net平台 .NET框架是一个多语言组件开发和执行环境,它提供了一个跨语言的统一编程环境..NET框架的目的是便于开发人员更容易地建立Web应用程序和Web服务,使得Internet上的 ...

  6. python的exe反编译

    目录 python的exe反编译 方法一.使用archive_viewer.py提取pyc 方法二.使用pyinstxtractor.py提取pyc python的exe反编译 驱动人生样本为pyth ...

  7. 对Python源码加密及反编译前后对比

    关于python的加密 目前软件开发商对 Python 加密时可能会有两种形式,一种是对python转成的exe进行 保护,另一种是直接对.py或者.pyc文件进行保护,下面将列举两种形式的保护流程. ...

  8. python反编译之字节码

    如果你曾经写过或者用过 Python,你可能已经习惯了看到 Python 源代码文件:它们的名称以.Py 结尾.你可能还见过另一种类型的文件是 .pyc 结尾的,它们就是 Python "字 ...

  9. C# exe dll防止反编译-- dotNET_Reactor

    新建两个VS C#工程test.sln 和 reactor.sln test工程代码中初始化时,删除reactor.exe 生成test工程 用软件 dotNET_Reactor 设置,保存成 set ...

随机推荐

  1. 一、安装Tomcat服务器

    [root@ web1 ~]# yum -y install java-1.8.0-openjdk   #安装jdk [root@web1 ~]# yum -y install java-1.8.0- ...

  2. 用MAILX 发送邮件

    使用 25 端口发送 mail 编辑/etc/mail.rc 文件,添加以下信息vi /etc/mail.rc set from=xxx@163.com smtp=smtp.163.comset sm ...

  3. 【SQLite】教程05-SQLite创建数据库、附加、分离数据库

    创建数据库 .quit命令 退出sqlite 提示符 .quit .dump 命令 使用 SQLite .dump 点命令来导出完整的数据库在一个文本文件中,如下所示: sqlite3 Test.db ...

  4. 如何使用perf进行程序分析

    1.安装. sudo apt-get install linux-tools 如果提示没有可安装候选.请输入: sudo apt-get install linux-perf-version 其中ve ...

  5. Django(65)jwt认证原理

    前言 带着问题学习是最有目的性的,我们先提出以下几个问题,看看通过这篇博客的讲解,能解决问题吗? 什么是JWT? 为什么要用JWT?它有什么优势? JWT的认证流程是怎样的? JWT的工作原理? 我们 ...

  6. Webflux请求处理流程

    spring mvc处理流程 在了解SpringMvc的请求流程源码之后,理解WebFlux就容易的多,毕竟WebFlux处理流程是模仿Servlet另起炉灶的. 下面是spring mvc的请求处理 ...

  7. 4.2tensorflow多层感知器MLP识别手写数字最易懂实例代码

    自己开发了一个股票智能分析软件,功能很强大,需要的点击下面的链接获取: https://www.cnblogs.com/bclshuai/p/11380657.html 1.1  多层感知器MLP(m ...

  8. windows+R键的应用

    windows+R:然后输入以下几个命令 1.cmd :用于Windows命令行操作,比如:ping某个网络,看看是不是通的,或者directory等等Windows命令行操作 2.远程桌面连接:ms ...

  9. Linux 中的 AutoHotKey 键映射替代方案

    1. Windows 之 AutoHotKey 初次了解AutoHotKey,是在Win 下最爱效率神器:AutoHotKey | 晚晴幽草轩这篇博客中,博主有对AutoHotKey作详细介绍,这里不 ...

  10. C#调用JAVA(一)制作jar包

    1 //AndroidJavaClass类可以理解为某一个类 2 //AndroidJavaObject类可以理解为某一个类中的一个对象 打开AS,创建一个空项目 输入项目名,包名,本地路径以及语言之 ...