为了我自己的学习乐趣,我一直在反转Uroborus木马的样本。一旦加载了实现rootkit的Windows内核驱动程序,我就会很难过。我已经设置了用于内核调试的环境(使用IDA的windbg插件),并为新驱动程序设置了一个断点(名为Fdisk.sys,所以我一直在键入“ bu fdisk.sys!DriverEntry”)。但是,加载驱动程序后,IDA不会中断。我可以说它已经运行,因为它开始隐藏注册表项(Ultra3),并转储内存并使用Volatility查看已卸载的模块,我可以看到fdisk.sys已被卸载。我还可以确认它已安装到许多内核API中。如何在驱动程序运行之前让IDA / windbg在驱动程序上断开?

#1 楼

由于某些原因,我尚未确定,通过名称(fdisk.sys)在此模块上设置断点的所有努力都失败了。该驱动程序在启动时未加载(至少在我现在正在调查的时候还没有加载)。它由模块加载,然后不久又再次卸载。

我最终使用调试器(在我的VM内)逐步执行启动驱动程序的模块,在文件写入磁盘后停止执行,并使用十六进制编辑器将第一条指令更改为INT 3.可行;当驱动程序加载异常时,内核调试器将捕获该异常,并且我可以开始进行检查。 phew

现在我要弄清楚为什么我不能按名称打断它...

#2 楼

可能已经晚了,但是:
如果您使用WinDBG(kd)调试内核,请使用

sxe -c ".echo fdisk loaded;" ld:fdisk.sys


这在用户和内核模式下可用,并导致在模块加载之后和入口点之前插入调试器。

评论


请注意,sxe ld将仅在第一次加载时起作用,而同一模块的子序列负载将不起作用,请在此处查看pavel和raj之间的交换,以获取部分工作方法以sxe ld周期性中断osronline.com/showthread.cfm?link= 233022

– blabb
2014年5月11日7:57



#3 楼

对于windbg,请在这里查看我的答案

如何可靠地手动解压缩Windows驱动程序?在连接后第一次中断

当从bootphase加载它们时,它会简单地打印出所有驱动程序详细信息,对于其他VM,您需要设置sxe -ibp; and reboot并在Initial Breakin上运行脚本