|
超级暴力重启者For Win32帖子地址:http://www.m5home.com/bbs/thread-8582-1-1.html?_dsign=f5bd9219
这里介绍给大家一个函数:HalReturnToFirmware。
此函数是hal.dll的导出函数。
什么叫hal?hal是Hardware Abstract Level,硬件抽象层的意思。
首先先看看其函数原型:
- NTKERNELAPI void HalReturnToFirmware(IN FIRMWARE_REENTRY FirmwareReentry);
复制代码
其中FIRMWARE_REENTRY是ntddk.h没有的枚举类型,需要自己声明:
- typedef enum _FIRMWARE_REENTRY
- {
- HalHaltRoutine,
- HalPowerDownRoutine,
- HalRestartRoutine,
- HalRebootRoutine,
- HalInteractiveModeRoutine,
- HalMaximumRoutine
- }FIRMWARE_REENTRY, *PFIRMWARE_REENTRY;
复制代码
那么我们要重启机器只需要选择第四个HalRebootRoutine就可以了,代码如下:
- HalReturnToFirmware(HalRebootRoutine);
复制代码
网上有人说驱动里强制关机有三个函数:
NtShutdownSystem
KeBugCheck
HalReturnFirmware
而调用KeBugCheck这种公开文档化函数的驱动实现强制关机可以通过WHQL的安全认证,其他两个不行。
首先看看KeBugCheck怎么实现重启的:
- KeBugCheck(POWER_FAILURE_SIMULATE);
复制代码
而跟踪反汇编后发现它调用了KeBugCheck2函数。
跟踪KeBugCheck2函数,发现在KeBugCheck2首先判断第一个参数BugCheckCode是不是0xE5,也就是POWER_FAILURE_SIMULATE,若是就先调用函数KiScanBugCheckCallbackList,再调用HalReturnToFirmware,而压进堆栈的参数是3,也就是HalRestartRoutine。
至于NtShutdownSystem这个玩意,只要Hook NtSetSystemPowerState就可以了。
p.s:本文附带的附件,其描述摘自Hovi.Delphic的帖子,由于本文是安利给大家的,所以既不设置水晶币,也不设置阅读权限。此外附件的驱动已添加被吊销了的正规签名,所以附件可以无视DSE的存在。 |
评分
-
查看全部评分
|