为了我自己的学习乐趣,我一直在反转 Uroborus 特洛伊木马的样本。一旦它加载了实现 rootkit 的 Windows 内核驱动程序,我就很难遵循它。我已经为内核调试设置了环境(使用 IDA 的 windbg 插件)并为新驱动程序设置了一个断点(它称为 Fdisk.sys,所以我一直在输入“bu fdisk.sys!DriverEntry”)。但是,IDA 永远不会在加载驱动程序时中断。我可以说它已经运行,因为它开始隐藏注册表项 (Ultra3),并转储内存并使用 Volatility 查看卸载的模块,我可以看到 fdisk.sys 已卸载。我还可以确认它已将挂钩安装到许多内核 API 中。如何在驱动程序运行之前让 IDA/windbg 中断?
如何打破尚未加载的内核驱动程序
逆向工程
艾达
恶意软件
调试
内核模式
2021-07-07 20:39:54
3个回答
由于某种原因,我尚未确定,按名称 (fdisk.sys) 在此模块上设置断点的所有努力都失败了。驱动程序未在启动时加载(至少,不是在我现在正在调查的时候)。它由一个模块加载,然后很快再次卸载。
我最终使用调试器(在我的 VM 内部)逐步执行启动驱动程序的模块,在文件写入磁盘后停止执行,并使用十六进制编辑器将第一条指令更改为 INT 3。当驱动程序加载时,内核调试器会捕获异常,我可以开始查看。 呸
现在我得弄清楚为什么我不能按名字让它打破......
可能晚了但是:如果您使用 WinDBG(kd) 来调试内核,请使用
sxe -c ".echo fdisk loaded;" ld:fdisk.sys
这在用户和内核模式下可用,并在模块加载后和入口点之前导致调试器闯入。
对于windbg,请看我的回答here
如果您使用的是虚拟 kd 和 vmware,只需在连接后第一次虚拟 kd 中断时运行脚本
它会简单地打印出所有驱动程序的详细信息,当它们从 bootphase 加载时
对于其他虚拟机,您需要sxe -ibp; and reboot
在初始闯入时设置并运行脚本