当前位置: 首页 > article >正文

从Python打包exe到逆向分析:一次搞定pyinstxtractor和uncompyle6的使用

Python逆向工程实战从打包exe到源码还原的完整指南逆向分析Python打包的exe文件是一项兼具挑战性和实用性的技能。无论是安全研究人员、开发者还是技术爱好者掌握这项技术都能让你在面对未知Python程序时游刃有余。本文将带你深入探索Python逆向工程的完整流程从解包exe到反编译pyc文件最终还原出可读的Python源代码。1. Python打包exe的基本原理Python程序通常通过PyInstaller、py2exe等工具打包成独立的可执行文件。理解这些工具的工作原理是逆向分析的第一步。PyInstaller打包exe的核心机制是将Python解释器、依赖库和脚本代码整合到一个可执行文件中。当用户运行这个exe时它会创建一个临时目录解压嵌入的Python环境加载并执行主脚本典型的PyInstaller打包文件结构可执行文件 ├── Python解释器 ├── 依赖库 │ ├── 标准库 │ └── 第三方库 └── 主脚本编译为pyc提示PyInstaller打包的exe在运行时会在临时目录生成大量文件这是逆向分析的重要切入点。2. 解包PyInstaller生成的exe解包是逆向工程的第一步我们需要从exe中提取出关键的Python字节码文件pyc。2.1 使用pyinstxtractor工具pyinstxtractor.py是一个专门用于解包PyInstaller生成的可执行文件的Python脚本。使用方法如下python pyinstxtractor.py target.exe执行后会生成一个与exe同名的目录包含解包后的所有文件。关键文件包括PYZ-00.pyz包含所有依赖库主脚本名.pyc程序的入口点struct.pyc用于修复pyc文件头的模板2.2 修复pyc文件头从PyInstaller提取的pyc文件缺少标准的Python字节码文件头通常是16字节需要手动修复才能被反编译工具识别。修复步骤从struct.pyc复制前16字节用十六进制编辑器将这些字节添加到目标pyc文件开头确保文件头中的时间戳与Python版本匹配# 使用Python代码自动修复pyc文件头示例 def fix_pyc_header(original_pyc, template_pyc, output_pyc): with open(template_pyc, rb) as f: header f.read(16) with open(original_pyc, rb) as f: data f.read() with open(output_pyc, wb) as f: f.write(header) f.write(data)3. 反编译pyc文件修复好pyc文件后就可以使用反编译工具将其还原为Python源代码了。目前最常用的工具是uncompyle6。3.1 安装uncompyle6pip install uncompyle63.2 基本使用方法uncompyle6 -o output.py input.pyc如果反编译失败可能是以下原因Python版本不匹配pyc文件与uncompyle6支持的版本不一致文件头修复不正确pyc文件损坏3.3 处理常见问题问题1Magic number不匹配错误信息类似Unknown magic number 227 in...解决方案uncompyle6 --python-version 3.8 input.pyc问题2反编译结果不完整尝试使用--verify选项检查字节码完整性uncompyle6 --verify input.pyc4. 逆向分析实战案例让我们通过一个实际案例来演示完整的逆向流程。假设我们有一个名为snake.exe的Python打包程序。4.1 解包exe文件python pyinstxtractor.py snake.exe解包后得到snake.pyc和struct.pyc等文件。4.2 修复pyc文件头fix_pyc_header(snake.pyc, struct.pyc, snake_fixed.pyc)4.3 反编译pyc文件uncompyle6 -o snake_decompiled.py snake_fixed.pyc4.4 分析反编译代码假设反编译后得到如下迷宫游戏代码# -*- coding:utf-8 -*- import hashlib, sys, random, time maze [ [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0], [0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0], # ... 更多迷宫数据 ] def validate_path(path): # 迷宫验证逻辑 pass关键逆向技巧识别迷宫数据结构分析路径验证算法提取关键条件判断4.5 编写破解脚本基于反编译的代码我们可以编写自动化脚本def solve_maze(): # 根据迷宫逻辑实现自动求解 path sdsdsddwwddsdddssaaassddddssasaaaaawwwaaasssdsdsdddddddd return path def generate_flag(path): # 模拟原始程序的flag生成逻辑 maze_value 1234 # 从反编译代码中提取的实际值 flag_part1 str(maze_value)[::-1] flag_part2 hashlib.sha256(path.encode()).hexdigest()[::-1] final_flag hashlib.sha256((flag_part2 flag_part1).encode()).hexdigest() return fflag{{{final_flag[:32]}}}5. 高级逆向技巧掌握了基本流程后让我们探讨一些更高级的逆向技术。5.1 处理代码混淆开发者可能会使用各种技术混淆Python代码增加逆向难度。常见混淆技术包括变量名混淆使用无意义的变量名控制流平坦化打乱代码执行顺序字符串加密运行时动态解密字符串反调试技巧检测调试环境应对策略动态分析结合调试器运行程序代码重构逐步重命名变量和函数模式识别寻找常见的加密/解密模式5.2 动态分析技术静态分析有时不足以理解复杂逻辑需要结合动态分析使用Python调试器import pdb; pdb.set_trace()函数钩子Hookingimport inspect def trace_calls(frame, event, arg): if event call: print(f调用函数: {inspect.getframeinfo(frame).function}) return trace_calls sys.settrace(trace_calls)内存修改import ctypes def write_memory(address, value): ctypes.memset(address, value, 1)5.3 处理自定义编码/加密Python程序常使用自定义的编码或加密方案如案例中的base58变种def custom_decode(encoded): base58 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz # 解码逻辑 pass分析方法识别编码字符集逆向变换步骤编写对应的解码函数6. 防御性逆向策略作为开发者了解逆向技术也能帮助你更好地保护自己的Python代码。6.1 代码保护技术使用C扩展将关键逻辑用C实现商业加壳工具如PyArmor代码混淆虽然不能完全防止逆向但能增加难度完整性检查检测代码是否被修改6.2 反逆向技巧示例def anti_reverse(): if hasattr(sys, gettrace) and sys.gettrace(): print(检测到调试器!) sys.exit(1) # 检查文件是否被修改 original_checksum abc123 current_checksum hashlib.md5(open(__file__,rb).read()).hexdigest() if current_checksum ! original_checksum: print(文件已被修改!) sys.exit(1)7. 工具链与资源推荐完整的Python逆向工程需要一系列工具配合使用。7.1 必备工具列表工具名称用途备注pyinstxtractor解包PyInstaller exe基础工具uncompyle6反编译pyc支持Python 3.8pycdc替代反编译器有时效果更好010 Editor二进制分析模板功能强大IDA Pro高级逆向分析处理C扩展7.2 进阶学习资源书籍Python逆向工程实战Gray Hat Python在线课程Udemy上的逆向工程专题Coursera网络安全课程社区Reverse Engineering Stack ExchangeGitHub上的开源逆向项目8. 实际应用场景Python逆向技术在实际中有多种应用场景远不止于CTF比赛。8.1 安全审计分析可疑Python程序的行为检测恶意软件的功能验证闭源软件的安全性8.2 遗留系统维护恢复丢失的源代码理解无文档的旧系统迁移过时的Python版本8.3 自动化测试生成测试用例验证程序逻辑构造边界条件8.4 学术研究分析算法实现研究代码混淆技术开发新的保护方案逆向工程是一项需要耐心和技巧的工作。随着经验的积累你会逐渐发展出自己的分析方法和工具链。记住技术本身是中性的关键在于如何使用。在合法合规的前提下Python逆向技术可以成为你技术 arsenal 中的强大武器。

