BUUCTF逆向wp [HDCTF2019]Maze

第一步  查壳,本题是32位,有壳,进行脱壳。

第二步    这里的 jnz 指令会实现一个跳转,并且下面的0EC85D78Bh被标红了,应该是一个不存在的地址,这些东西就会导致IDA无法正常反汇编出原始代码,也称为花指令。(如下图)

我们把先把jnz指令右键nop,之后再将call指令变成数据再进行下一步nop。

点击call指令,按D数据化后尝试先把第一个数据nop掉,之后尝试建立主函数,如果不行的话再将下一个数据也nop掉。

nop完后从这里开始到00401128,按p构建main函数。

构建后是这个样子,我们跟进main

这里有关本题解决花指令的方法详情前参考这篇文章:

[HDCTF2019]Maze(考点:去花)_[hdctf2019]maze 题解-CSDN博客

第三步   按tab键转换(红色的不用管,可能是我脏字节没弄干净,不影响)。

分析一下这段代码:

其中终点为(5,-4),因此后面显示congratulations的字样。

函数调用和输入读取

  1. sub_401140(aGoThroughTheMa);
    • 调用函数 sub_401140 并传入参数 aGoThroughTheMa,这可能是一个提示或指示信息。
  2. v5 = scanf("%14s", v7);
    • 使用 scanf 从标准输入读取最多14个字符的字符串到变量 v7 中,并将读取的字符数赋值给 v5。

循环处理用户输入

  1. for (i = 0; i <= 13; ++i)
    • 遍历用户输入的每个字符(最多14个),进行相应的处理。
  2. switch (v7[i])  根据当前字符 v7[i] 的值,执行不同的操作:
    • default: continue;
      • 对于其他字符,继续下一次循环。
    • case 'w': ++dword_40807C;
      • 如果字符是 'w',则增加变量 dword_40807C 的值。
    • case 's': --dword_40807C;
      • 如果字符是 's',则减少变量 dword_40807C 的值。
    • case 'd': ++*(_DWORD *)asc_408078;
      • 如果字符是 'd',则增加 asc_408078 指向的 DWORD 类型的值。
    • case 'a': --*(_DWORD *)asc_408078;
      • 如果字符是 'a',则减少 asc_408078 指向的 DWORD 类型的值。

结果判断

  1. if (*(_DWORD *)asc_408078 == 5 && dword_40807C == -4)
    • 检查 asc_408078 指向的值是否为5,并且 dword_40807C 的值是否为-4。这两个条件可能代表了玩家需要达到的目标状态。
  2. 成功与否的处理
    • 成功 (true 分支)
      • sub_401140(aCongratulation);
        • 调用 sub_401140 并传入 aCongratulation,可能用于显示恭喜信息。
      • sub_401140(aHereIsTheFlagF);
        • 调用 sub_401140 并传入 aHereIsTheFlagF,可能用于显示成功获得的奖励或标志。
    • 失败 (else 分支)
      • sub_401140(aTryAgain);
        • 调用 sub_401140 并传入 aTryAgain,提示用户再次尝试。

返回值

  1. return 0;
    • 函数返回0,通常表示程序执行成功。

我们在代码中发现“a”“s”“d”“w”四个操作对应我们键盘上的四个按键,这是迷宫问题的典型特征。

跟进一下asc_408078(或dword_40807C),得到如下信息:

a和d控制左右,w和s控制上下,因此asc对应横着的第几列,dword对应竖着的第几行

上图告诉我们,起点为(7,0)。

我们推测:+对应的是起点,F对应的是终点(之前的迷宫题目也是差不多的)

第四步   编写脚本

分析一下脚本:

  1. 变量定义和查找
    • maze 是一个包含迷宫字符的字符串。
    • sid 和 eid 分别是字符 '+' 和 'F' 在 maze 中的索引位置。
  2. 计算行和列
    • ex, ey 被定义为 -4 和 5。这些值在代码中的具体含义不明确,但看起来像是尝试定义某种“步长”或“方向”。
    • c = (eid - ey) // (-ex) 计算列数。这里的计算方式比较特殊,看起来是尝试根据某种规则来确定列宽。
    • r = len(maze) // c 计算行数,即迷宫的总长度除以每行的字符数。
  3. 输出迷宫
    • 循环从 0 到 r,每次循环打印从 c*i 到 c*(i+1) 的子字符串,这应该是尝试将一维字符串按照每行 c 个字符分割成多行。

