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.mzph.cn/web/46090.shtml

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

相关文章

中文科技核心论文发表

中文科技核心论文题目如下&#xff1a; 1.混凝土结构用纤维增强塑料筋的耐久性评述&#xff1a;适合建筑、结构、材料等专业 2.建筑工程用阻燃塑料的研究进展&#xff1a;适合建筑、材料专业 3.纤维增强热塑性塑料在面部护具中的应用研究&#xff1a;适合化工、医学、材料等专…

springcloud2021.x使用nacos做配置中心

spirngcloud2021.0.5使用nacos做配置中心遇到的问题 环境 jdk1.8&#xff0c;spring-boot 2.6.13&#xff0c;spring-cloud-alibaba 2021.0.5.0 &#xff0c;spring-cloud 2021.0.5 方案一 application.properties # Nacos帮助文档: https://nacos.io/zh-cn/docs/concepts…

C++中的condition_variable:条件变量

理解 C 中的条件变量&#xff08;Condition Variable&#xff09; 在多线程编程中&#xff0c;我们常常需要一个线程等待某个条件的变化&#xff0c;比如等待数据的生成或某个标志位的设置。如果没有条件变量&#xff08;condition_variable&#xff09;&#xff0c;线程可能会…

启智畅想火车类集装箱号码识别技术,软硬件解决方案

集装箱号码识别需求&#xff1a; 实时检测车皮号、火车底盘号码、集装箱号码&#xff0c;根据火车类型分为以下三种情况&#xff1a; 1、纯车皮&#xff0c;只检测车皮号&#xff1b; 2、火车拉货箱&#xff08;半车皮&#xff09;&#xff0c;检测车皮号集装箱号码&#xff1b…

如何从0搭建一个Ai智体day01

&#x1f4da;《AI破局行动&#xff5c;AI智能体&#xff08;coze&#xff09;实战手册》&#xff1a; https://d16rg8unadx.feishu.cn/wiki/XQESwHW5HiPFlrkZbkqc0Xp7nEb 说明 这个是授权访问的&#xff0c;想学习加我 微信/ Github:** watchpoints &#x1f4fa;Day1-大圣直播…

玩转HarmonyOS NEXT之常用布局三

轮播&#xff08;Swiper&#xff09; Swiper组件提供滑动轮播显示的能力。Swiper本身是一个容器组件&#xff0c;当设置了多个子组件后&#xff0c;可以对这些子组件进行轮播显示。通常&#xff0c;在一些应用首页显示推荐的内容时&#xff0c;需要用到轮播显示的能力。 针对…

git开发流程

分支介绍 master - 主分支 所有提供给用户使用的正式版本&#xff0c;都在这个主分支上发布 开发者在此分支 不可进行 push 操作 dev - 开发分支 日常开发所使用的分支&#xff0c;开发者完成的阶段性功能模块将首先被合并到此分支 此分支亦是团队内部测试、阶段性工作验证…

Xcode 16 beta3 真机调试找不到 Apple Watch 的尝试解决

很多小伙伴们想用 Xcode 在 Apple Watch 真机上调试运行 App 时却发现&#xff1a;在 Xcode 设备管理器中压根找不到对应的 Apple Watch 设备。 大家是否已将 Apple Watch 和 Mac 都重启一万多遍了&#xff0c;还是束手无策。 Apple Watch not showing in XCodeApple Watch wo…

C++基础语法:STL之容器(1)--容器概述和序列概述

前言 "打牢基础,万事不愁" .C的基础语法的学习 引入 STL是标准模板库,类模板主要是用来做容器的,所以个人理解:标准模板库是"标准容器库".容器是STL的核心 .以<C Prime Plus> 6th Edition(以下称"本书")内容理解容器. 类模板内容回顾 类…

NineData全面支持PostgreSQL可视化表结构设计

“PostgreSQL 是最像 Oracle 的开源关系型数据库“&#xff0c;也正因为如此&#xff0c;很多企业都青睐 PostgreSQL&#xff0c;拿它当成 Oracle 的替代品。所以毫无疑问&#xff0c;目前 PostgreSQL 在企业中非常常见。 对于直接接触 PostgreSQL 的开发人员而言&#xff0c;…

