[攻防世界]maze
解题思路:
第一步还是查壳,查壳是无壳,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相关推荐
- 攻防世界 maze (也是南邮的maze)
maze 迷宫. 根据题目,这应该是条关于走迷宫的题. 需要一定的脑洞,最主要是要做过相似的题,不然第一次做,看伪c,会有点困难. 下载后,看了一眼,判断应该不是windows的, 拖进linux, ...
- 逆向-攻防世界-maze
题目提示是走迷宫. IDA载入程序分析. 输入字符长度必须是24,开头必须是nctf{,结尾必须是}.在125处按R就可以变成字符. sub_400650和sub_400660是关键函数,分析sub_ ...
- 攻防世界--maze
测试文件下载:https://adworld.xctf.org.cn/media/task/attachments/fa4c78d25eea4081864918803996e615 1.准备 获得信息 ...
- 攻防世界 REVERSE 新手区/maze
攻防世界 REVERSE 新手区/maze 老规矩先查壳,没加壳而且是64位的 用IDA64位打开,找到main函数F5查看伪代码 这是一个迷宫题,必然是有迷宫图在里面,然后走的路径就是输出的flag ...
- 逆向迷宫题总结(持续更新) 2020华南师大CTF新生赛maze,攻防世界新手区:NJUPT CTF 2017,BUUCTF:不一样的flag
CTF逆向入门:迷宫题学习记录(持续更新) ** 目录 **CTF逆向入门:迷宫题学习记录(持续更新)** (前言) 一. 逆向迷宫题概述 二. 具体题目分析 1. 2019华南师大CTF新生赛maz ...
- 攻防世界RE练习区题目总结(1-10)
前言 这篇文章是我做完攻防世界练习区的题目后对这十道题做的总结.emmm,其实这几道题我几个月前就做完了,这几天又回去试着再做一遍发现还是有一些地方存在疑惑,并且速度也没有太大的提升.所以决定把之前做 ...
- 攻防世界逆向初级训练
攻防世界逆向新手训练区wp 文章目录 re1 做题实录 分析总结 game 做题实录 分析总结 Hello,CTF 做题实录 分析总结 open-source 做题实录 分析总结 simple-unp ...
- python 一亩三分地_攻防世界逆向新手训练
本来是搞Web的(虽然菜的抠脚),但是战队缺reverse和pwn的人,正好自己对这方面也很有兴趣,于是就转了方向.刚学几天,先做上几道攻防世界的新手训练题.把自己做题的过程和学到的知识记录下来.由于 ...
- 【攻防世界001】Guess-the-Number
攻防世界之前刷了几十题了,没写wp,感觉很简单没啥意思.后来参加了几次比赛,发现有点干不动,决定还是老老实实刷题好了.这是第一篇wp,这题很简单,是个jar,用jd-gui可以得到java源码. 原来 ...
最新文章
- 一笔画 (25 分)
- 盘点类别级物体6D位姿估计
- 020-Json结构数据序列化异步传递
- linux 之RAID详解
- php ab压力测试,安装Xcache缓存加速php及ab压力测试结果
- zookeeper3.3.6 伪分布式安装
- 【转载】.NET系统学习----Assembly
- c++实现秒数转化为天数,小时,分钟,秒
- YDOOK:Maxwell 电磁场仿真 最新版的 Maxwell 软件 使用什么软件进行电磁场仿真
- 数字移动c语言课程设计,《移动应用开发》课程设计.doc
- 2018冬令营模拟测试赛(十九)
- 3D世界 ORGE SceneManager GetStart
- 使用vue简单实现音乐播放器
- 计算机考研复试——数据结构篇
- KEIL、uVision、RealView、MDK、KEIL C51区别
- 入坑rockchip 基础信息资料
- Kettle: 合并记录
- 泰山OFFICE技术讲座:由中英文混排,谈间距kerning
- 英孚教育全面上云与Serverless构建之路
- Java语言程序设计与数据结构(基础篇)梁勇第一章书中例题