【2021.12.28】ctf逆向中的迷宫问题(含exe及wp)

news2025/1/15 22:47:27

【2021.12.28】ctf逆向中的迷宫问题(含exe及wp)

文章目录

  • 【2021.12.28】ctf逆向中的迷宫问题(含exe及wp)
    • 1、迷宫简介
      • (1)简单例子
      • (2)一般的迷宫代码
    • 2、二维迷宫
      • (1)实际例题
      • (2)练习
      • (3)二维迷宫的思考
    • 3、三维迷宫
      • (1)二维进阶
      • (2)三维迷宫逆向
      • (3)练习
    • 4、总结

1、迷宫简介

迷宫问题是ctf逆向中的经典问题。

(1)简单例子

image-20210908102726837

CTF中,一般都是以二维迷宫来考核,二维数组m[x][y],x代表迷宫的长,y代表迷宫的宽。代表路和墙的字符可以任意(一般为可见字符)代表方向的字符也可以任意(一般为熟悉的wasd)。一般通过for+switch-case语句来判别你输入的路径字符,逐个匹配。

image-20210908103102173

(2)一般的迷宫代码

迷宫数据

image-20210908103126605

走迷宫的判断

image-20210908103132231

2、二维迷宫

(1)实际例题

迷宫地图

image-20210908104853276

关键check函数IDA中的代码

image-20210908104909765

所以,迷宫问题进来首先是要能看懂算法是表示的公告,即确定上下左右对应的字符,然后再根据迷宫判定条件,确定迷宫地图的大小及所有路径,最后即可确定有效路径。

(2)练习

这里有个简单二维迷宫的练习,包含wp

链接:https://pan.baidu.com/s/1Kwi152PZngHknQf20xgcbw
提取码:mq0d

(3)二维迷宫的思考

可以发现,一般遇到的二维迷宫,地图都比较小,直接肉眼就能造出路径,那其实这样的迷宫问题主要就是看我们能否识别迷宫算法。

但当迷宫地图特别大的时候,我们怎么快速寻找路径呢?比如下面这个:

image-20210908111203614

这种,它迷宫地图又大,路径也不唯一,要想凭肉眼走,也不是不可以,只不过太麻烦了。

解决方法:

比较好的方法是利用BFS宽度优先搜索DFS深度优先搜索,这两个搜索算法。

3、三维迷宫

(1)二维进阶

原始的二维地图为m[x][y],x代表长,y代表宽

image-20210908112523222

如果我们用多个二维地图堆积起来到h层

image-20210908112531172

(实在找不到好看的图了,这个比较形象。。。。)

即:用三维数组m[x][y][h]来表示地图,这里的h就恰好表示层数。

(2)三维迷宫逆向

难点:获取地图后很难通过自己看地图走出路径

解决:还是利用BFS宽度优先搜索DFS深度优先搜索,这两个搜索算法。

这里提一下DFS深度优先搜索

DFS,深度优先搜索,形象点就比如:一个人来到分叉路口时,就是从一个节点一直往深处搜索,直到走到尽头,再往回走,走下一个节点,再次深搜……就相当于来回遍历,一个人走迷宫。

所以,dfs是运用递归的方法,基于回溯的思想。而回溯就是基于栈结构。栈结构的话,直接用数组来实现就可以了。

类似这样:image-20210908113037085

(3)练习

这里有个简单三维迷宫的练习,包含wp

链接:https://pan.baidu.com/s/1f3Ki3T7lSttTLGkORsRopg
提取码:qcmj

4、总结

二维迷宫比较简单,三维迷宫比较抽象,需要多练习才能熟悉。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/387650.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LeetCode 460. LFU 缓存 -- 哈希查询+双向链表

LFU 缓存 困难 634 相关企业 请你为 最不经常使用(LFU)缓存算法设计并实现数据结构。 实现 LFUCache 类: LFUCache(int capacity) - 用数据结构的容量 capacity 初始化对象 int get(int key) - 如果键 key 存在于缓存中,则获取键…

IP网络广播对讲系统的先进性及系统功能

IP网络广播对讲系统是一套基于TCP/IP网络的纯数字IP网络对讲机系统。在物理结构上,IP网络广播系统与标准IP网络集成。它不仅真正实现了基于TCP/IP网络的数字音频广播、直播和点播,而且借助TCP/IP网络的优势,突破了传统模拟广播系统的局限性、…

用Python写个猜数字游戏,写游戏难道比玩游戏还好玩(12)

小朋友们好,大朋友们好!我是猫妹,一名爱上Python编程的小学生。欢迎和猫妹一起,趣味学Python。今日主题开学差不多有1个月了吧?猫妹刚刚从寒假的玩玩玩模式切换到上学的学学学模式。你呢?这是猫妹的课程表&…

嵌入式中backtrace的使用

大家好,我是bug菌~ backtrace主要用于调试程序时,能够打印出程序在运行过程中的函数调用栈,以帮助开发者快速定位程序出现异常或崩溃的原因。 通过backtrace的输出,开发者可以了解程序在哪个函数出现问题&#xff0c…

APM飞控使用动捕等外部定位

