注:

除特别说明外,下面使用的python版本均为3.8.6

文章中提到的相关工具均已包含在附件中。

一、步骤

1. exe → pyc

方法1:pyinstxtractor.py

执行python pyinstxtractor.py ,如果成功,即可获得_extracted 文件夹。

注:执行时会提示python版本问题,想要正常解包必须使用正确的python版本。

方法2:archive_viewer.py

执行python archive_viewer.py ,会打印EXE文件中包含的所有文件信息

使用x 命令将想要提取出的文件提取出来,q 命令退出。

两者的区别

方法1可以一次性提取出所有文件,方法2只能逐个提取文件。但是在个人使用时,方法2的成功率相对较高。可以先尝试用方法1,失败后用方法2。

2. pyc → py

步骤1获得的文件是pyc文件,还需要进一步反编译获得py文件。

注:我遇到过直接获得py文件的情况,所以在反编译之前可以先查看一下是不是已经成功了。

2.1 pyc文件恢复

注:最新版pyinstxtractor.py支持自动恢复pyc,但是经实验不能保证准确性。或者说需要使用准确的python版本才行。

在将python文件打包成exe文件的过程中,会抹去pyc文件前面的部分信息,所以在反编译之前需要检查并添加上这部分信息。

抹去的信息内容可以从struct文件中获取:

struct文件:

pyc文件:

Q1:需要添加多少字节?

多个参考文章中提到的添加字节数都不一致,这应该与使用的python版本有关。但是在已知的几个例子中,可以看出pyc文件开头的几个字节与struct文件中的字节是一样的。比如说上图中pyc文件是以E3 00 00 00开头,而这部分字节就和struct文件的第二行起始字节相同。

因此在此例中,需要复制添加的字节就是struct文件中第一行的16个字节

Q2:添加的方法是什么?

在010editor中,选择Edit→Insert/Overwrite→InsertBytes,Start Address填0,Size填16。

然后将字节复制进去即可。

2.2 反编译

反编译工具

Easy Python Decompiler

这是一个GUI界面的可执行文件,下载下来直接用就可以,但是并不是每次都能成功,有些magic value不能识别。

uncompyle6

该工具需要使用pip安装,使用脚本执行。成功率较高。

反编译提示magic value有问题怎么办?

在上面我们添加的16个字节中,前四个字节表示的就是magic value,其中前两个字节表示的是python的版本号,一般来说magic value的问题就是版本号有问题,编译工具没有识别出来该版本号表示的python版本。

如果使用的是Easy Python Decompiler,那么就可以直接转用uncompyle6了。

如果用的已经是uncompyle6,那么需要先看一下它可以识别的版本号都有哪些,这个信息可以在xdis包的magics.py文件中找到,具体方法如下:

命令行输入pip install xdis,查看其安装位置

到该目录下,打开xdis文件夹下的magics.py文件

确定需要识别的版本号

就是之前添加的16个字节的前两个字节,此例中为0D42,需要转换为十进制,就是3394。

查看magics.py中是否有该版本号。

我这里一开始没有发现这个版本号

我的解决方法

我在谷歌上搜索了int2magic(3394),找到了这个Github项目。

下载下来,按照介绍进行安装。

在执行pip install -e .的时候,提示我xdis和uncompyle6的版本不匹配,于是卸载了uncompyle6,又重新安装了一次。

目前的版本:xdis 5.0.5 uncompyle6 3.7.4

查看该版本xdis的magics.py文件:

可以看到已经有3394了。

反编译:

成功!

注:pyc文件一定要有后缀名pyc,不然会报错

二、PYZ文件的加密问题

有些时候在步骤1 exe→pyc的过程中,会出现PYZ中的文件无法正常提取(archive_viewer.py),或者提取出来后显示encrypted(pyinstxtractor.py)的问题。

这个问题可以使用参考文章2和3中的方法解决:

PYZ文件加密的密钥保存在pyimod00_crypto_key文件中,该文件也是一个pyc文件,可以使用上面介绍的方法进行反编译,然后就可以获得密钥:

之后的解密脚本有三个可供选择,均在参考文章3中,根据pyinstaller的版本不同选择不同的脚本,使用时需要替换其中的key、header以及待解密文件名和目标文件名,执行后即可获得解密后的pyc文件,再使用uncompyle6反编译即可。

注:这三个脚本中,第一个脚本适用于PyInstaller<4.0,使用python2执行;第二个和第三个脚本适用于PyInstaller≥4.0,使用python3执行。

参考文章

最后于 2020-12-15 15:01

被LarryS编辑

,原因: 增加原创标志以及调试逆向分类

上传的附件:

python exe文件反编译_[原创]python exe文件解包方法总结相关推荐

  1. python加密反编译_对Python源码进行加密及反编译前后对比

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

  2. python防反编译_用Python和Smali模拟器搞定一个加混淆、防篡改的APK逆向

    这个周末我和好友聊天时,他向我求助修改一个他正在编写Python脚本.他试图通过解混淆一个APK,来理解该APK的混淆基址和防篡改保护机制.同我以往的APK逆向过程(dex2jar->jd-gu ...

  3. so文件反编译_安卓攻防so模块自动化修复实战

    前言 Android加固方案经过这么长时间的发展,从开始的整体dex加密压缩方案逐步开始往native层发展,市面上知名的几款商业级加固方案中很容易发现这种方案的身影.这样看来,在今后相当长的一段时间 ...

  4. ipa文件反编译_手把手教你反编译别人的app

    虽然iOS系统相比于其他手机操作系统相对安全,但是这个安全并不是绝对的,我一直相信,道高一尺魔高一丈.此文想以实际例子出发,告诉大家,如何去反编译一个app,并且从某个角度来说,iOS没有传说中的&q ...

  5. ipa文件反编译_手把手教你反编译别人的iOS App

    下载智可网手机app可以学习更多哦! 虽然iOS系统相比于其他手机操作系统相对安全,但是这个安全并不是绝对的,我一直相信,道高一尺魔高一丈.此文想以实际例子出发,告诉大家,如何去反编译一个app,并且 ...

  6. 微信小程序“反编译”实战(一):解包

    本实践教程将一步步告诉你如何"反编译"获得其它小程序的源代码,包括"解包"和"源码还原"两篇,主要参考了看雪论坛.V2EX.GitHub 等 ...

  7. 微信小程序反编译得到的是html,微信小程序“反编译”实战(一):解包

    本实践教程将一步步告诉你如何"反编译"获得其它小程序的源代码,包括"解包"和"源码还原"两篇,主要参考了看雪论坛.V2EX.GitHub 等 ...

  8. python判断邮件发送成功_(原创)python发送邮件

    这段时间一直在学习flask框架,看到flask扩展中有一个mail插件,所以今天就给大家演示如果发邮件. 首先我注册了一个163邮箱,需要开启smtp功能,因为咱们python发送邮件经过的是smt ...

  9. s19文件反编译成c语言,S19文件反编译器使用说明.ppt

    S19文件反编译器使用说明 S19 decoder Sep 2008 lzbing Decoder Find decoder.exe in codewarrior installation direc ...

  10. Python反编译pyinstaller打包的exe文件 从0开始(未加密篇)

    因为pyinstaller方便.兼容性相对较好,所以我们会经常见到一些用pyinstaller打包的Python程序,在这里我们了解一下如何对这些打包好的exe文件进行反编译(即反编译出.py文件), ...

最新文章

  1. java redis释放连接池_Java 使用连接池操作redis
  2. 成为JavaGC专家(1)—深入浅出Java垃圾回收机制
  3. CSS + DIV 让页脚始终底部
  4. 微服务资源springboot、springcloud、docker、dubbo项目实战等倾心分享
  5. modbus通讯失败_技成周报38期 | SMART PLC Modbus通讯、组态、模拟量等常见问题
  6. ln -s命令 linux,linux ln命令详解
  7. c语言大作业教室预约管理系统,C语言程序设计——教室管理系统(源代码))
  8. C/C 宏替换详解
  9. Cmake参数详细介绍
  10. 华为服务器u盘装linux_华为matebook14双系统(deepin15.11+win10)新体验!
  11. Qcom 平台 camera 之 RAW+YUV图抓取
  12. 山海经妖兽录服务器维护,山海经九州异兽录不能登录怎么解决
  13. 定时器的用法以及pwm的调速
  14. 每日一题系列 - 荷兰国旗问题
  15. Androild Killer无法运行,出现Runtime error 217
  16. (上)苹果有开源,但又怎样呢?
  17. java jsoup解析开彩网api接口json数据实例
  18. 京东双叠加神单漏洞券操作教程
  19. 如何进行PDF页码删除操作 删除页面的技巧有那些
  20. c#字符串转为json对象与json转对象

热门文章

  1. Ruby语言的优点和缺点
  2. 中标麒麟v7.0 yum源报错修改方法
  3. OpenCASCADE:OCCT CSharp 示例
  4. C语言的整型常量与实型常量
  5. zend studio 12.5 安装aptana
  6. 关于 JWT Token 自动续期的解决(根据其他文献参考写的)
  7. #华为云#听从你心,无问西东
  8. tomcat发布网站的三种方式
  9. python解析pdf中文乱码_Python解决中文乱码.pdf
  10. TJX公司:一家不但股价便宜,产品价格也非常便宜的美国低价零售商