exe反编译为.py文件

介绍公司以前的一个exe包,我们需要查看里面python源码,但是以前的py源码文件找不到,所以只能反编译,介绍一下反编译的过程。

首先准备:

pyinstxtractor.py这个文件,网上很多,自己下载

准备查看二进制的工具Sublime

准备将pyc文件反编译为py文件的uncompyle6

接下来正式开始:

将pyinstxtractor.py和exe文件放到一个文件夹下,cmd进入

执行命令:pyinstxtractor.py preprocess.exe

解析的文件都放在preprocess.exe_wxtracted里面,在里面找到preprocess.pyc文件和struct.pyc文件

用sumline打开这俩个文件:

复制struct.pyc的第一行二进制到preprocess.pyc里面,保存

接下来安装uncompyle6:

执行命令:pip install uncompyle6

安装成功之后,cmd到preprocess.pyc的目录下

执行命令:F:\bianyi>uncompyle6 preprocess.pyc > preprocess.py

小错误记录一下:

Traceback (most recent call last):
File "f:\开发工具\py3.9\lib\site-packages\xdis\load.py", line 300, in load_module_from_file_object
co = marshal.loads(bytecode)
ValueError: bad marshal data (unknown type code)

原因是:复制struct.pyc的第一行二进制到preprocess.pyc里面,没保存

小错误记录:

