攻防世界re:maze
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]的字符串,除去一个空字符,所以猜测应该是个88的迷宫
******
* * *
*** * **
** * **
** * **
* *# *
** *** *
** *
********
我们的终点是迷宫中心的那个#,起点是左上角顶点,所以走迷宫就能得到flag
再加上程序开头提示的
if ( strlen(&s1) != 24 || strncmp(&s1, "nctf{", 5uLL) || *(&byte_6010BF + 24) != '}' )
我们就能得出flag为
nctf{o0oo00O000oooo…OO}
攻防世界re:maze相关推荐
- 攻防世界 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源码. 原来 ...
- 攻防世界(pwn)--Mary_Morton 利用格式化字符串+栈溢出破解Canary的保护机制
ctf(pwn) canary保护机制讲解 与 破解方法介绍 程序执行流程 有三个选项,1是利用栈溢出,2是利用格式化字符串,3是退出;可连续输入多次; IDA分析 解题思路 程序存在canary保护 ...
- 攻防世界(Pwn) forgot---栈溢出;(方法二)
攻防世界(Pwn) forgot-栈溢出:(方法一) 里面对问题描述的更详细一点 返回目标函数 0x80486CC 方法二(爆破流) 因为最终返回的是 v3[0]-v3[9] 之中的一个函数, v3[ ...
- 攻防世界(Pwn) forgot---栈溢出;(方法一)
攻防世界(Pwn) forgot-栈溢出:(方法二) 介绍 这道题表面看起来有点复杂,其实很简单,有两种方法可以来做这一道题; 方法一(精确打击) 文件运行流程是: 1.先输入名字 2. 输入一串字符 ...
- 攻防世界misc新手_[攻防世界]mobile新手练习区easy-apk
[攻防世界]mobile新手练习区easy-apk easy-apk最佳Writeup由129师386旅独立团 • devi1提供 难度系数: 7.0 题目来源: 暂无 题目描述:无 题目场景: 暂无 ...
最新文章
- Mycat实现读写分离
- 一起做激光SLAM:ICP匹配用于闭环检测
- CTF-RSA-tool 安装全过程
- c# 注册表操作,创建,删除,修改,判断节点是否存在
- 关于 IAR 环境的一些使用 琐记
- JavaScript tab页
- 微课|玩转Python轻松过二级(3.2节):元组与生成器推导式
- 亚信基于AWS构建世界级企业互联网平台
- 将BC26连接至OneNET平台
- Revisiting Spatial-Temporal Similarity: A Deep Learning Framework for Traffic Prediction
- python的invalid syntax是什么意思_请问在python 中 出现 invalid syntax 是什么意思 ?
- 图格 Pro for mac(图片拼图切图大师)
- 计算机能直接执行的语言程序是,计算机能够直接执行的程序是什么语言
- V4L2采集视频数据
- 码云果园:术后人群怎么吃水果
- 微信推文中图片无法保存的解决方案
- spring技术详解
- 存储器读写c语言程序,单片机IIC接口存储器AT24C04的读写和显示程序(详细注释)...
- 三星电脑Notebook 5(NP500R3M-K08)更换SSD
- ChirpStack 笔记 2.7 JS编解码函数的使用