长安杯_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} |