参考链接:

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. 【NX二次开发】Block UI 操作按钮

    属性说明 常规         类型 描述     BlockID     String 控件ID     Enable     Logical 是否可操作     Group     Logical ...

  2. CMake 两种变量原理

    目录 [TOC] 1.两种变量的定义参考 2.两种变量的作用域原理及使用 1.Normal Variables (1).包含 add_subdirectory().function().(本质是值拷贝 ...

  3. WIN10无法进行Android应用开发真机调试解决方案

    在WIN10操作系统进行ANDROID开发真机调试时,遇到的问题主要归纳一下有以下几点: 一.没有打开"USB调试"项.这点不再赘述: 二.没有安装ADB Interface驱动: ...

  4. Unity3D学习笔记1——绘制一个三角形

    目录 1. 绪论 2. 概述 3. 详论 3.1. 准备 3.2. 实现 3.3. 解析 3.3.1. 场景树对象 3.3.2. 绘制方法 4. 结果 1. 绪论 最近想学习一下Unity3d,无奈发 ...

  5. 通过AI识图判断图片是否为小票

    先在百度智能云中创建一个应用加入以下标记功能(没有智能云账号可以去创建一个,创建应用也都是些基本操作) 本次只用到标记的功能. 此功能在图像识别下面. 创建应用后,页面会出现平台分配的密钥:API K ...

  6. 二QT中使用QTimer定时器

    QT中的定时器类叫QTimer(5.8以上版本才有),构造函数只需要提供父对象的指针 使用的话,需要调用QTImer的start方法,该方法以毫秒单位,每过指定毫秒时间,该类对象就会发出一个timeo ...

  7. 12.10、elk实用案例

    1.架构图: 服务器名称 ip地址 controller-node1(主) 172.16.1.90 slave-node1(从) 172.16.1.91 2.安装filebeat: filebeat不 ...

  8. oracle 日常运维

    1.查询表或存储过程.函数异常 select * from user_errors where name ='TEST_TABLE' 2.查询表是否存在 select * from user_tabl ...

  9. Octal Fractions java秒 C++

    Octal Fractions 题目抽象:   将八进制小数转换成十进制小树.小数的为数很大. 可以用java  中的BigDeciaml 秒掉.  time:297ms 1 import java. ...

  10. centos Gitlab AD 集成

    简述 Gitlab支持集成LDAP用户认证系统.兼容包括Microsoft Active Directory, Apple Open Directory, Open LDAP, 与389 Server ...