攻防世界 easy_Maze

前言:做题笔记。

下载解压 查壳。

64ida打开。

查找字符串

进入main()

一长串数据。

常规,从后往前逆向。

Step_2内容如下:

可以判断是一个maze问题(当然题目也有说明。)

此类题目:

①        找到地图

②        找到限制字符(也就是方向键)

③        分析路径

④        得到路径

简单的maze可以手动找出优解,复杂的需要使用回溯法(dfs或者bfs)

找地图:

 v6[52] = 1;
  v6[53] = 1;
  v6[54] = -1;
  v6[55] = 1;
  v6[56] = -1;
  v6[57] = 1;
  v6[58] = -1;
  v6[59] = 0;
  v6[60] = 0;
  v6[61] = 0;
  v6[62] = 0;
  v6[63] = 1;
  v6[64] = -1;
  v6[65] = 0;
  v6[66] = 0;
  v6[67] = 1;
  v6[68] = 0;
  v6[69] = 0;
  v6[70] = 1;
  v6[71] = 0;
  v6[72] = -1;
  v6[73] = -1;
  v6[74] = 0;
  v6[75] = 1;
  v6[76] = 0;
  v6[77] = 1;
  v6[78] = -1;
  v6[79] = 0;
  v6[80] = -1;
  memset(&v6[81], 0, 20);
  v6[86] = 1;
  v6[87] = -1;
  v6[88] = -1;
  v6[89] = 1;
  v6[90] = -1;
  v6[91] = 0;
  v6[92] = -1;
  v6[93] = 2;
  v6[94] = 1;
  v6[95] = -1;
  v6[96] = 0;
  v6[97] = 0;
  v6[98] = -1;
  v6[99] = 1;
  v6[100] = 0;
  memset(v6, 0, 196);
  memset(v5, 0, sizeof(v5));
  Step_0((int (*)[7])&v6[52], 7, (int (*)[7])v6);
  Step_1((int (*)[7])v6, 7, (int (*)[7])v5);

根据原文,这一大串应该就是生成地图的变量与函数。

判断原因:

这些操作,都在提示用户输入之前,说明是一个初始化,或者生成地图的操作。

那么动态调试就可以了。

注意:这是一个Linux的可执行文件。

寻址地图操作:

题外话:

ida在Windows 而分析的却是Linux可执行文件,如何进行动态调试?

复制到Linux中。并把它们的权限提升。

先Linux ./ XXX运行之后再点击“确定” (不然会有connect报错)

正题:

这个时候我们需要去找它存储的值。

这题能直接看局部变量,看内存好复杂。。

提取出来就可以了。

UNCTF{ssddwdwdddssaasasaaassddddwdds}

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值