长安杯_snake_wp

[长安杯]2021 snake

64位无壳

打开后发现是一个贪吃蛇的小游戏

image-20221120125538991

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

Lable13是失败,17是成功

image-20221120125826808

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

image-20221120125947253

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

image-20221120130204317

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

image-20221120130340996

v1和输入相关。因为是完全随机所以应该不是输入某种特定的输入序列。

再结合前面score != 200的判断,于是方向从寻找flag转为通关这个游戏

主要有三个障碍

一个是不能走回头路,一个是如何吃到钱,再一个就是打到200分

首先解决回头路的问题

image-20221120130931866

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

image-20221120131202048

直接修改跳转地址到lable17的判断

再把下面的判断钱改成无条件跳转

image-20221120131350330

至于这个200

改了会出假flag

改完之后开始调试

image-20221120132502333

已经是走一步加一分并且可以走回头路

于是只要重复输入wasd

蛇就会开始回环

image-20221120132724394

1
flag{16045690921005577702}

如果连200也修改了

image-20221120133027593

就会出假flag

1
flag{16045690984833337519}