相关文章:

从Python打包exe到逆向分析:一次搞定pyinstxtractor和uncompyle6的使用

Python逆向工程实战:从打包exe到源码还原的完整指南 逆向分析Python打包的exe文件是一项兼具挑战性和实用性的技能。无论是安全研究人员、开发者还是技术爱好者,掌握这项技术都能让你在面对未知Python程序时游刃有余。本文将带你深入探索Python逆向工程的…...

嵌入式系统与CPS核心技术解析与应用实践

1. 嵌入式系统与信息物理系统概述1.1 基本概念与技术特征嵌入式系统是以专用计算机为核心,嵌入到对象体系中完成特定功能的智能化电子系统。与通用计算机系统不同,嵌入式系统具有三个显著特征:专用性:针对特定应用场景优化设计&am…...

别再用Sigmoid了!聊聊ReLU和LeakyReLU如何拯救你的深度网络训练

别再用Sigmoid了!聊聊ReLU和LeakyReLU如何拯救你的深度网络训练 深夜调试模型时,你是否遇到过这样的场景:损失函数曲线像被冻住一样纹丝不动,反向传播的梯度在深层网络中逐渐"消失"?这很可能是因为你还在使用…...

Adobe-GenP 3.0终极指南:一键快速激活Adobe CC全系列软件的完整教程

Adobe-GenP 3.0终极指南:一键快速激活Adobe CC全系列软件的完整教程 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP 你知道吗?对于创意工作者…...

Windows电脑无法识别iPhone?终极解决方案:Apple-Mobile-Drivers-Installer

Windows电脑无法识别iPhone?终极解决方案:Apple-Mobile-Drivers-Installer 【免费下载链接】Apple-Mobile-Drivers-Installer Powershell script to easily install Apple USB and Mobile Device Ethernet (USB Tethering) drivers on Windows! 项目地…...

从实验报告到项目实战:用Verilog在ISE里复现南邮数电实验(含全加器、数据选择器源码)

