1.运行函数,收集字符串

获取关键词字符串:luck

2.寻找字符串引用代码

3.生成伪代码

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

5.分析程序逻辑

check函数:

main函数

  1. int __fastcall main(int argc, const char **argv, const char **envp)
  2. {
  3.   unsigned int v3; // edx
  4.   char v5; // [rsp+23h] [rbp-Dh]
  5.   unsigned int v6; // [rsp+28h] [rbp-8h]
  6.   unsigned int v7; // [rsp+2Ch] [rbp-4h]
  7.   _main(argc, argv, envp);
  8.   puts("Welcome to the maze. You need to find the exit, which is at point C. Your current position is marked as @.");
  9.   puts("flag{\"The shortest route\"},good luck!!");
  10.   v7 = 14;
  11.   v6 = 0;
  12.   while ( (unsigned int)check(v7, v6) != 1 )
  13.   {
  14.     while ( 1 )
  15.     {
  16.       v5 = getchar();
  17.       if ( v5 == 108 )
  18.         break;
  19.       if ( v5 > 108 )
  20.       {
  21.         if ( v5 == 115 )
  22.         {
  23.           ++v7;
  24.           goto LABEL_15;
  25.         }
  26.         if ( v5 == 121 )
  27.         {
  28.           --v7;
  29.           goto LABEL_15;
  30.         }
  31.       }
  32.       else if ( v5 == 99 )
  33.       {
  34.         ++v6;
  35.         goto LABEL_15;
  36.       }
  37.     }
  38.     --v6;
  39. LABEL_15:
  40.     if ( (unsigned int)check_1(v7, v6) )
  41.     {
  42.       puts("you've hit a wall!!bro@!");
  43.       if ( v5 == 108 )
  44.       {
  45.         ++v6;
  46.       }
  47.       else if ( v5 > 108 )
  48.       {
  49.         if ( v5 == 115 )
  50.         {
  51.           --v7;
  52.         }
  53.         else if ( v5 == 121 )
  54.         {
  55.           ++v7;
  56.         }
  57.       }
  58.       else if ( v5 == 99 )
  59.       {
  60.         --v6;
  61.       }
  62.     }
  63.     else
  64.     {
  65.       puts("You are one step closer to victory!!");
  66.       v3 = idx++;
  67.       str[v3] = v5;
  68.     }
  69.   }
  70.   puts("you are win!!");
  71.   sleep(60LL);
  72.   return 0;
  73. }

