新手的第一个迷宫逆向

新手的第一个迷宫逆向

最近在学习逆向,从bugku上下了几个题目学习,地址:https://ctf.bugku.com/challenges -take the maze

参考WP:
https://www.cnblogs.com/reddest/p/10121550.html
https://www.52pojie.cn/forum.php?mod=viewthread&tid=674404&page=1&authorid=666114
https://www.cnblogs.com/sweetbaby/p/10920746.html

过程总结:

1、先放进exeinfo里看有没有壳
在这里插入图片描述
2、放到IDA里进行反编译

先是用了6.8版本的

打开exe后发现要求输入key之类的,于是搜索关键字’key’和’flag’,发现了两处关键代码
在这里插入图片描述可以看到是会生成一个文件,文件里会有flag的相关信息
在这里插入图片描述
这个是主函数

问题1:一开始主函数无法F5伪代码,提示是sp问题
在这里插入图片描述
解决:搜索问题后,使用Alt+k进行平衡堆栈,平衡了几次之后就可以F5了
在这里插入图片描述
参考:https://www.cnblogs.com/echo579/p/6236277.html

https://blog.csdn.net/wangtiankuo/article/details/81632375

https://blog.csdn.net/wjcsharp/article/details/11075993

问题2:分析的时候奇怪为什么别人的IDA比我的智能,能分析出更多函数,然后发现可能是符号表的问题,折腾了很久还是没有成功

解决:直接选择了7.0版本,发现加载文件的时候就自动导入一些符号表了,也不用平衡堆栈,可以开始分析函数
在这里插入图片描述
逐行理解,代码中有两个和V4紧密相关的函数:sub_45C748和sub_45E593

跟入进行操作的sub_45C748函数,非常复杂,得知是VM处理,无法分析,这里需要用OD进行动态调试判断

跟进sub_45E593函数
在这里插入图片描述
在这里插入图片描述
然后进入d的函数,sub_45CC4D
在这里插入图片描述
逐行理解,确定地图范围和起始和终点位置

然后学习了如何使用IDC脚本生成地图,显示的字符代表可以行走的方向

IDC脚本:

auto i;

for(i = 0;i <= 311; ++i){

  if(Dword(0x540548 + i * 4) ^ Dword(0x540068 + i * 4))

   Message(".");

  else

   Message("D");

  if(Dword(0x5404DC + i * 4) ^ Dword(0x53FFFC + i * 4))

   Message(".");

  else

   Message("L");

  if(Dword(0x5404E4 + i * 4) ^ Dword(0x540004 + i * 4))

   Message(".");

  else

   Message("R");

  if(Dword(0x540478 + i * 4) ^ Dword(0x53FF98 + i * 4))

   Message(".");

  else

   Message("U");

  Message(" ");

  if(!((i + 1) % 26))

   Message("\n\n");

}

return 0;

dump出迷宫地图
在这里插入图片描述
drdddrdrrrrrrdddrrrrddrrrrrrrrrdrrrr

接下来对路线进行操作,方向+步数,得到字符串:

d1r1d3r1d1r6d3r4d2r9d1r4

接下来转换,查看字符数组的内容
在这里插入图片描述
64h就是d

解得:06360836063b0839073e0639

但是这段字符串依旧不是正确答案,之前无法分析的那个函数还对这串字符串进行了操作

根据OD中动态调试得知是异或操作,脚本编写

a = list("06360836063b0839073e0639")

a[16] = chr(ord(a[16]) ^ 1)

for i in range(24):

print chr(ord(a[i])^i)

即可获得正确答案

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值