找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 5556|回复: 1

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

[复制链接]

78

主题

190

回帖

9

精华

贵宾会员

积分
15605
发表于 2015-8-25 17:11:40 | 显示全部楼层 |阅读模式
本帖最后由 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,硬件抽象层的意思。
首先先看看其函数原型:
  1. NTKERNELAPI void HalReturnToFirmware(IN FIRMWARE_REENTRY FirmwareReentry);
复制代码

其中FIRMWARE_REENTRY是ntddk.h没有的枚举类型,需要自己声明:
  1. typedef enum _FIRMWARE_REENTRY
  2. {
  3.         HalHaltRoutine,
  4.         HalPowerDownRoutine,
  5.         HalRestartRoutine,
  6.         HalRebootRoutine,
  7.         HalInteractiveModeRoutine,
  8.         HalMaximumRoutine
  9. }FIRMWARE_REENTRY, *PFIRMWARE_REENTRY;
复制代码

那么我们要重启机器只需要选择第四个HalRebootRoutine就可以了,代码如下:
  1. HalReturnToFirmware(HalRebootRoutine);
复制代码

网上有人说驱动里强制关机有三个函数:
NtShutdownSystem
KeBugCheck
HalReturnFirmware
而调用KeBugCheck这种公开文档化函数的驱动实现强制关机可以通过WHQL的安全认证,其他两个不行。
首先看看KeBugCheck怎么实现重启的:
  1. KeBugCheck(POWER_FAILURE_SIMULATE);
复制代码

而跟踪反汇编后发现它调用了KeBugCheck2函数。
跟踪KeBugCheck2函数,发现在KeBugCheck2首先判断第一个参数BugCheckCode是不是0xE5,也就是POWER_FAILURE_SIMULATE,若是就先调用函数KiScanBugCheckCallbackList,再调用HalReturnToFirmware,而压进堆栈的参数是3,也就是HalRestartRoutine。
至于NtShutdownSystem这个玩意,只要Hook NtSetSystemPowerState就可以了。
p.s:本文附带的附件,其描述摘自Hovi.Delphic的帖子,由于本文是安利给大家的,所以既不设置水晶币,也不设置阅读权限。

超级暴力重启者For Win32.zip

42.32 KB, 下载次数: 4258

下载代码不回帖是一种很欠扁的行为

评分

参与人数 1水晶币 +1 收起 理由
Tesla.Angela + 1 R.B.L系列。

查看全部评分

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2015-8-30 12:29:03 | 显示全部楼层
R.B.L系列。
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表