记一次pyc反汇编的层出不穷的问题。

博主在尝试对Python pyc文件进行反编译时遇到了一系列问题,包括软件选择、文件头错误、缺少struct文件、版本不兼容等。通过搜索和实践,最终使用uncompyle6成功将pyc反编译为py文件,期间还涉及Python版本回退和环境变量配置。尽管过程曲折,但博主成功找到了解题的关键。

这个其实来自于西电新生赛的Reverse的第四题Realezpy。题目不难,但是因为是第一次入门,还是碰到了很多烦人的小问题。

 一、软件选择。

因为这个是python的反编译问题,所以IDA和die、ExeinfoPe这些工具就没用了。

我显示在bing上搜索,参照这位大佬的做法开始实验((7条消息) pyc文件逆向_攻防世界python-trade_逆向之旅010_duang_duang_yang的博客-优快云博客)。//大佬贴心的把工具也贴出来了,很不错。

 正当我满心欢喜,把.pyc文件拖入的时候却显示了错误。Invalid pyc/pyo file - Magic value mismatch!

 然后我又去浏览器搜索,发现这个是因为每个 *.pyc 文件都有一个magic head,PyInstaller 生成 *.exe 的时候会把*.pyc 的 magic 部分去掉,在反编译的时候需要补齐。

那既然要补齐,起码得先打开这个十六进制文件,但是我用记事本、notepad++都打不开,于是我有搜索发现010 Editor可以用来干这个事情。然后又是一通搜教程下载。 费好大劲可算是配置好了。然后用它打开.pyc文件,想着马上就成功了,然后开始手动补齐吧。

那怎么手动补齐? ​​搜到的回答这么说的:使用16进制模式查看主文件与主文件目录下的 struct 文件,需要在主文件头插入16个字节与 struct文件保持一致(其中前4个字节是Python编译版本,要完全一致)注意模板文件仅需要插入8个字节,与 struct 文件保持一致。

但是问题来了,struct文件压根就没有,这个.pyc文件又不是我自己拿.exe文件做出来的,我去哪找struct文件,而且我也不知道这个是拿哪个python版本做出来的,这条路又死了。 

二、 星星之火。

绝望之际发现了好多和.pyc反编译.py的文章都提到了一个词uncompyle6,就连题目的提示都和uncompy好像好像。甚至刚开始用的哪个软件的deconpiler engine(反编译引擎)都是uncompyle6。

 然后又是一通搜索,总结发现uncomply6就是将.pyc反编译成.py的核心利器。(uncompyle6版本比uncompyle2更高)

其中这篇文章最精简、最核心、对小白最友好。uncompyle6安装使用方法 - pcat - 博客园 (cnblogs.com)

然后就是打开cmd去pip安装uncompyle6。为了直接输入命令,又去将uncompyle配置环境变量。(这个只要拉到python\Scripts里面就可以)。

结果重点来了:这个东西不支持python3.8以上的版本,看着自己python3.9陷入了沉思,rnm。星星之火又灭了。

 三、python的版本

        那没办法,只能版本回退了,然后一通搜索发现又得配置什么Anaconda,真的经不起折腾了,而且我不知道这样回退的话用不用去别的python编辑器里面再重新设置。不想再去试这个新软件和他的配套了,虽然看着不错,但是这个和我解reserve是越来越远了。

        我就想着要不一台电脑装两个版本的python试试,这个还真的可以,于是我下载了2系的python。

 

 然后首要的任务就是配置环境变量,不然没法像linux那样直接在cmd里使用。

 然后就是得重命名两个名字。一个是pip.exe,一个是python.exe不能和原来的版本的那两个重名了。我改成了下面这个。

四、回归正题。(绕了半个地球,接下来可算回归解题。)

win+r打开cmd,先用2.7版本的pip5去下载uncompyle6.

然后就可以使用uncompyle6去反编译了。

输入:uncompyle6 -o  Aim.py Origin.pyc   (Aim.py是反编译生成的.py文件的路径,Origin.pyc是源路径)

然后可算看到了successful字眼。

 接着去桌面找生成的.py文件。

发现: 可算变成了

用notepad++打开,终于发现了熟悉的python代码。热泪纵横!绕了一大圈仔=子,最终可算回到了正道上。接下来就是找flag,flag倒是很好找。

 

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ad_m1n

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值