内核驱动隐藏【绕过PatchGuard】
心血来潮测试隐藏驱动还不触发PG,看看有探讨的同学不
- 断链 //你可能会随时会看到一个蓝色的屏幕!
- 直接MiProcessLoaderEntry //跟断链没有太大区别,但是在测试中,不会见到蓝色的屏幕,同时SEH异常处理也失效!
- 现在操作的就是使用MiProcessLoaderEntry来处理!
关键步骤如下:
1.驱动入口调用IoRegisterDriverReinitialization函数原型如下
void IoRegisterDriverReinitialization(_in_ PDRIVER_OBJECT DriverObject,_in_ PDRIVER_REINITIALIZE DriverReinitializationRoutine,_in_, optional_ PVOID Context
);
2.处理操作如下:
typedef NTSTATUS(__fastcall* _MiProcessLoaderEntry)(PVOID pDriverSection, BOOLEAN bool_);
typedef struct _LDR_DATA_TABLE_ENTRY {LIST_ENTRY InLoadOrderLinks;LIST_ENTRY InMemoryOrderLinks;LIST_ENTRY InInitializationOrderLinks;PVOID DllBase;PVOID EntryPoint;ULONG SizeofImage;UNICODE_STRING FullDllName;UNICODE_STRING BaseDllName;ULONG Flags;USHORT LoadCount;USHORT TlsIndex;PVOID SectionPointer;ULONG CheckSum;PVOID LoadedImports;LIST_ENTRY64 ForwardweLinks;LIST_ENTRY64 ServiceTaLinks;LIST_ENTRY64 sTATIClINKS;PVOID ContextInformation;LARGE_INTEGER LoadTime;
}LDR_DATA_TABLE_ENTRY, * P_LDR_DATA_TABLE_ENTRY;VOID DriverReinitializationRoutine(PDRIVER_OBJECT pDriverObject, PVOID Context, ULONG Count){_MiProcessLoaderEntry MiProcessLoaderEntry = NULL;MiProcessLoaderEntry(pDriverObject->DriverSection, FALSE);P_LDR_DATA_TABLE_ENTRY LdrEntry = (P_LDR_DATA_TABLE_ENTRY)pDriverObject->DriverSection;InitializeListHead(&LdrEntry->InLoadOrderLinks);InitializeListHead(&LdrEntry->InMemoryOrderLinks);p->DriverUnload = NULL;p->DriverInit = NULL;p->DriverSize = NULL;p->DriverStart = NULL;p->DeviceObject = NULL;p->DriverSection = NULL;
}
经过上方一系列操作后,任何工具都无法看到驱动的加载,当然也是正常运行的!
正常通讯!
内核驱动隐藏【绕过PatchGuard】相关推荐
- 内核驱动隐藏自身【断链】
内核驱动加载断链式隐藏自身 //创建一个驱动对象数据结构 typedef struct _KLDR_DATA_TABLE_ENTRY {LIST_ENTRY64 InLoadOrderLinks;// ...
- 驱动开发:内核无痕隐藏自身分析
在笔者前面有一篇文章<驱动开发:断链隐藏驱动程序自身>通过摘除驱动的链表实现了断链隐藏自身的目的,但此方法恢复时会触发PG会蓝屏,偶然间在网上找到了一个作者介绍的一种方法,觉得有必要详细分 ...
- 【梅哥的Ring0湿润插入教程】第一课Windows内核/驱动编程概述及应用、商业驱动保护软件原理分析...
[梅哥的Ring0湿润插入教程] Email:mlkui@163.com 转载请注明出处,谢绝喷子记者等,如引起各类不适请自觉滚J8蛋! 第一课Windows内核/驱动编程概述及应用. 商业驱动保护软 ...
- 树莓内核驱动io框架
树莓派内核驱动框架 驱动层框架编写 驱动程序:pin4driver2.c 上层程序pin4test.c 驱动代码编译和测试 1.返回内核源码linux文件进行模块编译 2.将生成的pin4driver ...
- 谈谈Linux内核驱动的coding style
2019独角兽企业重金招聘Python工程师标准>>> 最近在向Linux内核提交一些驱动程序,在提交的过程中,发现自己的代码离Linux内核的coding style要求还是差很多 ...
- VMware调试.【转】VMware+Windgb+Win7 内核驱动调试
ZC:我遇到的问题:com_1 怎么都不成功,记起来 貌似原来也遇到过这个问题,看了一下 VMware里面创建的是 "串行端口 2",于是 将 "com_1"改 ...
- 西数加密linux,Symantec PGP Desktop pgpwded.sys内核驱动任意代码执行漏洞
发布日期:2012-12-24 更新日期:2012-12-27 受影响系统: Symantec PGP Desktop 10.2.0 Build 2599 描述: ------------------ ...
- vmlinux 反汇编_ARM Linux内核驱动异常定位方法分析--反汇编方式
通常认为,产生异常的地址是lr寄存器的值,从上面的异常信息可以看到[lr]的值是c01a4e30. 接下来,我们可以通过内核镜像文件反汇编来找到这个地址.内核编译完成后,会在内核代码根目录下生成vml ...
- linux 内核驱动的名字,Linux内核驱动的的platform机制
接下来来看platform_driver结构体的原型定义,在include/linux/platform_device.h中,代码如下: struct platform_driver { int (* ...
最新文章
- writing science_Science:“硼铋生辉”——铋氧化还原催化芳基硼酸酯的氟化反应...
- 使用结构体的形式使一个函数返回多个数据
- GDB调试core文件样例(如何定位Segment fault)
- layui 表单动态添加、删除input框
- twisted mysql_Twisted MySQL adbapi返回字典
- IDEA如何设置鼠标滚轮调整代码大小
- 向日葵远程控制软件linux版安装
- Zigbee和WiFi的信道重叠
- 5位数的数字黑洞是多少_五位数数字黑洞编程
- Python数据分析中 DataFrame axis=0与axis=1的理解
- 协同过滤算法的简单理解《推荐系统实践》
- ubuntu企业微信和微信无法发送和显示图片和截图问题
- [20160213]关于ansi语法.txt
- 《从0开始学微服务》模块一:入门微服务的学习笔记
- 潍坊学院计算机打破世界纪录,牛!2017 ASC世界大学生超级计算机总决赛 潍坊学院每秒31.7万亿次峰值计算刷新世界纪录...
- ​今年36岁,北邮硕士毕业,待过字节,阿里,最近被裁员,只能去外包。。。...
- 狗为什么吃屎?真相男默女泪,但看完后你也会流口水......
- 眼睛不好者的福音,超大字版本万能五笔!
- TeraCloud网盘挂载
- 1. STM32 环境搭建 + STM32 新建工程 + Yinyuer(ZCY) 的 STM32 寄存器首次点灯