吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 10787|回复: 28
收起左侧

[转贴] 【转载】python exe文件解包方法总结

  [复制链接]
吾爱师姐! 发表于 2021-7-15 09:23
注:
除特别说明外,下面使用的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文件:
1.png

pyc文件:
2.png

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,查看其安装位置
3.png

到该目录下,打开xdis文件夹下的magics.py文件
确定需要识别的版本号就是之前添加的16个字节的前两个字节,此例中为0D42,需要转换为十进制,就是3394。
查看magics.py中是否有该版本号。我这里一开始没有发现这个版本号
4.png

我的解决方法
我在谷歌上搜索了int2magic(3394),找到了这个Github项目。
下载下来,按照介绍进行安装。
在执行pip install -e .的时候,提示我xdis和uncompyle6的版本不匹配,于是卸载了uncompyle6,又重新安装了一次。
目前的版本:xdis 5.0.5 uncompyle6 3.7.4
查看该版本xdis的magics.py文件:
5.png

可以看到已经有3394了。
反编译:
6.png

成功!
注:pyc文件一定要有后缀名pyc,不然会报错
二、PYZ文件的加密问题
有些时候在步骤1 exe→pyc的过程中,会出现PYZ中的文件无法正常提取(archive_viewer.py),或者提取出来后显示encrypted(pyinstxtractor.py)的问题。

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

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

之后的解密脚本有三个可供选择,均在参考文章3中,根据pyinstaller的版本不同选择不同的脚本,使用时需要替换其中的key、header以及待解密文件名和目标文件名,执行后即可获得解密后的pyc文件,再使用uncompyle6反编译即可。
注:这三个脚本中,第一个脚本适用于PyInstaller<4.0,使用python2执行;第二个和第三个脚本适用于PyInstaller≥4.0,使用python3执行。
8.png

参考文章
反编译python打包的exe文件
Extracting encrypted pyinstaller executables
pyinstxtractor wiki
https://fishc.com.cn/forum.php?mod=viewthread&tid=131172&page=1#pid3772102

声明:技术分享来源于网络,如果违规或侵权请通知删除。内容来自于看雪论坛

免费评分

参与人数 8吾爱币 +17 热心值 +7 收起 理由
Hmily + 5 + 1 鼓励转贴优秀软件安全工具和文档!
ofo + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
netspirit + 1 基本上就只有入口是pyc其他全pyd
nmy124 + 1 + 1 谢谢@Thanks!
笙若 + 1 + 1 谢谢@Thanks!
正己 + 3 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
Monitor + 3 + 1 我很赞同!
漁滒 + 3 + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

v.n.lee 发表于 2021-7-15 15:47
我现在都是nuitka打包的,干不动
Hmily 发表于 2021-7-15 10:15
吾爱师姐! 发表于 2021-7-15 09:41
格式调整了好几遍实在调整不好了,请版主帮忙调整一下吧

我给你编辑了下,但好像效果一般,现在权限很高,大多数人应该访问不了。
 楼主| 吾爱师姐! 发表于 2021-7-15 09:41
格式调整了好几遍实在调整不好了,请版主帮忙调整一下吧

点评

我给你编辑了下,但好像效果一般,现在权限很高,大多数人应该访问不了。  详情 回复 发表于 2021-7-15 10:15
 楼主| 吾爱师姐! 发表于 2021-7-15 10:18
Hmily 发表于 2021-7-15 10:15
我给你编辑了下,但好像效果一般,现在权限很高,大多数人应该访问不了。

这个权限多高合适?请大神给编辑一下吧,

点评

不用设置权限,这种技术讨论不涉及产品没事。  详情 回复 发表于 2021-7-15 10:20
Hmily 发表于 2021-7-15 10:20
吾爱师姐! 发表于 2021-7-15 10:18
这个权限多高合适?请大神给编辑一下吧,

不用设置权限,这种技术讨论不涉及产品没事。
 楼主| 吾爱师姐! 发表于 2021-7-15 10:20
好的,刚看您改过了,谢谢
ZeroWong1919 发表于 2021-7-15 10:22
终于能进来了,刚才好奇就直接去CSDN看原贴去了,还是挺有意思的,帮顶。
2422 发表于 2021-7-15 10:29
也想玩玩python
尕柒月 发表于 2021-7-15 10:43
pyd的没法反编译把
rettrey 发表于 2021-7-15 11:32
可以,正好想了解这个,多谢转载
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-22 05:43

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表