menu 牢记自己是菜
2017第二届广东省强网杯线上赛 SimpleGame
1216 浏览 | 2020-04-01 | 阅读时间: 约 4 分钟 | 分类: 春秋实验室 | 标签:
请注意,本文编写于 1486 天前,最后修改于 1486 天前,其中某些信息可能已经过时。

0x1 题目分析

SimpleGame
这道题目还是只想对了一半,之后的部分我就参考了一下一个大大的题解才勉强把题目顺下来。这道题目与攀登者那道题目十分的相似,最后也是一个需要使用算法将自己所提取到的地图与模型进行连接,最终输出flag。本题最困难的还是算法的理解方面,在这道题目一中,我已经猜到是一个关于map的题目。但是由于没有读懂算法,最终与题目的目的产生了比较大的偏差。主要是要明白一件事情,re中一定要打开脑洞。所谓的地图题不会只有迷宫题,还有可能会有很多其他的可能。生活中随便的一个游戏,一个算法,都有可能成为一道RE题目。所以还是要留意生活,观察生活。不多废话了,开始吧。


0x2 查壳分析

拿到题目查一下壳,发现是UPX的壳(小激动),直接手动脱壳,毕竟练习过过程还是挺快的,脱壳之后拖入IDA进行静态分析。

0x3 静态分析

脱壳之后,很容易定位到主要函数。分析一下函数,首先发现,我们的falg应该是一串长度位36的字符串。其次,有三个比较关键的函数在if判断里面,所以我们从这三个函数的处理开始。两个函数没有参数,只有第一个函数有我们输入的一个字符串。首先我们先检查一下传参数的函数。我们看见了很多的case,这表明原先的代码应给是else if的形式,并且循环以which进行,所以我们可以以猜一下,这应该是某种解释器,用来翻译我们所输入的字符串,至于翻译成什么还不太能看出来。

我们来看一下case干了什么,首先应该是有四个case,分别对应sawd。在这个时候我就已经猜到这道题应该与map有关,输入的东西很可能是与up,dwon,L,R类似的指令,最终在原始程序中完成一个操作,而操作指令就是我们的falg。所以我们明确了下一步该干的任务:

  • 函数解析如何进行
  • map是否固定,固定那map长啥样
  • 整个程序完成了什么操作

0x4 函数解析分析

首先我们查看这个函数里面涉及到的内存,发现了一串十分可疑的字符串,也是有四个字符构成,但不是我们需要的adsw。为了验证我的想法打开OD下断查看运行后此处的数据。

发现经过变化的确完成了改变。然后我们在分析一下这四个字符的解析规则。

  • a : 100-n
  • d : n-94
  • s : n-95
  • w : 99-n
    而n就是后面紧跟着的一个字符,要是我们的flag只包含这几个字符,并且在进入函数前严格要求了字符的大小写,那么应该与ASCII码有关。我们将他们的码值分别带入四个等式,发现无论是什么情况,都可以将返回值控制在0-9之间。所以我有理由怀疑这可能是一个坐标的变化,并且四个一组,最终有九组。

0x5 map的导出

这个我们将目光转向第二个函数,在分析时发现了一串字符存放在内存空间,我们将它dump出来,发现这串字符只有两个字符构成,分贝为0x0与0xf,这很像我们迷宫中的路于墙。我们在静态分析一下构造函数,发现这个是以9为一组循环九次,所以我们的地图应该是一个9*9的map。

但是我们dump出来的数据明显要大于81个但是正好等于81*4个,我们尝试使用4个为一组,取第一个的方法构造我们的map。成功的导出了一个没有起点没有终点的map。

0x5 分析题目让干嘛

这个地方困扰了我很久很久,我都没有的出答案,直到我受不了了,去看了一下wp,除了欣慰自己之前分析的正确以外,还是有一点点小失落,毕竟自己曾经离答案那么近。
大概是这样的,map中0为空格,f为墙壁。在第三个函数中我们构建了9个4*4的矩阵,我们的任务就是给出矩阵第一个元素的位置,将整个矩阵放入大矩阵中,将所有的0都填满,并且不重叠。很想我们小时候玩的伤脑筋9块(就是将九个木块以不同的方式组合,将其变成一个长方形)。于是我们找到内存,成功的导出了我们的“木块”。

0x6 最终方法

由于map与木块都是固定的,所以我们排序的方式也应该是唯一的,这里我偷懒了,不太想使用dfs之类的搜索方式,就直接手操了,由于孔隙是一定的,所以很容易就拼出来了。

最后就是用之前的四个字符,写出我们的坐标了。
最后的flag别忘加上flag{}
flag:flag{dcsdscdbwbadsdabwaacwcacadsdwbdcdbwc}


0x7 总结

要是不喜欢手操的话,可以用一下dfs算法,体验弹出flag的快感。这道题主要考到了以下几个方面:

  1. 压缩壳的脱壳
  2. 静态代码的分析
  3. 数据导出与处理
  4. 一点点脑洞
    这次虽然没有做到底,但是起码前期思路还是蛮正确的,算是有一点点进步吧!继续努力,还有少玩骑砍2。

发表评论

email
web

全部评论 (暂无评论)

info 还没有任何评论,你来说两句呐!