2022年春秋杯冬季赛-reindeer game
2022年春秋杯冬季赛-reindeer game
工具准备:
1、 pyinstxtractor.py
2、uncompyle6
思路综述:
1、正常通过游戏;
2、①从python打包而成的exe入手;
②用pyinstxtractor.py工具拆包,拿到游戏的py源码;
③分析逻辑,找出得到flag的部分或者修改游戏胜利条件。
3、其他方法,可以尝试通过游戏修改器,更改关键数值(具体步骤本文并没有列出)。
详述:
题目是一个驯鹿🦌吃姜饼的游戏:题目要求吃30个,不太擅长游戏的小伙伴可能很久都不能过关。
这一题很明显是用python写的游戏,并且用了pyinstaller 进行了打包:
接下来的思路就来了,拿到源py代码,不就随意发挥了,有打包工具就有拆包工(pyinstxtractor.py),注意这里的拆包工具,历史版本太多。
版本网址一:https://github.com/extremecoders-re/pyinstxtractor;
版本三:网上查询,接下来的是别的博主改写的,可以直接用(也都算是用下来比较好的);
https://blog.csdn.net/qfcy _/article/details/113245876
拿到拆包工具后:
python3 pyinstxtractor.py reindeer.exe |
之后会生成一个对应的包:
进入包中主要寻找二个部分,第一个就是reindeer的文件,实际上这是一个pyc文件,只是又由于拆包时造成的,直接加上.pyc后缀即可;
接下来就是对reindeer.pyc的反编译,需要用到工具:uncompyle6
uncompyle6 -o reindeer.py reindeer.pyc |
执行后生成py源代码,这时就可以看到整个游戏的逻辑;
部分展示图:
大概分析完逻辑后,这里看到有一个重要的模块astar模块,这里是作者自己写的,所以在打包的时候应该已经打包在一起了;可以去拆的包查找:
这就是第二部分: 将astar.pyc文件同样反编译为py文件
如果缺少pygame模块的可以自行安装一下,之后就可以正常运行reindeer.py文件。
到这里我们已经拿到游戏的大部分源码了,可以直接通过修改吃姜饼的数量完成游戏,一定要注意修改的数值大小(不可为0,否则就失去了游戏的意义);修改的关键值:TO_WIN
这个方法适合追寻解题速度同时又不想失去游戏的乐趣的师傅;
根本就不想玩游戏的师傅,在分析游戏逻辑时,就发现拿到flag的关键;逻辑胜利,直接来到
def victory(time)
:这里,发现flag藏在了getczekolada()中,直接进入astar.py
这里就是一个gzip的压缩,直接一个解压缩,就可得到flag值
import gzip |
下面这幅图是:修改姜饼个数为1(4s通关🦌);
总结:
1、小白文章,如果发现错误还请各位师傅指出。
2、中间踩的空较多,算是趟水的人,各位请放心食用。
补充:
作者师傅说了有彩蛋,彩蛋开启之术,同时按下0,1,2数字键(不要使用小键盘哦):