echarts多柱堆叠的X轴顺序

在一些图表场景中&#xff0c;需要显示多柱堆叠的数据&#xff0c;那么X轴上每一段单位区域内会有多根柱子&#xff0c;每一根柱子标识不同的数量项含义&#xff0c;那么怎样控制这几根柱的左右顺序呢&#xff1f; 其实这跟echarts的option里的series由关&#xff0c;开始我以为…

快速排序及归并排序的实现与排序的稳定性

目录 快速排序 一. 快速排序递归的实现方法 1. 左右指针法 步骤思路 为什么要让end先走&#xff1f; 2. 挖坑法 步骤思路 3. 前后指针法 步骤思路 二. 快速排序的时间和空间复杂度 1. 时间复杂度 2. 空间复杂度 三. 快速排序的优化方法 1. 三数取中优化 2. 小区…

实验丰富、原创改进!|多策略改进蜣螂优化算法(MATLAB)

本文内容来源于本人公众号&#xff1a;KAU的云实验台&#xff0c;更新内容&#xff1a;智能优化算法及其改进应用。 本文核心内容&#xff1a; 新颖的多策略改进蜣螂优化算法 对比算法包括&#xff1a;高引用/新发布/经典/其他DBO变体&#xff08;共11种&#xff09; 实验设计…

用c语言写一个贪吃蛇游戏

贪吃蛇游戏通常涉及到终端图形编程和简单的游戏逻辑。以下是一个基本的实现示例&#xff0c;包括贪吃蛇的移动、食物生成、碰撞检测等功能。 1. 贪吃蛇游戏的基本结构 贪吃蛇游戏可以分为以下几个部分&#xff1a; 游戏地图和终端绘制&#xff1a;使用二维数组表示游戏地图&am…

SpringBoot结合ip2region实现博客评论显示IP属地

你好呀&#xff0c;我是小邹。 在现代的Web应用中&#xff0c;特别是博客和论坛类网站&#xff0c;为用户提供地理定位服务&#xff08;如显示用户所在地理位置&#xff09;可以极大地增强用户体验。本文将详细探讨如何使用Java和相关技术栈来实现在博客评论中显示用户的地址信…

Java实验3

实验内容 学生信息管理系统 学生成绩表Student(Sno 字符串&#xff0c;长度9, Sname 字符串&#xff0c;长度10, Class 字符串&#xff0c;长度10, Age 整型, Sex 字符串&#xff0c;长度2) 实现如下功能&#xff1a; A&#xff0e;输入若干个学生的信息到Student表&#x…

初学Python必须知道的14个强大单行代码

引言&#xff1a;Python的魅力与单行代码的重要性 Python以其简洁明了的语法、丰富的内置函数和强大的第三方库深受广大开发者喜爱。尤其对于编程小白来说&#xff0c;学习Python就像打开了一扇通向编程世界的大门。而单行代码&#xff0c;作为Python魅力的一部分&#xff0c;…

【NetTopologySuite类库】合并所有几何的包围盒AABB

流程示意图 示例代码 using GeoAPI.Geometries; using Microsoft.VisualStudio.TestTools.UnitTesting; using NetTopologySuite.Geometries; using NetTopologySuite.IO; using System.Collections.Generic; using System.Linq;namespace Test472 {[TestClass]public class T…

深度解析:电商订单API及其技术实现

随着电子商务的发展&#xff0c;实体企业开拓电商渠道的越来越多&#xff0c;原有的管理系统都需要增加电商业务管理功能&#xff0c;其中&#xff0c;对电商订单的管理是每一个电商商家都需要的功能&#xff0c;所以对于开发者来说&#xff0c;了解电商API是什么是非常重要的&…

第100+16步 ChatGPT学习:R实现Xgboost分类

基于R 4.2.2版本演示 一、写在前面 有不少大佬问做机器学习分类能不能用R语言&#xff0c;不想学Python咯。 答曰&#xff1a;可&#xff01;用GPT或者Kimi转一下就得了呗。 加上最近也没啥内容写了&#xff0c;就帮各位搬运一下吧。 二、R代码实现Xgboost分类 &#xff08…