1.查壳
64位ELF文件
2.拖入IDA
找到main函数F5反编译

__int64 __fastcall main(__int64 a1, char **a2, char **a3)
{signed __int64 v3; // rbxsigned int v4; // eaxbool v5; // bpbool v6; // alconst char *v7; // rdi__int64 v9; // [rsp+0h] [rbp-28h]v9 = 0LL;puts("Input flag:");scanf("%s", &s1, 0LL);if ( strlen(&s1) != 24 || strncmp(&s1, "nctf{", 5uLL) || *(&byte_6010BF + 24) != '}' ){LABEL_22:puts("Wrong flag!");exit(-1);}v3 = 5LL;if ( strlen(&s1) - 1 > 5 ){while ( 1 ){v4 = *(&s1 + v3);v5 = 0;if ( v4 > 'N' ){v4 = (unsigned __int8)v4;if ( (unsigned __int8)v4 == 'O' ){v6 = sub_400650((_DWORD *)&v9 + 1);goto LABEL_14;}if ( v4 == 'o' ){v6 = sub_400660((int *)&v9 + 1);goto LABEL_14;}}else{v4 = (unsigned __int8)v4;if ( (unsigned __int8)v4 == '.' ){v6 = sub_400670(&v9);goto LABEL_14;}if ( v4 == '0' ){v6 = sub_400680((int *)&v9);
LABEL_14:v5 = v6;goto LABEL_15;}}
LABEL_15:if ( !(unsigned __int8)sub_400690(asc_601060, HIDWORD(v9), (unsigned int)v9) )goto LABEL_22;if ( ++v3 >= strlen(&s1) - 1 ){if ( v5 )break;
LABEL_20:v7 = "Wrong flag!";goto LABEL_21;}}}if ( asc_601060[8 * (signed int)v9 + SHIDWORD(v9)] != '#' )goto LABEL_20;v7 = "Congratulations!";
LABEL_21:puts(v7);return 0LL;
}

这段代码一出来还有点懵,不过还是习惯性地把能转成字符串的转换好
沉思有一段时间后,参考题目说是走迷宫,又看到代码中有O,o,0,.这四个字符,于是猜测可能对应上下左右四个方向,而迷宫应该是个二维数组
分析代码,发现了四个函数

bool __fastcall sub_400650(_DWORD *a1)//(_DWORD *)&v9 + 1 'O'
{int v1; // eaxv1 = (*a1)--;return v1 > 0;
}bool __fastcall sub_400660(int *a1)//(int *)&v9 + 1 'o'
{int v1; // eaxv1 = *a1 + 1;*a1 = v1;return v1 < 8;
}bool __fastcall sub_400670(_DWORD *a1)//&v9 '.'
{int v1; // eaxv1 = (*a1)--;return v1 > 0;
}bool __fastcall sub_400680(int *a1)//&v9 '0'
{int v1; // eaxv1 = *a1 + 1;*a1 = v1;return v1 < 8;
}

分别与O,o,.,0相对应
根据二维数组的性质,可以判断出
O对应左
o对应右
.对应上
0对应下
而这些函数传入的参数v9应该就是迷宫了
所以要找到迷宫

 asc_601060      db '  *******   *  **** * ****  * ***  *#  *** *** ***     *********',0

这些就是迷宫,需要把它还原
asc_601060是个char[65]的字符串,除去一个空字符,所以猜测应该是个8
8的迷宫

  ******
*   *  *
*** * **
**  * **
**  * **
*  *#  *
** *** *
**     *
********

我们的终点是迷宫中心的那个#,起点是左上角顶点,所以走迷宫就能得到flag
再加上程序开头提示的

if ( strlen(&s1) != 24 || strncmp(&s1, "nctf{", 5uLL) || *(&byte_6010BF + 24) != '}' )

我们就能得出flag为

nctf{o0oo00O000oooo…OO}

