这个其实来自于西电新生赛的Reverse的第四题Realezpy。题目不难,但是因为是第一次入门,还是碰到了很多烦人的小问题。
?一、软件选择。
因为这个是python的反编译问题,所以IDA和die、ExeinfoPe这些工具就没用了。
我显示在bing上搜索,参照这位大佬的做法开始实验((7条消息) pyc文件逆向_攻防世界python-trade_逆向之旅010_duang_duang_yang的博客-CSDN博客)。//大佬贴心的把工具也贴出来了,很不错。
?正当我满心欢喜,把.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倒是很好找。
?
|