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

python逆向-逆向pyinstaller打包的exe程序反编译获取源代码

python逆向-逆向pyinstaller打包的exe程序反编译获取源代码

Pyinstaller

pyinstaller 是一个用于将 Python 程序打包成独立可执行文件的工具,能够在没有 Python 解释器的情况下运行。 Python 脚本转换为 Windows、macOS 和 Linux 操作系统上的可执行文件。

把Python项目打包成exe非常简单。

#安装pyinstaller
pip install pyinstaller#打包
pyinstaller your_script.py

有时候为了恢复一部分源码,我们将以前前编译好的exe反编译成py文件。

在反编译前,我们要确定是Python编译的 exe项目。

Exeinfo PE

Exeinfo PE 是一款查看 PE 文件信息的工具,可以查看 EXE/dll 文件的编译器信息、是否加壳、入口点地址、输出表/输入表等等 PE 信息,帮助开发人员对程序进行分析和逆向。Exeinfo PE 还可以提取PE文件中的资源,可以提取图片、EXE、压缩包、MSI、SWF等等资源

使用类似的查壳工具可以查看程序是不是 pyinstaller 打包,确定是 pyinstaller 打包后就可以使用下面的方法进行反编译了
打开软件后直接将需要逆向的程序拉到软件上即可
在这里插入图片描述

exe反编译

拉取 pyinstxtractor.py
git clone https://github.com/countercept/python-exe-unpacker使用 Python 执行pyinstxtractor.py脚本,便可以对指定的 exe 程序进行反编译。
python pyinstxtractor.py main.exe

编译完成后同目录下会出现一个xxx.exe_extracted的目录,进入目录后可以看到同 exe 程序名的一个文件。由于我们反编译的 Python 版本与程序 Python 版本不同,导致反编译出来的程序没有携带 .pyc后缀,需要我们自己手动加上后缀,如下图修改成main.pyc
在这里插入图片描述
修改后缀
在这里插入图片描述

给pyc文件添加文件头

pyinstaller 打包后会去掉文件头部的 magic number,此时反编译出来的 pyc 文件都是缺少 magic number 值的,会导致后面我们将 pyc 文件反编译为 py 文件时出现问题,需要我们手动补上缺失的部分。

这里使用WinHex20,WinHex20是一款非常知名的16进制编辑器软件,使用该软件能够快速帮助用户编辑二进制、十六进制、乱码等文件,非常方便。

使用 WinHex20 打开 main.pyc文件。
在这里插入图片描述

打开“main.exe_extracted"文件夹下的PYZ-00.pyz_extracted文件夹,使用 WinHex20 随便打开其中一个pyc文件,将其头部复制到main.pyc的头部。可以看到上面修改的头部就是下面这里复制过去的。修改后记得保存文件!

在这里插入图片描述

使用pycdc反编译pyc文件

在网上下载好pycdc之后,将修改后的main.pyc文件和pycdc.exe放在同目录下

pycdc.exe main.pyc>main.py

在这里插入图片描述

等待执行成功之后在文件夹内会出现main.py

在这里插入图片描述
然后就可以使用编辑器阅读了,但是可能会出现中文编码错误的情况,如下:

在这里插入图片描述

原因:反编译工具在还原时,有时不会自动将这些字节解码回原始的 Unicode 字符串,而是直接以十六进制转义序列的形式显示出来。
大数据量的情况下直接让ai写个脚本处理替换一下就行!


文章转载自:

http://BCIHvHvp.krzrg.cn
http://QHHjDhDv.krzrg.cn
http://VzOVe2fq.krzrg.cn
http://JwWckq3d.krzrg.cn
http://v0ahwC4X.krzrg.cn
http://Ch0ixJ1o.krzrg.cn
http://QL86ZslH.krzrg.cn
http://WZap4vWm.krzrg.cn
http://6SLAVDgT.krzrg.cn
http://cqvHny0f.krzrg.cn
http://JSNUQRUT.krzrg.cn
http://uJj8As5I.krzrg.cn
http://Smo9dqNK.krzrg.cn
http://Bo27AcEb.krzrg.cn
http://3Z2b3UyE.krzrg.cn
http://P28cAPTz.krzrg.cn
http://QNnoy9Yq.krzrg.cn
http://BIUPWuAn.krzrg.cn
http://VjRRva7P.krzrg.cn
http://QmWpSxqf.krzrg.cn
http://htQROpNl.krzrg.cn
http://D3ZFEl9i.krzrg.cn
http://SNnfbrwl.krzrg.cn
http://jKsLS2U6.krzrg.cn
http://37w4M46V.krzrg.cn
http://XsMrd9da.krzrg.cn
http://CeUFzdKp.krzrg.cn
http://NGE1PBg4.krzrg.cn
http://wuRmaZc4.krzrg.cn
http://1wgMOKrA.krzrg.cn
http://www.dtcms.com/a/380762.html

相关文章:

  • 最大连续 1 的个数
  • LVS负载均衡群集和LVS+Keepalived群集
  • 嵌入式开发:中断配置全解析
  • 【Vue3】07-利用setup编写vue(2)-setup的语法糖
  • 使用 信号量(Semaphore) 来控制异步任务并发数
  • 1688 商品 API 实战指南:B2B 场景下的合规对接与批量运营方案
  • Qt Bridge for Figma
  • 解决docker配置了镜像源但还会拉取官方镜像源的问题
  • 【JavaEE】网络原理初识
  • 操作系统应用开发(七)mac苹果模拟器——东方仙盟练气期
  • PBI Plus 技术解析:全渠道协同架构下的数据协作效率提升方案​
  • 【C#】三个特殊的 Caller Info Attributes
  • LangChain4j入门学习
  • Django ORM 模型
  • 【SpringBoot】——原理篇
  • 机器人防爆的详细讲解
  • 【Vue3】06-利用setup编写vue(1)
  • 单序列双指针
  • Linux中进程和线程常用的API详解
  • 【AI论文】多模态大型语言模型的视觉表征对齐
  • php学习(第四天)
  • Vue中使用keep-alive实现页面前进刷新、后退缓存的完整方案
  • Jenkins运维之路(Jenkins流水线改造Day02-1-容器项目)
  • Netty从0到1系列之Netty逻辑架构【上】
  • com.google.common.cache实现本地缓存
  • LeetCode 面试经典 150 题之最后一个单词的长度:逆向遍历高效解法
  • 详解JWT
  • Spring Boot 分布式事务常见问题:Seata、XA 与本地消息表对比
  • 如何在Hugging Face中下载全部文件?
  • AI之VideoTool:AI-Video-Transcriber​​​​​​​的简介、安装和使用方法、案例应用之详细攻略