攻防世界 高手区 serial-150 WP \ IDA远程动态调试适合新手

1.脱壳分析

发现是一个64位ELF文件,拖进IDA64静态分析,找不到入口函数,判断是代码混淆,但我比较菜,还不知道把结构改好,所以我只能采取IDA远程动态调试。

2.IDA远程动态调试——连接

这里我踩到坑了,我IDA无法连接到Linux虚拟机,我查了很多资料,最开始以为是防火墙没关,我用的kali,采用指令ufw disable关闭了防火墙,但是依然连接不上。
然后我看到一个资料,说IDA要远程动态调试,有一个非常重要的前提条件,即主机可以和虚拟机互ping通,我ping了一下,果然ping不通,虚拟机可以ping主机,但是主机ping不了虚拟机。看了很多博客也没有解决,几经波折,终于找到原因,操作如下(我使用的VMware):
在这里插入图片描述

补充一下远程连接前面的步骤:

第一步

在这里插入图片描述

第二步

虚拟机中运行Linux_server64(指令:Linux_server64),若出现下图则运行成功:
在这里插入图片描述

第三步

在这里插入图片描述
1、文件名
2、文件地址
3、不填
4、虚拟机IP地址(在Linux终端使用ifconfig查看IP)
5、虚拟机密码,可以不填

3.IDA远程动态调试——调试

(1)开始调试:
在这里插入图片描述
(2)在这里插入图片描述
先点1按钮,程序运行停止时,点击2按钮,然后在虚拟机终端中输入任意字符串,然后回车,在IDA中按F8(但步步过),直到地址变为4开头
在这里插入图片描述
在这里插入图片描述
可以发现这个出现cmp指令,这是一个关键地方,我们通过汇编指令可以知道flag的长度为10h即16,在此处设下断点
(3)F8继续向下调试
在这里插入图片描述
通过这个cmp指令可以判断flag第一个字符是E;
继续调试
在这里插入图片描述
划重点!!!!! 这张图包含信息很多,ptr[rbp-200h]是输入的第一个字符,ptr[rbp-1F1h]是输入的最后一个字符(为什么?因为200h-1F1h=15D),通过add指令可以知道,这里把第一个字符和最后一个字符相加了,然后和9Bh作比较,因为首字符是E,那么据此,做减法,可以得到最后一个字符应该是V。
(4)重复(2)和(3)的步骤可以得到完整的flag
EZ9dmq4c8g9G7bAV

猜你喜欢

转载自blog.csdn.net/steve95/article/details/109228878
今日推荐