[HDCTF2019]Maze(初识逆向)

简介: [HDCTF2019]Maze(初识逆向)

下载附件解压,为了方便,我将文件名改为了maze.exe

一般我们先查壳,确实存在UPX

对于刚接触逆向的我,一键脱掉哈哈哈

不过还是要说一下,这种脱壳处理有可能会产生其它损坏或者影响,需要进行一定的修复

可以看到已经没壳了,我们尝试运行exe文件

大概意思是需要我们输入正确的东西来获取flag

经过检查,这是一个32位程序

我们将文件用IDA打开,F5反编译发现没反应

观察程序停在的地方,这里的 jnz 指令会实现一个跳转,并且下面的0EC85D78Bh被标红了,应该是一个不存在的地址,这些东西就会导致IDA无法正常反汇编出原始代码,也称为花指令。

我们需要将它们Nop掉(即使用Nop指令将它们改为空,Nop的hex是90)

找到这个选项

我们需要从75一直Nop到58

OK之后这四行都成了空

我们再找到这个选项

OK,居然直接成功了,我最开始将文件放在桌面似乎权限不够

(如果遇到权限不够的报错,尝试将文件放到D盘或者其他盘,不要放C盘)

现在我们再使用IDA打开修改后的文件,便可F5反编译成功

咦~ wsad 怎么看着这么眼熟,这不就是键盘上的上下左右吗

当你做逆向久了你就会知道,这其实是逆向的一种典型迷宫题

我们跟进上面的函数,找到了迷宫的内容

Format db '%14s' 是一个格式化字符串, %14s表示格式化一个字符串并占用14个字符的宽度

(可以理解为我们在迷宫里需要并且只能走十四步)

绿色框里的就是程序运行时会输出的内容

我们将迷宫内容导出,共有70个位置,这里我们猜它是10*7的迷宫

构造出迷宫的样子

def main():
    maze = "*******+********* ******    ****   ******* **F******    **************"
    sid = maze.index("+")
    eid = maze.index("F")
    ex,ey = -4,5
    c = (eid - ey) // (-ex)
    r = len(maze) // c
    print(r,c)
    for i in range(r):
        print(maze[c*i:c*(i+1)])
if __name__ == "__main__":
    main()

我们需要从+,经过14步,走到F

关于这个图可能容易产生误解,这里说明一下:

这个+和F其实都是夹在*中间的,并且竖着的*之间是没有空留位置的,一个*即对应着一格

可以等效为下图:

这里可以选择的路线不唯一,所以flag也应该是有多个的

下面给出两种可行的走法:

aasssssssswwww 或者 ssaaasaassdddw (w上s下a左d右,看你键盘)

都是可以的

最终拿到flag

flag{aasssssssswwww} 或 flag{ssaaasaassdddw}

目录
相关文章
|
7月前
【洛谷 P2249】【深基13.例1】查找(向量+lower_bound)
**深基13.例1**是关于查找的编程题,要求在单调不减的整数序列中,对每个查询\( q \)返回其首次出现的位置或输出\-1。输入包含序列大小\( n \),查询次数\( m \),以及序列和查询列表。使用`lower_bound`进行二分查找,找到第一个大于等于目标值的元素位置,若找不到或找到的值不等于目标值,则返回\-1。提供的AC代码中,优化了输入读取,并利用`std::vector`和`std::lower_bound`实现了高效解决方案。
46 0
|
存储
双指针与逆向双指针的妙用
双指针与逆向双指针的妙用
|
算法 C++
剑指offer(C++)-JZ12:矩阵中的路径(算法-回溯)
剑指offer(C++)-JZ12:矩阵中的路径(算法-回溯)
CF1272 E.Nearest Opposite Parity(反向建图+BFS)
CF1272 E.Nearest Opposite Parity(反向建图+BFS)
117 0
CF1272 E.Nearest Opposite Parity(反向建图+BFS)
CodeForces 377A-Maze(DFS找连通块)
CodeForces 377A-Maze(DFS找连通块)
CodeForces 377A-Maze(DFS找连通块)
|
算法 Serverless
☆打卡算法☆LeetCode 69、Sqrt(x) 算法解析
“给定一个非负整数,计算并返回x的算术平方根。”
|
算法 测试技术
【算法笔记题解】PAT A1075 PAT Judge
【算法笔记题解】PAT A1075 PAT Judge
【算法笔记题解】PAT A1075 PAT Judge