BUUCTF-RE-[HDCTF2019]Maze
太难了太难了,这道题是花指令+迷宫逆向,本来以为学了汇编就学会了花指令,没想到nop哪里才是关键
首先查壳,外面一个"UPX"壳,直接去掉,检查里面的函数逻辑,发现不能正常反编译
然后下面还有一大堆数据不知道啥情况,这就是花指令导致的,中间的call
和jnz
均指向了一个无法成功跳转的地址(没有意义的地址),我们尝试将这两个指令nop掉之后,先用U
将原函数解定义,然后再用C
重新makecode,最后用P
进行反编译,于是可以得到正常的main函数内容。此时我们可以看到原来那些乱七八糟的数据也是程序的一部分,只不过没有正确的解读和反编译:
我们看到WASD
便可以下意识的想到迷宫逆向(题目名字也有个Maze),我们进一步观察asc_408078
和dword_40807C
可以看到这是起点的初始值(7,0)
,根据判断条件我们我们需要移动到(5,4)
的地方
接下来就是找迷宫在哪里?我们直接到字符串里面去定位到迷宫的内存位置,有70位,猜测是一个7*10
的迷宫,我们可以写出迷宫的生成脚本:
c = "*******+********* ****** **** ******* **F****** **************"
for i in range(len(c)):
print(c[i],end="")
if(i%10==9):
print()
其中+
号是起点,F
是终点,对着比划,得到最终的步骤是ssaaaasaassdddw