r = 7 (即7行)

c = 10(即10列)

为了方便读者理解F的位置ex,ey =(5,-4)我在下面的图上标出了坐标轴,类似于把该迷宫放在第四象限。

flag{ssaaasaassdddw}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】将IDEA项目部署到云服务器上,让其成为后台进程(保姆级教学,满满的干货~~)

目录 部署项目到云服务器什么是部署一、 创建MySQL数据库二、 修改idea配置项三、 数据打包四、 部署云服务器五、开放端口号六 、 验证程序 部署项目到云服务器 什么是部署 ⼯作中涉及到的"环境" 开发环境:开发⼈员写代码⽤的机器.测试环境:测试⼈员测试程序使⽤…

离线语音识别芯片在智能生活中的应用

离线语音识别芯片&#xff0c;这一技术正逐渐渗透到我们日常生活的每一个角落&#xff0c;为众多产品带来前所未有的智能体验。它能够应用到多种产品中&#xff0c;‌包括但不限于&#xff1a;‌ 1、智能音箱&#xff1a;‌语音识别芯片作为智能音箱的核心&#xff0c;‌使用户…

自动驾驶车道线检测系列—3D-LaneNet: End-to-End 3D Multiple Lane Detection

文章目录 1. 摘要概述2. 背景介绍3. 方法3.1 俯视图投影3.2 网络结构3.2.1 投影变换层3.2.2 投影变换层3.2.3 道路投影预测分支 3.3 车道预测头3.4 训练和真实值关联 4. 实验4.1 合成 3D 车道数据集4.2 真实世界 3D 车道数据集4.3 评估结果4.4 评估图像仅车道检测 5. 总结和讨论…

Centos7 安装私有 Gitlab

在 CentOS 7上&#xff0c;下面的命令也会在系统防火墙中打开 HTTP、HTTPS 和 SSH 访问。这是一个可选步骤&#xff0c;如果您打算仅从本地网络访问极狐GitLab&#xff0c;则可以跳过它。 sudo yum install -y curl policycoreutils-python openssh-server perl sudo systemct…

算法 —— 快速幂

目录 P1045 [NOIP2003 普及组] 麦森数 P1226 【模板】快速幂 原理I 原理II P1226 代码解析 P1045 代码解析 P1045 [NOIP2003 普及组] 麦森数 本题来自洛谷&#xff1a;P1045 [NOIP2003 普及组] 麦森数&#xff0c;根据题意&#xff0c;我们可以看到本题需要计算最少2的1…

Docker的数据管理和网络通信

目录 一、Docker 的数据管理 1&#xff0e;数据卷 2&#xff0e;数据卷容器 二、端口映射 三、容器互联&#xff08;使用centos镜像&#xff09; 四、*Docker 镜像的创建 1&#xff0e;基于现有镜像创建 2&#xff0e;基于本地模板创建 3&#xff0e;基于Dockerfile 创…

SwiftUI中App启动入口分析,以及视图和App生命周期介绍

App入口分析 新创建的swiftui项目中我们应该先要了解一下app的入口函数在哪里,并了解大概的含义。 @main:标记应用程序的入口。 App 协议:SwiftUI 应用程序的入口点。 Scene:表示应用程序的一个视图层级,通常是 WindowGroup,表示主窗口的内容。 Scene讲解 Scene 表示…

线性表的链式存储结构————双链表(java)

线性表的链式存储结构————双链表&#xff08;java&#xff09; 文章目录 线性表的链式存储结构————双链表&#xff08;java&#xff09;双链表双链表的创建插入数据元素头插法尾插法 求链表的长度输出双链表删除双链表中的指定元素总代码运行效果用Java内部类实现双链表…

[HCTF 2018]WarmUp1

进入靶场&#xff0c;检查代码看到有source.php,访问 /source.php 读代码&#xff0c;在参数中传入 file&#xff0c;通过checkFile后&#xff0c;会加载file界面。 再看checkFile&#xff0c; 第一个判断&#xff0c;是非空并且是个字符串&#xff0c;否则返回false 第二个判…

小程序里面使用vant ui中的vant-field组件,如何使得输入框自动获取焦点

