攻防世界 easy_Maze

easy_Maze

  • 这道题还是挺好玩的.

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

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

  • 接下来就是找生成那个矩阵了. 通过上面的49个元素知道且下面函数的参数7, 知道规模 7*7.攻防世界 easy_Maze_第2张图片

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

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

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

    #include 
    
    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;
    	 
    }
     
    

攻防世界 easy_Maze_第4张图片

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

攻防世界 easy_Maze_第5张图片

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

你可能感兴趣的:(攻防世界 easy_Maze)