关机的N种方法

关机的N种方法

说明:技术仅供学习使用,如恶意利用,与作者无关!

1.

无意中看到一种通过控制92H端口bit0位,将其置1来实现重启的方法,刚才测试了一下,效果真好

mov al, 01
out 92h, al

2.

另一种,模拟键盘的reset

mov al, 0xfe
out 0x64, al

i8042 :键盘控制器
8042的端口在cpu的io空间地址如下:

port----Read/Write-----Function
0x60----Read----------Read Input Buffer
0x60----Write---------Write Output Buffer
0x64----Read----------Read Status Register
0x64----Write---------Send Command

3.

ZwInitiatePowerAction(PowerActionShutdown,
                      PowerSystemShutdown,
                      0,
                      TRUE
                      );

4.

HalReturnToFirmware(HalRebootRoutine);

驱动中直接使用由Hal.dll导出的HalReturnToFirmware函数来实现关机,这是系统正常关机时调用的最后一个API,也是最实效的一个API,这个函数会直接调用Bios例程,然后系统就真的关机了

测试代码:

#include <ntddk.h>

enum FIRMWARE_REENTRY
{
    HalHaltRoutine,
    HalPowerDownRoutine,
    HalRestartRoutine,
    HalRebootRoutine,
    HalInteractiveModeRoutine,
    HalMaximumRoutine
} FIRMWARE_REENTRY, * PFIRMWARE_REENTRY;

VOID HalReturnToFirmware(
    IN enum FIRMWARE_REENTRY  Routine
);

NTSTATUS DriverEntry(
    PDRIVER_OBJECT pDriver,
    PUNICODE_STRING uReg)
{
    HalReturnToFirmware(HalPowerDownRoutine);
    return STATUS_SUCCESS;
}

5.

KeBugCheck(POWER_FAILURE_SIMULATE);
也许你会认为这是BugCheck,那么你错了,这并不会引发bugcheck

这样实际上会调用了HalReturnToFirmware(HalRebootMachine)

当执行了BugCheck回调后,无BSOD,无Crash dump,只会进行非常干净、简单和直接的重启动

实现源码为:

/* Check if this is power failure simulation */
if (BugCheckCode == POWER_FAILURE_SIMULATE)
{
    /* Call the Callbacks and reboot */;
    KiDoBugCheckCallbacks();
    HalReturnToFirmware(HalRebootRoutine);
}

   转载规则

请联系作者付费转载。
 上一篇
驱动隐藏MBR 驱动隐藏MBR
驱动隐藏MBR说明:技术仅供学习使用,如恶意利用,与作者无关!技术简介就是拦截MiniPort的请求,查看请求的LDR是不是0,(Read时)是0就将SystemBuffer填充成我们伪造的MBR,直接返回,不是就放行.至于Write时,就
2020-03-18
下一篇 
SuperDriver Project SuperDriver Project
SUPERDRIVER 简介什么是SuperDriver?SuperDriver是一种以内核模式运行的驱动(KMDF),为某些程序提供编程接口,接口主要涉及: 进程操作 进程结束 强制进程结束 *:内存清零 进程隐藏 进程保护
2020-03-12
  目录