最近突发奇想,想用本机的Windbg符号调试远程虚拟中的病毒程序于是就有了这篇文章。虽然结局是不能使用本机符号调试虚拟机的进程,但是学会了如何搭建隔离网络先作此笔记记录分享。首先点击虚拟网络编辑器。点击更改设置。点击添加网络。自己为自己的虚拟网络分配网段IP,我这里设置了192.168.139.0,子网掩码为255.255.255.0点击确定。将虚拟机的网络设置配置到自己刚划分的虚拟网段。为虚拟机设置一个虚拟局域网中的ip设置ipv4协议。为虚拟机设置一个子网IP。关闭虚拟机中的默认防火墙。为物理机分配一个虚拟网段中的子网ip分配完ip同样关闭防火墙。我这里分配为192.168.139.6。最后确认虚拟机和物理机ip是否分配成功。打开Wireshark监控一下网络流量。通过物理机对虚拟机发送ping包。观察返回ping包结果,发现是通过虚拟网络断ip和虚拟机之间进行通讯。接下来在虚拟机中启动Windbg服务器,选择要调试的3环程序。启动后可以看到标题改为开启的服务端口。 通过命令行启动远程调试命令。回车远程调试开启,可以开心的调试了,而且不用担心病毒会从内网传播。而且内核调试也支持远程调试,也就是说有网,有开启Windbg服务端就可以联网调试(具体参见微软官网定义)。最后再使用Wireshark验证下是否建立成功。虽然搭建完成了隔离环境,但是我们还面临一个问题。这种远程调试方法要求调试符号必须在被调试机器上(虚拟机)。相信用过虚拟机Windbg调试病毒的小伙伴都很清楚符号下载很麻烦,那么有没有什么办法可以让我们调试病毒的同时使用物理机器上的符号加载。这样一来既可以防止病毒对符号文件的破坏,还能方便代理下载。(想要在虚拟机中的windbg下载符号需要额外配置代理很浪费时间)其实微软早就考虑到了这种调试需求,提供了另外一种远程调试的技巧。既能调试远程机器上的R3进程,还可以使用本地机器上的物理符号一举两得。其实原理就是通过dbgsrv.exe工具将所有调试信息转发给物理机的windbg处理。首先我们需要找到吾爱破解工具包中的dbgsrv.exe。在命令行中输入dbgsrv -t tcp:port=2:7,password=1234。含义是:使用dbgsrv启动tcp网络监听,开启2到7中的任意一个端口(当windbg主动连接时会筛选查找到调试服务端口)设置连接的密码位1234启动监听服务后,查看服务端的ip地址然后将吾爱破解中的windbg拷贝一份到物理机上,因为微软规定必须要对应版本的windbg和dbgsrv才能适配,否则会报错。在命令行中输入以下指令:windbg.exe -premote tcp:server=192.168.171.131,port=2:7,password=1234按下回车会发现只是单纯启动了Windbg,并没有任何明显的提示。这时候不要慌,按下快捷键F6就可以看到所有可以附加的进程列表,其中有我们熟悉的dbgsrv.exe和吾爱破解工具包。证明我们确实已经开启了远程调试连接到了虚拟机。随便选择一个R3进程进行附加调试,我们可以看到标题栏已经显示远程调试的配置信息。以及符号路径已经变为了我们物理机的路径。如果我们想要远程创建某个进程进行调试,只需要输入以下命令选项即可。c选项为创建进程,s选项表示挂起。我这里以剪贴板工具为例。dbgsrv -t tcp:port=2:7,password=1234 -cs [要调试的进程完整路径]输入dbgsrv -t tcp:port=2:7,password=1234 -cs clipbrd.exe。当我们连接到远程调试服务器时发现进程被挂起,接下来只需要windbg附加并恢复挂起进程即可。此外Windbg还有很多高级的远程调试技巧,我这里放了微软教程链接,大家可以自行探索。https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/dbgsrv-command-line-options
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)