0%

[长安杯 2021学生组]snake super123的WriteUp

2023-09-22 01:17By
super123
逆向gamerepatch

2021长安杯学生组-snake

具体请看这篇博客,这里图片不好上传 https://blog.csdn.net/qq_54894802/article/details/132636731?spm=1001.2014.3001.5502

这道题拿到手,我们可以发现,这道题开了很高的优化,使得我们一点点的分析代码比较困难,我们就直接看关键的步骤即可。

Untitled

这里我们直接查一下flag

Untitled

进入函数

Untitled

我们可以直接知道,游戏玩通关之后我们的flag会自动打印出来,但是这个函数中,其中关于值的,grid_mats这个数据是从外部传入的,我们可以猜测要么与wasd这中步骤数有关,要么与关卡数有关,要么与食物(身体长度有关)。我们查看交叉应用来看看到底是什么?

Untitled

通过这些函数名我们可以知道,这里的flag与卡关数是有关的

Untitled

主函数里面set_level是生成关卡的,因此操作还是在主函数中

Untitled

这里是一个关键地方,判断得分与判断游戏结束的两个if,这两个if又在一个while循环里面,当我们吃到的时候,我们就会跳出这个循环,由此我们可以知道,这个循环就是我们移动过程的判定循环,这里我们patch关于v11的判断,将其变成≠就跳出,这样只要走一步就算是吃了,但是我们patch之后运行,我们会发现动一下就说游戏结束了,也就是说,肯定还有什么比较关键的判断步骤,会直接让我们跳到重开。

Untitled

这个v79这个if判断,我们翻到后面可以知道

Untitled

必须当v79等于200的时候,才会打印我们的flag,我们可以知道,我们flag会进过200次的循环计算才能出现。

Untitled

通过这个函数我们可以知道,我们的v79代表的是我们的关卡

在上面的那个图中,有着一个进入show_score是一个判断,之后,便会失败

Untitled

这个v82在下面的计算之中,我们可以大致分析(猜)出,这个v82就是关卡判断,判定我们是不是过关了,当v82等于零的时候才算过关,不然就会跳到重开去,由此印证了上的猜测。这里我们同样patch将这个判断变成!v82,这样只要不是0都能过关,这样就是能让我随意按wasd就能直接过下关。

200关后得出我们的flag.

Untitled

做完之后,还是蛮有收获的,其实像这中游戏逆向等,大都那几个步骤,寻找关键函数,关键判断,然后通过patch,或者添加代码来让程序能快速的达到我们的目的。

还没有人赞赏,快来当第一个赞赏的人吧!
  
© 著作权归作者所有

加载中...

加载失败
广告
×
评论区
添加新评论