发现 ‘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的更多相关文章

  1. 【pwn】学pwn日记——栈学习(持续更新)

    [pwn]学pwn日记--栈学习(持续更新) 前言 从8.2开始系统性学习pwn,在此之前,学习了部分汇编指令以及32位c语言程序的堆栈图及函数调用. 学习视频链接:XMCVE 2020 CTF Pw ...

  2. 【pwn】DASCTF Sept 九月赛

    [pwn]DASCTF Sept 月赛 1.hehepwn 先查看保护,栈可执行,想到shellcode 这题需要注意shellcode的写法 拖入ida中分析 一直以为iso scanf不能栈溢出, ...

  3. 【pwn】V&N2020 公开赛 simpleHeap

    [pwn]V&N2020 公开赛 simpleHeap 1.静态分析 首先libc版本是ubuntu16的2.23版本,可以去buu的资源处下载 然后checksec一下,保护全开 拖入IDA ...

  4. 【pwn】学pwn日记(堆结构学习)

    [pwn]学pwn日记(堆结构学习) 1.什么是堆? 堆是下图中绿色的部分,而它上面的橙色部分则是堆管理器 我们都知道栈的从高内存向低内存扩展的,而堆是相反的,它是由低内存向高内存扩展的 堆管理器的作 ...

  5. 【pwn】攻防世界 pwn新手区wp

    [pwn]攻防世界 pwn新手区wp 前言 这几天恶补pwn的各种知识点,然后看了看攻防世界的pwn新手区没有堆题(堆才刚刚开始看),所以就花了一晚上的时间把新手区的10题给写完了. 1.get_sh ...

  6. 【PWN】初见BROP

    前言|与BROP的相遇 第一次BROP,它让我觉得pwn,或者说网安很妙,也很折磨 在遇到它之前,之前接触的题目都是简单的栈溢出,感觉没有啥有趣的,很简单,找gadget溢出就可以,一切都看得见 可遇 ...

  7. 【hdu4035】Maze

    Portal --> hdu4035 Solution 讲道理不是很懂为啥概d那么喜欢走迷宫qwq (推式子推的很爽的一题?) 首先大力dp列式子 用\(f[i]\)表示从\(i\)到离开的期望 ...

  8. 【CF123E】Maze

    Portal --> cf123E Solution 首先步数的话可以转化成每条边经过了几次这样来算 假设现在确定了起点\(S\)和终点\(T\),我们将\(T\)看成树根,那么考虑边\((u, ...

  9. 【XSY2525】Maze 2017多校

    Description 考虑一个 N×M 的网格,每个网格要么是空的,要么是障碍物.整个网格四周都是墙壁(即第1行和第n行,第1列和第m列都是墙壁),墙壁有且仅有两处开口,分别代表起点和终点.起点总是 ...

  10. 【南京邮电】maze 迷宫解法

    [南京邮电]maze 迷宫解法 题目来源:南京邮电大学网络攻防训练平台. 题目下载地址:https://pan.baidu.com/s/1i5gLzIt (密码rijss) 0x0 初步分析 题目中给 ...

随机推荐

  1. 我用Awesome-Graphs看论文:解读PowerGraph

    PowerGraph论文:<PowerGraph: Distributed Graph-Parallel Computation on Natural Graphs> 上次通过文章< ...

  2. top的wa,mpstat的%iowait以及pidstat的%wait

    top的wa,mpstat的%iowait以及pidstat的%wait pidstat 中, %wait 表示进程等待 CPU 的时间百分比.等待 CPU 的进程已经在 CPU 的就绪队列中,处于运 ...

  3. Jmeter函数助手8-counter

    counter函数用于线程计数,类似计数器. TRUE每个用户有自己的计数器:FALSE使用全局计数器:即线程之间是否需要共享累加计数器,TRUE否,FALSE是 存储结果的变量名(可选) 1.线程之 ...

  4. 【FastDFS】05 Java程序测试上传

    创建普通Maven工程 导入所需依赖坐标: <dependencies> <!-- https://mvnrepository.com/artifact/net.oschina.zc ...

  5. 【Docker】09 部署挂载本地目录的Redis

    1.拉取Redis镜像: docker pull redis:6.0.6 2.执行挂载命令: docker run -d \ --name=redis \ --restart=always \ --p ...

  6. python高性能计算:cython使用openmp并行 —— 报错:undefined symbol: omp_get_thread_num

    test.pyx文件: from cython.parallel cimport parallel from openmp cimport omp_get_thread_num cpdef void ...

  7. 易拍照 —— 毕业生图像采集操作指南——如何使用 “易拍照” 微信小程序进行图像采集

    易拍照 -- 毕业生图像采集操作指南--如何使用 "易拍照" 微信小程序进行图像采集 ============================================

  8. java多线程之-CAS无锁-常见API

    1.背景 这一节,就是学习常用的cas对象与api ..... 2.原子整数 直接看代码吧,或者看API文档 2.1.AtomicInteger的API演示 package com.ldp.demo0 ...

  9. oracle利用job实现存储过程异步执行

    1.背景 在实际开发中,我们可能会利用存储过程批量处理业务, 对应有些存储过程可能会执行很长时间,这时我们需要客户端点操作后,存储过程异步执行 具体实现如下 1.创建处理业务的存储过程:sp_test ...

  10. 使用 Apache SeaTunnel 实现 Kafka Source 解析复杂Json 案例

    版本说明: SeaTunnel:apache-seatunnel-2.3.2-SNAPHOT 引擎说明: Flink:1.16.2 Zeta:官方自带 前言 近些时间,我们正好接手一个数据集成项目,数 ...