从实验报告到FPGA实战:Verilog数字电路工程化指南 引言:跨越理论与实践的鸿沟 实验室里的波形图和课堂上的逻辑表达式,如何变成真正可运行的硬件电路?这是许多电子工程专业学生面临的第一个工程化挑战。去年指导毕业设计时&#x…...

019、未来展望:IPFS、暗网与去中心化互联网的融合趋势

当内容寻址遇见匿名路由 IPFS的核心是内容寻址(CID),暗网(以Tor为例)的核心是匿名路由。二者在协议层本无直接关联,但在实际部署中却产生了有趣的互补。传统IPFS网络依赖公共DHT和引导节点,这些…...

技术书籍解毒指南:90分钟吸收法

在软件测试领域,技术迭代的速度常令从业者感到焦虑。从传统的手工测试到自动化测试,再到如今与DevOps、云原生、AI结合的智能测试,知识体系不断膨胀。《持续交付》《Google软件测试之道》《软件测试的艺术》等经典著作虽被奉为圭臬&#xff0…...

告别libpng!用这个轻量级C库lodepng,5分钟搞定PNG图片解码(附完整代码)

轻量级PNG解码实战:5分钟用lodepng替代libpng的完整指南 在嵌入式开发和资源受限环境中,处理PNG图像一直是个令人头疼的问题。传统方案如libpng虽然功能强大,但动辄几百KB的库体积和复杂的API让许多开发者望而却步。我曾在一个物联网门禁项目…...

GitHub Profile优化:软件测试工程师的吸引力法则与专业品牌构建

在数字化浪潮席卷全球的今天,GitHub早已超越了其作为代码托管平台的最初定位,演变为技术从业者展示专业能力、构建行业影响力的核心舞台。对于软件测试工程师而言,一个精心优化、内容充实的GitHub Profile不仅是技术实力的“数字自白书”&…...

用 Coze 搭建 RAG 问答助手:完整实战(以“问史通”为例)

一、项目背景 最近我用 Coze 搭了一个中国近现代史问答助手——问史通。 它的目标很明确:基于知识库检索结果回答问题,而不是自由发挥。这样做的好处是: 回答更聚焦,适合课程学习与知识问答能把回答范围限定在上传资料内&#xff…...

技术决策框架:避免选择瘫痪

在软件质量保障领域,我们测试工程师常常发现自己置身于一个充满技术选择的十字路口:是引入Selenium还是Cypress进行UI自动化?性能测试该用JMeter还是LoadRunner?API测试框架选RestAssured还是Postman Newman?面对层出不…...

Word报告自动化:用poi-tl的Markdown插件优雅生成多级标题并自动更新目录(Office版)

Word报告自动化:用poi-tl实现Markdown式标题管理与智能目录生成 在技术文档编写领域,我们常常陷入这样的困境:内容创作者更习惯用Markdown的简洁语法表达结构,而最终交付却不得不妥协于Word的复杂样式调整。poi-tl的MarkdownRende…...

从一个小D触发器开始:手把手带你用Quartus Prime Power Analyzer完成你的第一个芯片功耗评估报告

从D触发器到功耗分析:Quartus Prime Power Analyzer实战指南 在FPGA设计流程中,功耗分析往往是被初学者忽视却又至关重要的一环。想象一下,你精心设计的电路在仿真时表现完美,但实际部署后却因为功耗问题导致发热严重或电池续航大…...

YouTube API配额总不够用?手把手教你优化搜索请求,把1万次配额用到极致

YouTube API配额优化实战:如何将1万次配额效率提升300% 当你开发的视频分析工具突然因API配额耗尽而瘫痪,或是眼睁睁看着精心设计的功能因配额限制被迫降级——这种场景对使用YouTube Data API的开发者来说再熟悉不过。每日1万次的默认配额看似充裕&…...

Blender 3.6+ 渲染救星:一个节点组合搞定玻璃的‘油腻感’,让你的渐变材质瞬间干净

Blender 3.6 渲染救星:一个节点组合搞定玻璃的‘油腻感’,让你的渐变材质瞬间干净 你是否曾在社交媒体上看到别人渲染的玻璃材质清澈透亮,而自己的作品却总是雾蒙蒙一片?那种"油腻感"让本该晶莹剔透的玻璃看起来像是蒙了…...

别再只盯着代码了:从‘未知的大猩猩’看技术人的认知盲区与学习路径设计

技术人的认知盲区:如何发现并驯服你代码之外的"大猩猩" 在技术领域深耕多年的开发者们,往往会对自己的专业能力充满信心——直到某个深夜,生产环境突然崩溃,而你发现根本看不懂日志里那些陌生的错误堆栈;或是…...

终极Navicat重置脚本:macOS环境下14天试用期无限重置完整指南