//.wxml <van-fieldmodel:value"{{ userName }}"placeholder"请输入学号"focus"{{focusUserName}}"/>// .js this.setData({focusUserName: true});vant-field

华为OD算法题汇总

60、计算网络信号 题目 网络信号经过传递会逐层衰减&#xff0c;且遇到阻隔物无法直接穿透&#xff0c;在此情况下需要计算某个位置的网络信号值。注意:网络信号可以绕过阻隔物 array[m][n]&#xff0c;二维数组代表网格地图 array[i][j]0&#xff0c;代表i行j列是空旷位置 a…

快捷:通过胶水语言实现工作中测试流程并行、加速

通过胶水语言实现工作中测试流程并行、加速 通过胶水语言实现工作中测试流程并行、加速工作场景&#xff08;背景&#xff09;问题抽象&#xff08;挑战&#xff09;如何做&#xff08;行动&#xff09;获得了什么&#xff08;结果&#xff09;后记相关资源 通过胶水语言实现工…

唐刘:当 SaaS 爱上 TiDB(一)- 行业挑战与 TiDB 的应对之道

导读 在 TiDB 8.1 发布后&#xff0c;TiDB 展现了强大的支持 SaaS 业务的能力&#xff0c;成为 SaaS 业务数据库的优先选择之一。 本文为“当 SaaS 爱上 TiDB”系列文章的第一篇&#xff0c;系列文章将从技术原理和真实用户体验两个角度深入探讨 TiDB 在 SaaS 业务中的表现&a…

qt 创建一个左侧边线拖拽的矩形

1.概要 2.代码 在Qt中&#xff0c;如果你想要创建一个矩形&#xff0c;并且仅允许通过拖拽其左侧边线来改变宽度&#xff0c;你可以通过重写QGraphicsRectItem类来实现。以下是一个简单的例子&#xff0c;展示了如何创建一个自定义的ResizableRectItem类&#xff0c;该类允许…

责任链模式+CompletableFuture异步处理

1、查询商品基础信息 2、查询商品价格 3、查询商品活动 4、查询商品库存 假设这几个服务逻辑比较独立&#xff0c;其实是可以并行调用&#xff0c;我们可以结合责任链模式和CompletableFuture进行优化: 下面是代码示例: Service public class ChainFactory {// 原型模式获取对…

GloVe: Global Vectors for Word Representation论文笔记解读

基本信息 作者Jeffrey Penningtondoi10.3115/v1/D14-1162发表时间2014期刊EMNLP网址https://aclanthology.org/D14-1162.pdf 研究背景 1. What’s known 既往研究已证实 全局矩阵分解方法&#xff1a;LSA&#xff0c;考虑整个语料库词频的统计信息得到共现矩阵&#xff0c;通…

Spring Security学习笔记(一)Spring Security架构原理

前言&#xff1a;本系列博客基于Spring Boot 2.6.x依赖的Spring Security5.6.x版本 Spring Security中文文档&#xff1a;https://springdoc.cn/spring-security/index.html 一、什么是Spring Security Spring Security是一个安全控制相关的java框架&#xff0c;它提供了一套全…

昇思25天学习打卡营第1天 | 基本介绍

打卡&#xff1a; 小白一个&#xff0c;第一次接触昇思MindSpore&#xff0c;之前使用chatgpt较多一点。这次相当于从使用着角色转换成制作者的角色&#xff0c;跨度比较大。如果之前没有接触过相关内容&#xff0c;学习起来还是比较费劲。 基本介绍&#xff1a; 昇思MindSpo…

ValueError和KeyError: ‘bluegrass’的问题解决

项目场景&#xff1a; 项目相关背景&#xff1a; 问题描述 遇到的问题1&#xff1a; KeyError: ‘bluegrass’ 不能识别某标签 遇到的问题2&#xff1a; xml etree.fromstring(xml_str) ValueError: Unicode strings with encoding declaration are not supported. Please …

K8S 中的 CRI、OCI、CRI shim、containerd

K8S 如何创建容器&#xff1f; 下面这张图&#xff0c;就是经典的 K8S 创建容器的步骤&#xff0c;可以说是冗长复杂&#xff0c;至于为什么设计成这样的架构&#xff0c;继续往下读。 前半部分 CRI&#xff08;Container Runtime Interface&#xff0c;容器运行时接口&#xf…