解题思路:

第一步还是查壳,查壳是无壳,64位。

放入ida64位中,找到main函数,之后反编译获得源码。

__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) != '}' )// flag结构,flag长度是24,前五位是nctf{ 最后一位是}{LABEL_22:puts("Wrong flag!");exit(-1);}v3 = 5LL;if ( strlen(&s1) - 1 > 5 ){while ( 1 ){v4 = *(&s1 + v3);v5 = 0;if ( v4 > 78 ){v4 = (unsigned __int8)v4;if ( (unsigned __int8)v4 == 79 ){v6 = sub_400650((_DWORD *)&v9 + 1);goto LABEL_14;}if ( v4 == 111 ){v6 = sub_400660((int *)&v9 + 1);goto LABEL_14;}}else{v4 = (unsigned __int8)v4;if ( (unsigned __int8)v4 == 46 ){v6 = sub_400670(&v9);goto LABEL_14;}if ( v4 == 48 ){v6 = sub_400680((int *)&v9);
LABEL_14:v5 = v6;goto LABEL_15;}}
LABEL_15:if ( !(unsigned __int8)sub_400690((__int64)asc_601060, SHIDWORD(v9), 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)] != 35 )goto LABEL_20;v7 = "Congratulations!";                      //  祝贺
LABEL_21:puts(v7);return 0LL;
}

看到祝贺那里,证明是获得了flag,说是一个迷宫题,所以开始找逻辑,转换字符串和一些基本的信息提取出来写成注释的方式。

__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) != '}' )// flag结构,flag长度是24,前五位是nctf{ 最后一位是}{LABEL_22:puts("Wrong flag!");exit(-1);}v3 = 5LL;if ( strlen(&s1) - 1 > 5 )                    // 如果输入的-1大于5{while ( 1 ){v4 = *(&s1 + v3);                         // v4 = s1[5]v5 = 0;if ( v4 > 'N' )                           // 如果v4大于字符N{v4 = (unsigned __int8)v4;if ( (unsigned __int8)v4 == 'O' )       // 如果是O{v6 = sub_400650((_DWORD *)&v9 + 1);   // 大于0goto LABEL_14;}if ( v4 == 'o' )                        // 如果v4是o{v6 = sub_400660((int *)&v9 + 1);      // 边界是8goto LABEL_14;}}else{v4 = (unsigned __int8)v4;if ( (unsigned __int8)v4 == '.' )       // 如果v4=.{v6 = sub_400670(&v9);                 // 大于0goto LABEL_14;}if ( v4 == '0' )                        // 如果v4 = 0{v6 = sub_400680((int *)&v9);          // 边界是8
LABEL_14:v5 = v6;goto LABEL_15;}}
LABEL_15:if ( !(unsigned __int8)sub_400690((__int64)asc_601060, SHIDWORD(v9), 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;
}

现在的已知条件,告诉了我们边界是8,那么这是一个8*8的迷宫,并且碰到#停止,那么现在重构一下迷宫的图形,通过这句话来构造。

  if ( asc_601060[8 * (signed int)v9 + SHIDWORD(v9)] != '#' )
.data:0000000000601060 asc_601060      db '  *******   *  **** * ****  * ***  *#  *** *** ***     *********',0

经过重构可以得到。

11******
*111*11*
***1*1**
**11*1**
*11*#11*
**1***1*
**11111**
*******

这样的一个迷宫,现在只要进行避开,那些星号的位置,即可获得flag,也就是右下右右下下左下下下右右右右上上左左
知道右是o,O是左,.是上,0是下,那么组合一下按照规则是
nctf{o0oo00O000oooo…OO}

[攻防世界]maze相关推荐

  1. 攻防世界 maze (也是南邮的maze)

    maze 迷宫. 根据题目,这应该是条关于走迷宫的题. 需要一定的脑洞,最主要是要做过相似的题,不然第一次做,看伪c,会有点困难. 下载后,看了一眼,判断应该不是windows的, 拖进linux, ...

  2. 逆向-攻防世界-maze

    题目提示是走迷宫. IDA载入程序分析. 输入字符长度必须是24,开头必须是nctf{,结尾必须是}.在125处按R就可以变成字符. sub_400650和sub_400660是关键函数,分析sub_ ...

  3. 攻防世界--maze

    测试文件下载:https://adworld.xctf.org.cn/media/task/attachments/fa4c78d25eea4081864918803996e615 1.准备 获得信息 ...

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 一笔画 (25 分)
  2. 盘点类别级物体6D位姿估计
  3. 020-Json结构数据序列化异步传递
  4. linux 之RAID详解
  5. php ab压力测试,安装Xcache缓存加速php及ab压力测试结果
  6. zookeeper3.3.6 伪分布式安装
  7. 【转载】.NET系统学习----Assembly
  8. c++实现秒数转化为天数,小时,分钟,秒
  9. YDOOK:Maxwell 电磁场仿真 最新版的 Maxwell 软件 使用什么软件进行电磁场仿真
  10. 数字移动c语言课程设计,《移动应用开发》课程设计.doc
  11. 2018冬令营模拟测试赛(十九)
  12. 3D世界 ORGE SceneManager GetStart
  13. 使用vue简单实现音乐播放器
  14. 计算机考研复试——数据结构篇
  15. KEIL、uVision、RealView、MDK、KEIL C51区别
  16. 入坑rockchip 基础信息资料
  17. Kettle: 合并记录
  18. 泰山OFFICE技术讲座:由中英文混排,谈间距kerning
  19. 英孚教育全面上云与Serverless构建之路
  20. Java语言程序设计与数据结构(基础篇)梁勇第一章书中例题

热门文章

  1. css文字超出省略号代替
  2. 设计模式(21):创建型-单例模式(Singleton)
  3. QTabBar关闭按钮图标
  4. Html —— 修改滚动条宽度
  5. 开源工具分享--PicoShare文件共享系统【网盘替代方案】
  6. Windows系统分盘
  7. 以输出省-是-县代码案例,计算几种算法的效率
  8. 分布式文件系统FastDFS的搭建
  9. Numpy 的文件存储.npy和.npz 区别
  10. linux系统下安装微信