攻防世界 easy_Maze

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动态调试的运用, 加深了数组指针的理解.
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值