本文初次写于2023.03.03,pixhawk飞控应该是刷写了ArduPilot 4.1以上的版本。 机载计算机通过WIFI和vrpn_ros_client获取动捕系统(vicon或者nokov)的无人机定位数据(x,y,z四元数),然…

HMM-维特比算法

HMM-维特比算法(viterbi)HMM回顾隐马科夫链解法:维特比算法(Viterbi)HMM回顾 最终的公式可以解释主要分为两个部分: P(xi|yi),发射概率,字面意思是从一个词性中发射/生成出某一个单…

【Java】Spring Boot下的MVC

文章目录Spring MVC程序开发1. 什么是Spring MVC?1.1 MVC定义1.2 MVC 和 Spring MVC 的关系2. 为什么学习Spring MVC?3. 怎么学习Spring MVC?3.1 Spring MVC的创建和连接3.1.1 创建Spring MVC项目3.1.2 RequestMapping 注解介绍3.1.3 Request…

1 网关介绍

网关介绍 在微服务架构中,一个系统会被拆分为很多个微服务。那么作为客户端要如何去调用这么多的微服务呢?如果没有网关的存在,我们只能在客户端记录每个微服务的地址,然后分别去调用。这样的话会产生很多问题,例如&a…

Threejs 创建的透明球体与模型前后看起来重叠解决方案

创建了球体透明的位置在后面例如 x: -2.2, y: 6, z: 0, 加载的模型在前面x: 2, y: 1, z: 13 ,创建的发光精灵 let spriteMaterial new THREE.SpriteMaterial({ map: spriteTexture, color: object.color, transparent: true, depthWrite: false, //深度写入属性 d…

SpringMVC中JSON数据的设置、RestFul风格

Java知识点总结:想看的可以从这里进入 目录3.4、JSON数据3.4.1、前端使用3.4.2、后端使用1、Jackson2、fastjson3.5、RestFul风格3.5.1、简介3.5.2、使用3.4、JSON数据 3.4.1、前端使用 前端在JavaScript中有封装的JSON对象,可以直接用来操作JSON数据。…

JavaSE之集合篇

文章目录前言一、集合概述集合继承结构图二、Collection接口中常用方法2.1Collection中存放什么元素?2.2常用方法2.3迭代器三、List接口中常用的方法四、ArrayList初始化容量及扩容五、Vector六、Map接口常用方法七、Properties前言 由于在刷题过程中,经…

大型三甲医院云HIS系统源码 强大的电子病历+完整文档

医院HIS系统源码云HIS系统:SaaS运维平台多医院入驻强大的电子病历完整文档 有源码,有演示 一、系统概述 采用主流成熟技术,软件结构简洁、代码规范易阅读,SaaS应用,全浏览器访问前后端分离,多服务协同&am…

使用AppSmith(PagePlug )低代码平台快速构建小程序应用实践

文章目录一、入门(一)介绍(二)功能特性(三)体验一下(四)参考教程二、使用Appsmith构建商城微信小程序(一)说明(二)应用配置&#xff0…

安卓逆向_5 --- jeb 和 AndroidStudio 动态调试 smali

Jeb 工具的使用 :https://www.52pojie.cn/forum.php?modviewthread&tid742250:https://zhuanlan.zhihu.com/p/302856081动态调试 smali 有两种方法: Jeb 调试AndroidStudio smalidea 插件动态调试。1、Jeb 动态调试 smali ​JEB是一个…

LeetCode 236.二叉树的最近公共祖先

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖…

Modbus协议初探(C#实现)

由于作者水平有限,如有写得不对得地方请指正 趁着今天休息,就折腾一下Modbus协议,之前零零散散的看过几篇博客,听说搞上位机开发的要会这个协议,虽然我不是搞上位机开发的,但个人对这个比较感兴趣。按照我个…

开发一个看番app[樱花动漫移动端app]

使用react-native开发,功能: 支持看番支持历史记录浏览支持追番 项目地址: https://github.com/HGGshiwo/Sakura 界面: 首页分类用户界面播放界面历史记录搜索界面全部动漫追番

OpenAI Whisper and ChatGPT 语音助手

OpenAI Whisper and ChatGPT ASR Gradio Web UI一 环境准备1.1 python1.2 windows二 导入所需要的包三 加载模型四 定义openai和whisper接口五 生成Gradio Web UI麦克风输入,展示三种结果输入ASR结果输出文本输出TTS结果 一 环境准备 1.1 python gradio3.19.1 gTT…

ubuntu 如何搭建git远程仓库

ubuntu 安装git sudo apt-get install git配置用户名和邮箱 git config --global user.name “xxx” git config --global user.email “邮箱地址”关于远程仓库 Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上。这就需要一台电脑充当…

打印名片-课后程序(Python程序开发案例教程-黑马程序员编著-第一章-课后作业)

实例2:打印名片 名片是标示姓名及其所属组织、公司单位和联系方法的纸片,也是新朋友互相认识、自我介绍的快速有效的方法。本实例要求编写程序,模拟输出效果如图1所示的名片。 图1 名片样式 实例目标 掌握print()函数的用法 实例分析 名片…