tangptr@126.com 发表于 2015-8-25 17:11:40

TP的学习笔记:实现PCHunter的一个功能——超级暴力重启

本帖最后由 tangptr@126.com 于 2015-8-25 17:15 编辑

超级暴力重启者For Win64帖子地址:http://www.m5home.com/bbs/forum.php?mod=viewthread&tid=8583&page=1&extra=&_dsign=eaf7c191
这里介绍给大家一个函数: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的帖子,由于本文是安利给大家的,所以既不设置水晶币,也不设置阅读权限。

Tesla.Angela 发表于 2015-8-30 12:29:03

R.B.L系列。
页: [1]
查看完整版本: TP的学习笔记:实现PCHunter的一个功能——超级暴力重启