终极Navicat重置脚本:macOS环境下14天试用期无限重置完整指南 【免费下载链接】navicat_reset_mac navicat mac版无限重置试用期脚本 Navicat Mac Version Unlimited Trial Reset Script 项目地址: https://gitcode.com/gh_mirrors/na/navicat_reset_mac 对于…...

用Python复现SRM隐写分析:从残差计算到34671维特征提取的保姆级教程

用Python复现SRM隐写分析:从残差计算到34671维特征提取的保姆级教程 在数字图像安全领域,SRM(Spatial Rich Model)作为空域富模型隐写分析的黄金标准,其高达34671维的特征向量构建过程常令研究者望而生畏。本文将用Pyt…...

Thorium Reader如何实现高效书籍信息复制功能:技术架构与用户体验的完美结合

Thorium Reader如何实现高效书籍信息复制功能:技术架构与用户体验的完美结合 【免费下载链接】thorium-reader A cross platform desktop reading app, based on the Readium Desktop toolkit 项目地址: https://gitcode.com/gh_mirrors/th/thorium-reader 作…...

网盘下载革命:八大平台直链解析的终极解决方案

网盘下载革命:八大平台直链解析的终极解决方案 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 / …...

治疗方案优化系统

1. 系统概述 1.1 是什么 治疗方案优化系统(Treatment Plan Optimization System, TPOS)是 CANS 架构中负责多目标治疗方案生成与优化的决策智能体系统。它基于诊断结果、患者个体化生理模型、药物规划方案和患者偏好,在多个候选治疗方案中进行…...

Phi-3.5-mini-instruct惊艳效果展示:中英混合问答真实案例集

Phi-3.5-mini-instruct惊艳效果展示:中英混合问答真实案例集 1. 模型概览与核心能力 Phi-3.5-mini-instruct是微软推出的轻量级指令微调大语言模型,采用Transformer解码器架构,支持128K超长上下文窗口。这个3.8B参数的模型在多语言对话、代码…...

告别手动配置!用Docker一键部署树莓派巴法云客户端,支持TCP/MQTT自动重连

树莓派Docker巴法云:打造高可靠物联网客户端的工程实践 家里闲置的树莓派终于有了用武之地——作为巴法云客户端实现智能家居控制。但直接运行Python脚本总会遇到网络波动导致连接中断、系统重启后需手动恢复等问题。本文将分享如何用Docker容器化技术构建具备自动恢…...

别再死记硬背了!用华为eNSP模拟器5分钟搞懂MPLS TE隧道配置全流程

华为eNSP实战:5分钟可视化掌握MPLS TE隧道配置精髓 网络工程师的日常工作中,最令人头疼的莫过于面对一堆抽象协议概念却无从下手。MPLS TE(多协议标签交换流量工程)作为运营商级网络的核心技术,传统学习方式往往让初学…...

告别 CentOS 后,在 Rocky Linux 8 上玩转 Docker:手把手教你数据持久化与镜像管理

Rocky Linux 8 上的 Docker 数据持久化与镜像管理实战指南 当 CentOS 逐渐退出历史舞台,Rocky Linux 8 正成为企业级 Linux 用户的新宠。作为 CentOS 的完美替代品,Rocky Linux 不仅继承了 RHEL 的稳定性,还提供了更灵活的开源生态支持。在这…...

HDMI矩阵主要解决什么问题

随着VGA/DVI接口的矩阵慢慢退出市场,现在信号源和显示设备慢慢都统一到HDMI接口了。HDMI矩阵从早期的监控室用于切换硬盘录像机的信号到会议室用来切换会议摄像机,它的核心作用就是解决多路 HDMI 信号的输入、然后切换或分配到多路HDMI输出的问题&#x…...

Gemma 4 / PaliGemma 2 / Ollama / Open WebUI 本地部署复盘

Gemma 4 / PaliGemma 2 / Ollama / Open WebUI 本地部署复盘 日期:2026-04-20环境:WSL2 Ubuntu (gkubuntu2004)目标: 本地部署 Gemma 4本地部署 PaliGemma 2使用 Ollama 提供交互式聊天能力使用 Open WebUI 提供图形化聊天界面尝试将 PaliGem…...

别再手动一个个启动容器了!用Docker Compose编排一个Web+MySQL+Redis的完整项目(附yml文件详解)

别再手动一个个启动容器了!用Docker Compose编排一个WebMySQLRedis的完整项目(附yml文件详解) 每次部署多容器项目时,最头疼的就是手动启动每个服务、配置网络、挂载数据卷。想象一下:先启动MySQL容器,设置…...

NUMA架构与Linux内存策略优化实践

1. NUMA架构与内存策略基础 NUMA(Non-Uniform Memory Access)架构是现代多核处理器系统中的重要设计范式。与传统的UMA(Uniform Memory Access)架构不同,NUMA系统中每个处理器核心或处理器组(称为NUMA节点&…...