长安杯_snake_wp
[长安杯]2021 snake
64位无壳
打开后发现是一个贪吃蛇的小游戏

循环读取输入后下面有游戏失败或者成功的判断
Lable13是失败,17是成功

并且这个while还兼顾着判断蛇是否走回头路

lable17判断蛇是否吃到了$吃到了则跳出循环执行下面的分数判断,没到200就会进入if。里面应该是随机生成$的环节。

再最后就看到了calc_flag()函数

v1和输入相关。因为是完全随机所以应该不是输入某种特定的输入序列。
再结合前面score != 200的判断,于是方向从寻找flag转为通关这个游戏
主要有三个障碍
一个是不能走回头路,一个是如何吃到钱,再一个就是打到200分
首先解决回头路的问题

目标是跳过这循环直接进入到lable17

直接修改跳转地址到lable17的判断
再把下面的判断钱改成无条件跳转

至于这个200
改了会出假flag
改完之后开始调试

已经是走一步加一分并且可以走回头路
于是只要重复输入wasd
蛇就会开始回环

1 | flag{16045690921005577702} |
如果连200也修改了

就会出假flag
1 | flag{16045690984833337519} |