攻防世界re:maze相关推荐

  1. 攻防世界 REVERSE 新手区/maze

    攻防世界 REVERSE 新手区/maze 老规矩先查壳,没加壳而且是64位的 用IDA64位打开,找到main函数F5查看伪代码 这是一个迷宫题,必然是有迷宫图在里面,然后走的路径就是输出的flag ...

  2. 逆向迷宫题总结(持续更新) 2020华南师大CTF新生赛maze,攻防世界新手区:NJUPT CTF 2017,BUUCTF:不一样的flag

    CTF逆向入门:迷宫题学习记录(持续更新) ** 目录 **CTF逆向入门:迷宫题学习记录(持续更新)** (前言) 一. 逆向迷宫题概述 二. 具体题目分析 1. 2019华南师大CTF新生赛maz ...

  3. 攻防世界RE练习区题目总结(1-10)

    前言 这篇文章是我做完攻防世界练习区的题目后对这十道题做的总结.emmm,其实这几道题我几个月前就做完了,这几天又回去试着再做一遍发现还是有一些地方存在疑惑,并且速度也没有太大的提升.所以决定把之前做 ...

  4. 攻防世界逆向初级训练

    攻防世界逆向新手训练区wp 文章目录 re1 做题实录 分析总结 game 做题实录 分析总结 Hello,CTF 做题实录 分析总结 open-source 做题实录 分析总结 simple-unp ...

  5. python 一亩三分地_攻防世界逆向新手训练

    本来是搞Web的(虽然菜的抠脚),但是战队缺reverse和pwn的人,正好自己对这方面也很有兴趣,于是就转了方向.刚学几天,先做上几道攻防世界的新手训练题.把自己做题的过程和学到的知识记录下来.由于 ...

  6. 【攻防世界001】Guess-the-Number

    攻防世界之前刷了几十题了,没写wp,感觉很简单没啥意思.后来参加了几次比赛,发现有点干不动,决定还是老老实实刷题好了.这是第一篇wp,这题很简单,是个jar,用jd-gui可以得到java源码. 原来 ...

  7. 攻防世界(pwn)--Mary_Morton 利用格式化字符串+栈溢出破解Canary的保护机制

    ctf(pwn) canary保护机制讲解 与 破解方法介绍 程序执行流程 有三个选项,1是利用栈溢出,2是利用格式化字符串,3是退出;可连续输入多次; IDA分析 解题思路 程序存在canary保护 ...

  8. 攻防世界(Pwn) forgot---栈溢出;(方法二)

    攻防世界(Pwn) forgot-栈溢出:(方法一) 里面对问题描述的更详细一点 返回目标函数 0x80486CC 方法二(爆破流) 因为最终返回的是 v3[0]-v3[9] 之中的一个函数, v3[ ...

  9. 攻防世界(Pwn) forgot---栈溢出;(方法一)

    攻防世界(Pwn) forgot-栈溢出:(方法二) 介绍 这道题表面看起来有点复杂,其实很简单,有两种方法可以来做这一道题; 方法一(精确打击) 文件运行流程是: 1.先输入名字 2. 输入一串字符 ...

  10. 攻防世界misc新手_[攻防世界]mobile新手练习区easy-apk

    [攻防世界]mobile新手练习区easy-apk easy-apk最佳Writeup由129师386旅独立团 • devi1提供 难度系数: 7.0 题目来源: 暂无 题目描述:无 题目场景: 暂无 ...

最新文章

  1. Mycat实现读写分离
  2. 一起做激光SLAM:ICP匹配用于闭环检测
  3. CTF-RSA-tool 安装全过程
  4. c# 注册表操作,创建,删除,修改,判断节点是否存在
  5. 关于 IAR 环境的一些使用 琐记
  6. JavaScript tab页
  7. 微课|玩转Python轻松过二级(3.2节):元组与生成器推导式
  8. 亚信基于AWS构建世界级企业互联网平台
  9. 将BC26连接至OneNET平台
  10. Revisiting Spatial-Temporal Similarity: A Deep Learning Framework for Traffic Prediction
  11. python的invalid syntax是什么意思_请问在python 中 出现 invalid syntax 是什么意思 ?
  12. 图格 Pro for mac(图片拼图切图大师)
  13. 计算机能直接执行的语言程序是,计算机能够直接执行的程序是什么语言
  14. V4L2采集视频数据
  15. 码云果园:术后人群怎么吃水果
  16. 微信推文中图片无法保存的解决方案
  17. spring技术详解
  18. 存储器读写c语言程序,单片机IIC接口存储器AT24C04的读写和显示程序(详细注释)...
  19. 三星电脑Notebook 5(NP500R3M-K08)更换SSD
  20. ChirpStack 笔记 2.7 JS编解码函数的使用

热门文章

  1. 从零开始学习cocoStudio(1)--cocoStudio是什么?
  2. MegaCli64/MegaCli命令详解
  3. Java初级面试题(详细)
  4. 荣耀V20改变的通讯规则:告别一个时代,迎来了一个时代
  5. 多揉人体5大黄金穴养生抗衰老
  6. C++流媒体开源库Live555详细介绍
  7. 第4周项目5- 猴子选大王
  8. Socket编程(简单(C++)实现TCP通信)
  9. nginx常用配置详解
  10. 网页设计师和网站开发人员之间的区别是什么!