[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}

目录
相关文章
|
数据安全/隐私保护 Python
BUUCTF 传统知识+古典密码 1
BUUCTF 传统知识+古典密码 1
835 0
|
算法 安全 Java
z3-solver求解器
一个非常高级的工具,SMT求解器。应用领域非常广,解各类方程,解各类编程问题(例如解数独),解逻辑题等都不在话下。
|
9月前
|
算法 安全 数据安全/隐私保护
BUUCTF-[2019红帽杯]easyRE(Reverse逆向)
本文详细介绍了对一个无壳的64位ELF文件进行逆向分析的过程。首先通过IDA查找关键字符串定位主函数,然后逐步分析函数逻辑,包括读取输入、异或操作等。接着通过多次Base64解码和异或操作,最终得到了关键的flag。整个过程涉及数组寻址、条件判断和函数调用等技术细节,展示了CTF竞赛中常见的逆向工程技巧。最后附上了完整的Python代码实现,帮助读者理解和复现。
550 1
BUUCTF-[2019红帽杯]easyRE(Reverse逆向)
|
9月前
|
安全 数据安全/隐私保护 Python
BUUCTF-[GUET-CTF2019]re(Reverse逆向)
本文介绍了如何对一个带有UPX壳的ELF文件进行逆向分析。首先通过010Editor确认文件类型和壳的存在,接着使用Free UPX工具进行脱壳。脱壳后在IDA中加载文件,通过字符串查找和交叉引用跟踪定位关键函数。最终利用Python的z3库解决约束问题,得到flag。过程中还遇到了Python版本兼容性问题,并通过重新安装z3-solver解决。最终flag为`flag{e165421110ba03099a1c039337}`,经MD5解密验证为`233`。
321 0
BUUCTF-[GUET-CTF2019]re(Reverse逆向)
20基础解决-buuctf-1.RSA1
20基础解决-buuctf-1.RSA1
|
数据安全/隐私保护 Python
BUUCTF [ACTF新生赛2020]base64隐写 1
BUUCTF [ACTF新生赛2020]base64隐写 1
865 0
BUUCTF [ACTF新生赛2020]base64隐写 1
|
存储
[ACTF新生赛2020]easyre 题解
[ACTF新生赛2020]easyre 题解
806 0
|
SQL Python
[CISCN2019 华北赛区 Day2 Web1]Hack World 1 题目分析与详解
[CISCN2019 华北赛区 Day2 Web1]Hack World 1 题目分析与详解
1009 0
[CISCN2019 华北赛区 Day2 Web1]Hack World 1 题目分析与详解
|
SQL 安全 JavaScript
【网络安全 | CatCTF】ezbypass-cat
【网络安全 | CatCTF】ezbypass-cat
644 0