【Pwn】maze - writrup
1.运行函数,收集字符串

获取关键词字符串:luck
2.寻找字符串引用代码

3.生成伪代码

4.获得main函数的C语言代码

5.分析程序逻辑
check函数:


main函数
int __fastcall main(int argc, const char **argv, const char **envp)
{
unsigned int v3; // edx
char v5; // [rsp+23h] [rbp-Dh]
unsigned int v6; // [rsp+28h] [rbp-8h]
unsigned int v7; // [rsp+2Ch] [rbp-4h]
_main(argc, argv, envp);
puts("Welcome to the maze. You need to find the exit, which is at point C. Your current position is marked as @.");
puts("flag{\"The shortest route\"},good luck!!");
v7 = 14;
v6 = 0;
while ( (unsigned int)check(v7, v6) != 1 )
{
while ( 1 )
{
v5 = getchar();
if ( v5 == 108 )
break;
if ( v5 > 108 )
{
if ( v5 == 115 )
{
++v7;
goto LABEL_15;
}
if ( v5 == 121 )
{
--v7;
goto LABEL_15;
}
}
else if ( v5 == 99 )
{
++v6;
goto LABEL_15;
}
}
--v6;
LABEL_15:
if ( (unsigned int)check_1(v7, v6) )
{
puts("you've hit a wall!!bro@!");
if ( v5 == 108 )
{
++v6;
}
else if ( v5 > 108 )
{
if ( v5 == 115 )
{
--v7;
}
else if ( v5 == 121 )
{
++v7;
}
}
else if ( v5 == 99 )
{
--v6;
}
}
else
{
puts("You are one step closer to victory!!");
v3 = idx++;
str[v3] = v5;
}
}
puts("you are win!!");
sleep(60LL);
return 0;
}
发现 ‘s' 'l' 'y ' 'c' 为控制上下左右移动

要使map[10 * a1 + a2] == 67 为真
提取map数组数据,获取得到地图

替换方便查看

观察发现 0属于路,1属于墙
由于当check(v7,v6) !=1时跳出循环,游戏胜利,所以需要设法构建使得check函数返回1

由check函数分析得出,67为迷宫出口

由此可得67为出口,64为起点


由以上算法可得 c为向右 y向上 s向下 l向左
故路径为cyyyyyyyyyccccssscccssssssc
不过这里应该有个什么脚本可以可以。(BFS //不过我还没学过hhh)
【Pwn】maze - writrup的更多相关文章
- 【pwn】学pwn日记——栈学习(持续更新)
[pwn]学pwn日记--栈学习(持续更新) 前言 从8.2开始系统性学习pwn,在此之前,学习了部分汇编指令以及32位c语言程序的堆栈图及函数调用. 学习视频链接:XMCVE 2020 CTF Pw ...
- 【pwn】DASCTF Sept 九月赛
[pwn]DASCTF Sept 月赛 1.hehepwn 先查看保护,栈可执行,想到shellcode 这题需要注意shellcode的写法 拖入ida中分析 一直以为iso scanf不能栈溢出, ...
- 【pwn】V&N2020 公开赛 simpleHeap
[pwn]V&N2020 公开赛 simpleHeap 1.静态分析 首先libc版本是ubuntu16的2.23版本,可以去buu的资源处下载 然后checksec一下,保护全开 拖入IDA ...
- 【pwn】学pwn日记(堆结构学习)
[pwn]学pwn日记(堆结构学习) 1.什么是堆? 堆是下图中绿色的部分,而它上面的橙色部分则是堆管理器 我们都知道栈的从高内存向低内存扩展的,而堆是相反的,它是由低内存向高内存扩展的 堆管理器的作 ...
- 【pwn】攻防世界 pwn新手区wp
[pwn]攻防世界 pwn新手区wp 前言 这几天恶补pwn的各种知识点,然后看了看攻防世界的pwn新手区没有堆题(堆才刚刚开始看),所以就花了一晚上的时间把新手区的10题给写完了. 1.get_sh ...
- 【PWN】初见BROP
前言|与BROP的相遇 第一次BROP,它让我觉得pwn,或者说网安很妙,也很折磨 在遇到它之前,之前接触的题目都是简单的栈溢出,感觉没有啥有趣的,很简单,找gadget溢出就可以,一切都看得见 可遇 ...
- 【hdu4035】Maze
Portal --> hdu4035 Solution 讲道理不是很懂为啥概d那么喜欢走迷宫qwq (推式子推的很爽的一题?) 首先大力dp列式子 用\(f[i]\)表示从\(i\)到离开的期望 ...
- 【CF123E】Maze
Portal --> cf123E Solution 首先步数的话可以转化成每条边经过了几次这样来算 假设现在确定了起点\(S\)和终点\(T\),我们将\(T\)看成树根,那么考虑边\((u, ...
- 【XSY2525】Maze 2017多校
Description 考虑一个 N×M 的网格,每个网格要么是空的,要么是障碍物.整个网格四周都是墙壁(即第1行和第n行,第1列和第m列都是墙壁),墙壁有且仅有两处开口,分别代表起点和终点.起点总是 ...
- 【南京邮电】maze 迷宫解法
[南京邮电]maze 迷宫解法 题目来源:南京邮电大学网络攻防训练平台. 题目下载地址:https://pan.baidu.com/s/1i5gLzIt (密码rijss) 0x0 初步分析 题目中给 ...
随机推荐
- C# Winform与JS交互
一.C#调用JS函数 1.JS代码 < script language = "javascript" > function Hello(msg) { alert('我是 ...
- 基础-数组_C语言
C 语言支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合.数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量. 数组的声明并不是声明一个个单独的变量,比如 runoob0. ...
- java开发,json转list集合,原生实现
java 是一门面象对象的语言,对象需要先定义,但是在外理网络请求时候会用到json 转成java 对象,虽然现代开发框架中也提供了很多工具和方法直接转换, 但是作为学习者了解 一下底层实现,更能灵活 ...
- scratch源码下载 | 几何冲刺
程序说明: <几何冲刺>是一款基于Scratch平台开发的跑酷类游戏程序.在这个游戏中,玩家控制一个黄色的小方块,在快速向前冲刺的过程中躲避各种障碍物.通过按下键盘上的上方向键,玩家可以操 ...
- Google的jax框架在TPU上的循环控制 —— 向量计算设备的循环结构控制
相关: https://jax.readthedocs.io/en/latest/pallas/tpu.html 向量计算设备,如:GPU.TPU等,都是通过向量计算来进行加速的,因此在这类设备中进行 ...
- 关于python的GIL的解除——PEP 703 – Making the Global Interpreter Lock Optional in CPython
PEP地址: https://peps.python.org/pep-0703/ PEP 703 – Making the Global Interpreter Lock Optional in CP ...
- 【转载】 t-SNE是什么? —— 使用指南
原文地址: https://www.cnblogs.com/LuckBelongsToStrugglingMan/p/14161405.html 转者前言: 该文相当于一个 t-SNE 使用指南, ...
- 聚焦OLAP性能提升,火山引擎ByteHouse发布六大场景解决方案
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群. 性能在数据分析中至关重要,它直接决定数据处理的效率与及时性,进一步对数据驱动的企业决策造成影响. 举个例 ...
- 2.3 Exception model
2.3.1 异常状态 2.3.1 异常类型
- 初探 Rust 语言与环境搭建
1. Rust 简介 Rust 的历史 起源:Rust 语言最初由 Mozilla 研究员 Graydon Hoare 于 2006 年开始设计,并于 2009 年首次公开. 开发:Rust 是 Mo ...