easy_Maze

  • 这道题还是挺好玩的.

  • 由题目我们能知道是关于迷宫的题. 下载下来是elf文件, 查壳后无壳, 在linux下运行看看大概流程.

  • 载入IDA, 先分析了接受我们输入的字符的函数. 知道在外面一层的主函数是先生成一个每行7个元素的数组. 然后通过我们输入的字符按控制在矩阵迷宫中走向, 最后按照规定的到达一个目的地.

  • 接下来就是找生成那个矩阵了. 通过上面的49个元素知道且下面函数的参数7, 知道规模 7*7.

  • 看了 Step_0 函数, 还是简单, 但是 step_1 中嵌套了2个函数且很复杂. 开始我就把生成矩阵的所有函数及数据都复制到VC 再根据栈的特点改下数据的顺序, 然后运行打印出矩阵. 问题是运行后什么也没有打印, 调试发现一个函数中的内存空间和另外一个冲突, 相互覆盖值. 这个函数太多, 改起来也麻烦.

  • 然后转向GDB调试, 但是不熟练. 又转向ida动态调试. 先下断点, 找到储存矩阵的空间的地址, 把这个地址转到数据窗口跟随. 运行到生成矩阵的下面一个函数. 得到生成的矩阵.

  • 把数据复制下来, 用C语言打印出来号观察, 注意每个数据4个字节(小端).

    #include <stdio.h>int main(void)
    {union{unsigned char ida_chars[196];int a[49];}A = {1,   0,   0,   0,   0,   0,   0,   0,   0,   0, 0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 0,   0,   0,   0,   0,   0,   1,   0,   0,   0, 1,   0,   0,   0,   0,   0,   0,   0,   0,   0, 0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 1,   0,   0,   0,   1,   0,   0,   0,   0,   0, 0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 1,   0,   0,   0,   0,   0,   0,   0,   0,   0, 0,   0,   0,   0,   0,   0,   1,   0,   0,   0, 1,   0,   0,   0,   0,   0,   0,   0,   0,   0, 0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 1,   0,   0,   0,   1,   0,   0,   0,   0,   0, 0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 1,   0,   0,   0,   0,   0,   0,   0,   0,   0, 0,   0,   0,   0,   0,   0,   1,   0,   0,   0, 1,   0,   0,   0,   1,   0,   0,   0,   1,   0, 0,   0,   1,   0,   0,   0,   1,   0,   0,   0, 1,   0,   0,   0,   1,   0,   0,   0,   0,   0, 0,   0};int i = 0, j = 0;int (*p)[7] = (int (*)[7])A.a; for(i = 0; i < 7; i++){for(j = 0; j < 7; j++){printf("%d ", p[i][j]);} putchar(10);}return 0;}

  • 根据我们打游戏的熟悉 aswd ,朝着1走到最后. ssddwdwdddsssaasasaaassddddwdds 最后在linux下输入.

  • 总结: 更加熟悉了linux动态调试的运用, 加深了数组指针的理解.

攻防世界 easy_Maze相关推荐

  1. 攻防世界easy_Maze

    ida进入main函数 int __cdecl main(int argc, const char **argv, const char **envp) {__int64 v3; // raxint ...

  2. 【攻防世界001】Guess-the-Number

    攻防世界之前刷了几十题了,没写wp,感觉很简单没啥意思.后来参加了几次比赛,发现有点干不动,决定还是老老实实刷题好了.这是第一篇wp,这题很简单,是个jar,用jd-gui可以得到java源码. 原来 ...

  3. 攻防世界(pwn)--Mary_Morton 利用格式化字符串+栈溢出破解Canary的保护机制

    ctf(pwn) canary保护机制讲解 与 破解方法介绍 程序执行流程 有三个选项,1是利用栈溢出,2是利用格式化字符串,3是退出;可连续输入多次; IDA分析 解题思路 程序存在canary保护 ...

  4. 攻防世界(Pwn) forgot---栈溢出;(方法二)

    攻防世界(Pwn) forgot-栈溢出:(方法一) 里面对问题描述的更详细一点 返回目标函数 0x80486CC 方法二(爆破流) 因为最终返回的是 v3[0]-v3[9] 之中的一个函数, v3[ ...

  5. 攻防世界(Pwn) forgot---栈溢出;(方法一)

    攻防世界(Pwn) forgot-栈溢出:(方法二) 介绍 这道题表面看起来有点复杂,其实很简单,有两种方法可以来做这一道题; 方法一(精确打击) 文件运行流程是: 1.先输入名字 2. 输入一串字符 ...

  6. 攻防世界misc新手_[攻防世界]mobile新手练习区easy-apk

    [攻防世界]mobile新手练习区easy-apk easy-apk最佳Writeup由129师386旅独立团 • devi1提供 难度系数: 7.0 题目来源: 暂无 题目描述:无 题目场景: 暂无 ...

  7. 攻防世界 ——crypto

    目录 新手区部分题解: 1,easy_RSA 2,Normal_RSA 3, 幂数加密 4,easy_ECC 高手进阶区部分题题解 5, ENC 6,告诉你个秘密 7,Easy-one 8,说我作弊需 ...

  8. 攻防世界———MISC 高手区题解

    目录 1,base64stego 2,easycap 3,Avatar 4,What-is-this 5,签到题 6,Training-Stegano-1 7,Excaliflag 8,Get-the ...

  9. 攻防世界 web(二)

    这周接着刷攻防世界的web题( ̄︶ ̄)↗ 1.command_execution 看提示这题为命令执行漏洞(command_execution),关于命令执行漏洞,我前面有篇博客详细介绍了,大家不了解 ...

最新文章

  1. spark比java快吗_为什么我的Spark DataFrame比RDD慢得多?
  2. Visual C#3.0新特性概览
  3. Go基础编程:格式化输出、类型转换、类型别名
  4. SQL SERVER 2008中用C#定义压缩与解压缩函数
  5. 全新拟态个人主页/引导页源码
  6. linux下python 2.4升级到 python 2.5
  7. composition 组合
  8. JMETER SLAVE和MASTER 分布式启动压测
  9. Python3基本数据类型(一、数字类型)
  10. 翱翔云天的SAP技术课程体系
  11. win7安装micropython串口驱动失败
  12. 移动apn接入点哪个快_千兆交换机和快速以太网交换机哪个更好呢?
  13. 项目配置文件----.eslintignore,eslint在做风格检查的时候忽略 dist 和 vender(第三方库) 不去检查。
  14. 手机NFC是什么?怎么使用?
  15. matlab中cuk电路搭建,cuk电路matlab仿真
  16. 35岁的程序员:第16章,双重担忧
  17. LoadRunner12 进行协议顾问分析时浏览器选择问题
  18. 汽车天线系统结构、原理及应用指南
  19. PL/SQL Developer 14 配置
  20. Unity开发元宇宙多人交互XR应用

热门文章

  1. Linux安装配置ELK日志及与SpringBoot的整合使用
  2. python单元测试框架之unittest和pytest的区别
  3. 玩转华为ENSP模拟器系列 | 两个网关之间存在NAT设备时通过IKE方式协商IPSec VdPdNd隧道(总部不指定分支IP地址)
  4. artdialog ajax,artDialog v6 iframe 跨域请求
  5. 转 A10/A20 Bootloader加载过程分析
  6. 部分智能推荐算法总结
  7. 世界最流行的php框架排名_推荐20个最近很流行的优秀PHP框架
  8. 在win10系统wps中英文输入忽然单词字母间间距很大如何调整?
  9. 通用串行总线-USB简介
  10. 中国当代青年的十大错觉