pythonexe⽂件反编译_[原创]pythonexe⽂件解包⽅法总结注:中国民航大学排名
除特别说明外,下⾯使⽤的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编辑
,原因: 增加原创标志以及调试逆向分类
上传的附件:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论