[HDCTF2019]Maze

image-20240929154615231

打开程序

image-20240929154629074

查壳

image-20240929154716775

查壳为UPX壳,进行UPX脱壳

https://github.com/upx/upx

1
upx.exe -d E:\CTF\REVERSE\maze_behind_junk.exe

image-20240929155431629

重新查壳发现脱壳成功

image-20240929155508187

使用IDA打开程序,进入main函数,发现jnz跳转和call指令,该段call指令为明显花指令

image-20240929160657781

对其进行NOP手脱花指令,将jnz和E8字节码NOP,首先使用快捷键D恢复字节数据再NOP

image-20240929160845165

image-20240929160948019

之后使用F5恢复伪代码,恢复失败。使用鼠标将红色代码选中,使用快捷键P声明为函数,之后可以F5恢复成伪代码

image-20240929161442489

这是一道maze迷宫题,经分析判断asc_408078为x轴坐标,dword_40807C为y轴坐标,初始坐标为(7,0)最终坐标为(5,-4),最多输入字符串长度14,wsad对应上下左右键

image-20240929162852962

image-20240929162939790

经分析该代码F5伪代码翻译如下

image-20240929163047637

通过字符串窗口找到迷宫字符串

image-20240929164352923

1
2
3
4
5
6
7
8
9
10
11
12
13
14
  0123456789
0*******+**
-1******* **
-2**** **
-3** *****
-4** **F****
-5** ****
-6**********

经推测+为初始位置(7,0)
那么F就为Flag最终位置(5,-4)
从+到F的位置使用方向盘为ssaaasaassdddw

那么最终得到flag为:flag{ssaaasaassdddw}

__END__