反编译对象为一篇文献上的软件,反编译只是为了了解一些源代码的逻辑。
过程参考文章:python3.7.4反编译生成的.exe
反编译对象:polySML
此对象为python打包,且未进行加密加壳软件,仅为学术使用
使用工具
- python文件:pyinstxtractor
- 16进制编辑器:010 Editor
- python包:uncompyle
大致流程:
- 通过pyinstxtractor将exe的内容文件提取出来
- 使用010 Editor将pyc文件缺失部分补充完整
- 使用uncompyle将pyc反编译为py文件
1.拆解exe为pyc文件
- 将所需拆解的exe与pyinstxtractor文件放置在同一目录中
- 在PowerShell中运行
python
当最后一行表明"Successfully ..."则拆解完成,个人认为其中最后一个"Possible entry point: MatML_no_comments"为个人编写的主要程序, 也可以根据对于python包的名字的掌握进行推断.
2.获得pyc文件
在拆解的文件夹里找到无后缀名的文件, 这些文件除了struct都是pyc文件, 但是都有缺失, 需要进行修复.
关注的是作者编写的主文件, 至于其他库文件不关注.
使用010 Editor打开"MatML_no_comments"和"struct"文件
在"struct"文件中找到"MatML_no_comments"文件开头的地方(即红色框), 将红色框前面的内容从"struct"中复制到"MatML_no_comments"(即蓝色框), 使下图的框内信息完全一致.
保存"MatML_no_comments", 在"MatML_no_comments"后面添加后缀名".pyc"
至此pyc文件修复完成
3.使用了uncompyle进行py还原
在python中安装uncompyle库
pip install uncompyle
在powershell中运行
uncompyle6 目标文件.pyc > 最终文件.py
此次使用上述会报编码错误, 所以打开python文件进行输入
import
即可完成
报错整理
- 编码方式有问题: 参见幻华:反编译python生成的exe时出现的问题
# 'gbk' codec can't encode character 'xae' in position 3366: illegal multibyte sequence
- 没有修复完成, 重新修复
<class 'ValueError'>; bad marshal data (unknown type code)
4.使用uncompyle还原其他py
这步需要对于python的包比较了解, 也可以直接在pypi上搜索进行判断是否为作者自己编写的文件
找到作者自定义的文件名到, 到文件夹"PYZ-00.pyz_extracted"中找到相应的pyc文件.
注意: 此处的pyc文件也需要进行如上步骤进行修复, 重复步骤2与步骤3, 则能初步将exe文件反编译出来.