TP的学习笔记:实现PCHunter的一个功能——超级暴力重启
超级暴力重启者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的存在。 R.B.L系列。 感谢tangptr@126.com大牛的超级暴力重启。
请看我的帖子http://www.m5home.com/bbs/thread-9325-1-1.html
页:
[1]