F:\bianyi>uncompyle6 preprocess.pyc > preprocess.py
Unknown type 0
Unknown type 0
Unknown type 0
Unknown type 0
Unknown type 0
Unknown type 0
Unknown type 0
Unknown type 0
Unknown type 64 @
Traceback (most recent call last):
File "f:\开发工具\py3.9\lib\site-packages\xdis\load.py", line 304, in load_module_from_file_object
co = xdis.unmarshal.load_code(fp, magic_int, code_objects)
File "f:\开发工具\py3.9\lib\site-packages\xdis\unmarshal.py", line 562, in load_code
return um_gen.load()
File "f:\开发工具\py3.9\lib\site-packages\xdis\unmarshal.py", line 176, in load
return self.r_object()
File "f:\开发工具\py3.9\lib\site-packages\xdis\unmarshal.py", line 219, in r_object
return unmarshal_func(save_ref, bytes_for_s)
File "f:\开发工具\py3.9\lib\site-packages\xdis\unmarshal.py", line 517, in t_code
code = to_portable(
File "f:\开发工具\py3.9\lib\site-packages\xdis\codetype\__init__.py", line 200, in to_portable
return codeType2Portable(code, version_triple)
File "f:\开发工具\py3.9\lib\site-packages\xdis\codetype\__init__.py", line 43, in codeType2Portable
return Code3(
File "f:\开发工具\py3.9\lib\site-packages\xdis\codetype\code30.py", line 82, in __init__
self.check()
File "f:\开发工具\py3.9\lib\site-packages\xdis\codetype\code13.py", line 87, in check
assert (
AssertionError: co_code should be one of the types (<class 'str'>, <class 'bytes'>, <class 'list'>, <class 'tuple'>); is type <class 'NoneType'>

原因是:preprocess.pyc的第一行需要删除掉

删除第一行preprocess.pyc二级制

610d 0d0a 0000 0000 0000 0000 e300 0000

然后把struct.pyc第一行代码粘贴进去

170d 0d0a 089a 775a 0101 0000 e300 0000

再次执行:生成了preprocess.py文件

但是发现一个问题,依赖库文件是空的,没办法编译,还是拿不到python的源代码

介绍pyc:来自网上

1. 什么是 .pyc文件

.pyc文件 就是 Python的字节码(byte-compiled)文件。.py文件运行时,python会自动将其编译成PyCodeObject并写入.pyc文件,再有python虚拟机来执行PyCodeObject

2. 什么时候会生成pyc文件

当 一个模块 被 import 时,或者 .py文件(非top level script)被修改后,则会自动生成.pyc文件,目的是为了加快下次的运行速度。

.pyc文件不会被建立的一个原因,就是没有当前.py文件目录的权限。

python3 会生成一个 __pycache__ 目录,里面就包含pyc文件,一般的命名方式是:文件名.cpython-37.pyc,其中cpython-37是python版本号。

2.1 pyc什么时候会重新生成

• 在生成.pyc文件的同时,会写入了一个Long型的变量,用于记录最近修改的时间。 • 每次载入之前都先检查一下.py文件和.pyc文件的最后修改日期,如果一直,则会读取.pyc文件,否则会读取.py文件

3. 如何删除已有的.pyc文件

find /dir_path -name "*.pyc" | xargs rm -rf

4. 如何手动生成.pyc文件

方法一 参数形式

python -m py_compile target.py

方法二 导入模块

importpy_compilepy_compile.compile('target.py')

方法三 编译所有的.py文件

python -m compileall .

5. 如何阻止生成.pyc文件

方法一 -B 参数

使用 -B 参数

python -B target.py

方法二 设置环境变量

exportPYTHONDONTWRITEBYTECODE=1

方法三 参数设置

importsyssys.dont_write_bytecode=True

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/523.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

十八、动画与canvas

1.RequestAnimationFrame 早期定时动画 setTimeout和setInterval不能保证时间精度&#xff0c;第二个参数只能保证何时将代码添加到浏览器的任务队列 requestAnimationFrame(cb)的cb在浏览器重绘屏幕前调用 function updateProgress(){const div document.getElementById(d…

昨天某读者拿到华为OD岗位offer,今天来分享一下经验,包含华为OD机试

来自读者投稿&#xff0c;已经拿到华为 OD 开发岗位 offer&#xff0c;询问了一些问题&#xff0c;下面是他的一些经验。 文章目录华为 OD 投递简历华为 OD 机试分数OD 机试通过之后&#xff0c;收到综合测评OD 技术面&#xff08;时长 1 小时左右&#xff09;主管/HR 面试&…

从参数数量视角理解深度学习神经网络算法 DNN, CNN, RNN, LSTM 以python为工具

从参数数量视角理解深度学习神经网络算法 DNN, CNN, RNN, LSTM 以python为工具 文章目录1. 神经网络数据预处理1.1 常规预测情景1.2 文本预测场景2.全连接神经网络 DNN3.卷积神经网络CNN4.循环神经网络 RNN5.长短期记忆神经网络 LSTMʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔ…

PMP-项目管理知识体系概述

文章目录前言PMP-项目管理知识体系概述1. 项目管理知识体系三个维度1.1. 时间维度1.2. 管理维度1.3. 10大知识领域2. 十大知识领域之间的关系3. 项目管理的全链路3.1. 需求 -> 目标3.2. 目标 -> 计划3.3. 计划 -> 执行3.4. 执行 -> 收尾4. 项目管理类型分类说明4.1…

【Web APls简介】

Web APls简介1 本节目标2 Web APIs 和 JS 基础关联性2.1 JS组成2.2 JS 基础阶段以及 Web APIs 阶段3 API 和 Web API3.1 API3.2 Web API3.3 API 和 Web API 总结1 本节目标 说出 Web APIs 阶段与 JavaScript 语法阶段的关联性说出什么是 API说出什么是 Web API 2 Web APIs 和…

30岁了,说几句大实话

是的&#xff0c;我 30 岁了&#xff0c;还是周岁。 就在这上个月末&#xff0c;我度过了自己 30 岁的生日。 都说三十而立&#xff0c;要对自己有一个正确的认识&#xff0c;明确自己以后想做什么&#xff0c;能做什么。 想想时间&#xff0c;过得真快。 过五关斩六将&…

2021电赛国一智能送药小车(F题)设计报告

2021电赛国一智能送药小车&#xff08;F题&#xff09;设计报告 【写在前面的话】 电赛是一个很奇妙的过程&#xff0c;可能有些人觉得电赛的门槛太高&#xff0c;那便意味着&#xff0c;当你决定要参加电赛的那一刻起&#xff0c;这一段路、这些日子就注定不会太轻松&#xf…

顺序表——“数据结构与算法”

各位CSDN的uu们你们好呀&#xff0c;今天小雅兰的内容是数据结构与算法里面的顺序表啦&#xff0c;在我看来&#xff0c;数据结构总体上是一个抽象的东西&#xff0c;关键还是要多写代码&#xff0c;下面&#xff0c;就让我们进入顺序表的世界吧 线性表 顺序表 线性表 线性表&…

【LeetCode】剑指 Offer(25)

目录 题目&#xff1a;剑指 Offer 49. 丑数 - 力扣&#xff08;Leetcode&#xff09; 题目的接口&#xff1a; 解题思路&#xff1a; 代码&#xff1a; 过啦&#xff01;&#xff01;&#xff01; 写在最后&#xff1a; 题目&#xff1a;剑指 Offer 49. 丑数 - 力扣&…

【云原生】Linux进程控制(创建、终止、等待)

✨个人主页&#xff1a; Yohifo &#x1f389;所属专栏&#xff1a; Linux学习之旅 &#x1f38a;每篇一句&#xff1a; 图片来源 &#x1f383;操作环境&#xff1a; CentOS 7.6 阿里云远程服务器 Good judgment comes from experience, and a lot of that comes from bad jud…

MySQL对表操作

目录 CRUD 增加(Create) 查询&#xff08;Retrieve&#xff09; 全列查询 指定列查询 查询字段为表达式 别名 去重&#xff1a;DISTINCT 排序&#xff1a;ORDER BY 条件查询&#xff1a;WHERE 逻辑运算符&#xff1a; 修改&#xff08;Update&#xff09; 删除&…

「入门指南」轻松学习嵌入式 GPIO:从原理到应用一步到位

嵌入式系统是指在其他系统中嵌入的计算机系统&#xff0c;通常由微处理器或微控制器、内存和其他支持电路组成。嵌入式系统的应用领域非常广泛&#xff0c;涉及从智能家居设备到汽车控制系统&#xff0c;再到飞机、医疗设备等各种设备。对于嵌入式系统的应用&#xff0c;GPIO是…

我在字节当主管:百次面试结果,总结一个刷掉99%求职者的问题!

我一个在大厂当主管的朋友&#xff0c;跟我说&#xff1a;“现在招性能测试太难了&#xff0c;当然不是说没人干&#xff0c;一开招聘信息就能收到一大把简历&#xff0c;其中不乏学历亮眼、背景出色、简历里各种高并发、大流量的项目经验的人才。问题在于&#xff0c;当你提出…

【C++】模板初阶

文章目录泛型编程函数模板概念格式实例化匹配原则类模板定义格式实例化泛型编程 当我们的一个函数涉及到多个类型的处理时&#xff0c;我们就需要重载函数来实现&#xff0c;但是重载函数是存在一些局限性的。   重载函数仅仅是类型不同&#xff0c;代码的复用率较低&#xf…

【AcWing】蓝桥杯备赛-深度优先搜索-dfs(2)

目录 写在前面&#xff1a; 题目&#xff1a;94. 递归实现排列型枚举 - AcWing题库 读题&#xff1a; 输入格式&#xff1a; 输出格式&#xff1a; 数据范围&#xff1a; 输入样例&#xff1a; 输出样例&#xff1a; 解题思路&#xff1a; 代码&#xff1a; AC &…

使用new bing简易教程

申请new bing 首先先申请new bing然后等待通过&#xff0c;如下图 申请完&#xff0c;用edge浏览器&#xff0c;若有科学方法&#xff0c;就能在右上角的聊天进行向AI提问 使用插件来进行直接访问New Bing 在edge浏览器中安装一个插件&#xff0c;地址为&#xff1a;Mod…

HTML樱花飘落

樱花效果 FOR YOU GIRL 以梦为马&#xff0c;不负韶华 LOVE YOU FOREVER 实现代码 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html><head><meta http-equiv"…

Windows逆向安全(一)之基础知识(二)

反汇编分析C语言 空函数反汇编 #include "stdafx.h"//空函数 void function(){}int main(int argc, char* argv[]) {//调用空函数function();return 0; }我们通过反汇编来分析这段空函数 函数外部 12: function(); 00401048 call ILT5(func…

一款丧心病狂的API测试工具:Apifox!

你好&#xff0c;我是测试开发工程师——凡哥。欢迎和我交流测试领域相关问题&#xff08;测试入门、技术、python交流都可以&#xff09; 我们平时在做接口测试的时候&#xff0c;对于一些常用的接口测试工具的使用应该都非常熟悉了&#xff1a; 接口文档&#xff1a;Swagge…

2023年网络安全比赛--attack(新)数据包分析中职组(超详细)

一、竞赛时间 180分钟 共计3小时 任务环境说明: 1 分析attack.pcapng数据包文件,通过分析数据包attack.pcapng找出恶意用户第一次访问HTTP服务的数据包是第几号,将该号数作为Flag值提交; 2.继续查看数据包文件attack.pcapng,分析出恶意用户扫描了哪些端口,将全部的端口号…