ADworld reverse wp - easy_Maze

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

题目说是maze, 看到step_2的判断, 四个方向100, 115, 119, 97, 分别对应字母dswa, v10是竖直位置, v9是水平位置, 最后congratulations的判断条件是v10 == 6 && v9 == 6, 所以预测是在maze中走到[6,6]的位置就算成功. v10, v9, v8开始均为0, 所以是从[0,0]开始走, 并且每一步都要走在(*a1)[7 * v10 + v9] == 1上. 可以判断这是一个7 * 7的maze, 只有1是可行的位置, 而且必须在30步以内走到目标位置[6,6].

尝试静态分析step_0和step_1, 发现step_1的处理过程有嵌套调用getA和getAStart函数, 流程比较复杂, 静态分析会很困难, 但我们不需要知道具体是如何处理maze数组的, 只需要拿到处理后的maze即可, 所以可以动态调试, 断点到maze数组处理完成的位置, 然后dump出来maze数组数据, 就可以找到在maze中的移动序列.

用IDA远程调试, Remote Linux Debugger, 在Ubuntu虚拟机上运行程序, 调试界面在IDA

在这里插入图片描述
在这里插入图片描述

IDA目录下的dbgsrv文件夹, 把linux_server[64]复制到Ubuntu

sudo chmod +x linux_server64
sudo chmod +x linux_server
sudo chmod +x easy_Maze 
./linux_server64

在这里插入图片描述

在这里插入图片描述

断点到step_2, 这时maze已经处理完成, 在内存中dump出来就是需要的迷宫数组.

在这里插入图片描述
设置synchronize with Hex View - I, 这样可以同步查看stack栈内存的数据和内存16进制窗口的数据, 另外设置Hex View的查看data format为4bytes, 这样是看一个整数类型(4字节)的形式. 注意这里要复制Hex View窗口的数据, stack窗口的数据是byte形式显示的.

maze = [1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1]
for i in range(0, 7):
    for j in range(7):
        print(maze[i * 7 + j], ' ', end='')
    print()

在这里插入图片描述

序列串是ssddwdwdddssaasasaaassddddwdds

在这里插入图片描述

总结

IDA远程调试get!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值