病毒分析教程第九话--使用IDA远程调试

恶意软件为了避免静态检测,通常会动态生成&调用敏感的字符串及系统API,这种情况就无法单纯使用IDA进行分析了,得进行调试动态地获得这些值。而IDA有个远程调试的功能,很实用,我们下面就来学习如何使用IDA进行远程调试。样本还是上一章的样本:F834F898969CD65DA702F4B4E3D83DD0

我们首先运行下样本,发现该样本会创建一个新的进程并运行,这个应该是我们上一章提到的病毒创建的exe文件。
病毒分析教程第九话--使用IDA远程调试

紧接着,主机就突然关机了???什么情况,这病毒难道会检测VM虚拟机,然后关机?
病毒分析教程第九话--使用IDA远程调试

google了下,关机的API是NtShutdownSystem,我们就看看到底是这3个文件里的哪个调用了该函数。
病毒分析教程第九话--使用IDA远程调试

通过字符串搜索,在dump2中发现了NtShutdowSystem字符串,接下来我们就对该样本进行调试,看它如何检测虚拟机的。
病毒分析教程第九话--使用IDA远程调试

首先找到IDA远程调试所需的win32_remote.exe文件。
病毒分析教程第九话--使用IDA远程调试

然后复制到虚拟机运行,它就会提示远程监听的地址为192.168.0.115:23946,这时你可以打个快照,方便以后快速调试。
病毒分析教程第九话--使用IDA远程调试

然后点击IDA的Debugger->Switch debugger,选中Remote Windows debugger。
病毒分析教程第九话--使用IDA远程调试

准备就绪后,在程序开始下断点,开始调试。IDA会弹出一个窗口提示你填写调试环境信息,填上IP后一路点yes,就可以。
病毒分析教程第九话--使用IDA远程调试

成功连接上远程调试环境,程序停在断点处。
病毒分析教程第九话--使用IDA远程调试

现在我们要在NtShutdownSystem处下断,看看是哪里调用了这个关机函数。在Modules窗口里点ntdll.dll,然后在Module:ntdll.dll搜索并点击NtShutdownSystem,这时左侧窗口就显示出了NtShutdownSystem的代码,在第一行代码下断,F9运行程序。
病毒分析教程第九话--使用IDA远程调试

程序断在了NtShutdownSystem,看Stack view窗口进行栈回溯,发现是sub_413DF9函数调用了它。
病毒分析教程第九话--使用IDA远程调试

来到sub_413DF9函数,发现病毒是动态调用的NtShutdownSystem,先GetProcAddress获取函数地址保存在eax,然后赋值给esi进行调用。前面还夹杂个sub_413D4D函数,我们下面看下它是干嘛的。
病毒分析教程第九话--使用IDA远程调试

在该函数下断点重新调试,就来到了该函数,通过调试,我们可以获得一些变量的动态值,比如下面off_45BCC4这个值,静态反汇编是看不到它的值的,只有动态调试,才得知该值为OpenProcessToken。
病毒分析教程第九话--使用IDA远程调试

我们把这些动态值都重命名,发现sub_413DF9函数就是用来提权用的,动态调试很方便吧。
病毒分析教程第九话--使用IDA远程调试

好,我们回过头来看看shutdown_system这个函数是被谁调用的。
病毒分析教程第九话--使用IDA远程调试

交叉引用往上回溯,得知shutdown_system只有一处被调用,而是否调用则取决于sub_40D4E2函数,看来这个函数就是用来检测虚拟机的了。
病毒分析教程第九话--使用IDA远程调试

果然,病毒用了vpcext 7, 0Bh和mov ‘VMXh’两种方法来检测虚拟机环境,若检测到,则将al置为1,执行关机的逻辑。
病毒分析教程第九话--使用IDA远程调试