驱动编程
文章平均质量分 56
zy_strive_2012
天道酬勤
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Windows 内核驱动程序完整性校验的原理分析
在上一篇文章中提到了 Windows Vista 及之后版本的 Windows 操作系统在驱动程序加载完成后,驱动中调用的一些系统回调函数(如 ObRegisterCallbacks,可用来监控系统中对进线程句柄的操作,如打开进程、复制线程句柄等)等 API 中会通过 MmVerifyCallbackFunction 函数对该驱动程序进行完整性检查,检测未通过则会返回 0xC0000022 拒绝访问的返回值。在这篇文章中将会对这个函数进行简单的分析,以明确其原理。0x0 获取函数地址通过 Windb转载 2020-06-22 15:29:36 · 1347 阅读 · 0 评论 -
Windows启动过程原理:叙Windows平台下基于MBR和UEFI的bootkit
安全的对抗首先在权限方面,权限高的进程对权限低的权限就是就是降维打击,无往不利。当权限相同时,启动得早便为王。所谓的bootkit也就是基于这个思路设计的一种复杂病毒。它优先于Windows系统启动,自然也就优先于杀毒软件启动的时间。鉴于国内对bootkit的文章不多,本文想介绍一下bootkit的具体技术细节。为了保证内容的梯度和完整度,其中基于MBR的rootkit分别以WindowsXp和Win7为例,而基于UEFI的bootkit则可以在Windows7以上版本(7,8,10)的运行。一:基于M转载 2020-06-20 09:57:12 · 1266 阅读 · 0 评论 -
Windows X64 Patch Guard
先简单介绍下PatchGuard ,摘自百度百科PatchGuard就是Windows Vista的内核保护系统,防止任何非授权软件试图“修改”Windows内核,也就是说,Vista内核的新型金钟罩。PatchGuard为Windows Vista加入一个新安全操作层,此前我们为您介绍过的ASLR(Address Space Layout Randomization)亦在这个安全层之下。PatchGuard能够有效防止内核驱动模式改动或替换Windows内核的任何内容,第三方软件将无法再给Wi转载 2020-05-25 09:26:03 · 1237 阅读 · 0 评论 -
RobbinHood:利用Windows驱动程序漏洞关闭杀软的勒索软件
近期,Sophos安全团队发现了一起新型勒索软件攻击事件,该勒索软件能通过合法且经过数字签名的硬件驱动程序,在恶意文件加密部分执行之前禁用目标计算机中的安全产品。该驱动程序曾由台湾主板制造商技嘉(Gigabyte)使用(当前已弃用),它具有一个已知的漏洞CVE-2018-19320,利用此漏洞,攻击者能够尝试访问设备并部署第二个驱动程序,进而杀死系统中的杀毒产品。该漏洞于2018年被发现,技嘉曾否认此漏洞并表示其产品不受影响,后来才决定撤销此驱动程序。但由于用于对驱动程序进行数字签名的Verisig转载 2020-05-25 08:58:47 · 1011 阅读 · 0 评论 -
X64下的虚拟地址到物理地址的转换
参考链接:https://bbs.pediy.com/thread-203391.htm早就知道传上来排版会全乱掉,把pdf直接传上来吧x64结构体系寻址.pdf发现安大的关于x86启用PAE下的虚拟地址转物理地址的帖子,大家可以参考一下http://bbs.pediy.co/showthread.php?t=180989X64结构体系内存寻址在阅读NewBluePill源码的时候,看内存的那一块简直头疼,全是x64下的寻址,之前根本就没有接触过x64的内存寻址上的内容,看的晕头转向,决定先把x6转载 2020-05-12 10:44:21 · 1346 阅读 · 0 评论 -
应用程序与驱动程序的通信
参考链接:https://blog.youkuaiyun.com/bugmeout/article/details/45770855通过函数 IoCreateSymbolicLink来建立R0设备名DevName与R3设备名LnkName的对应关系。其中上图R3专用设备名L"\\\\.\\MyDevice"与桥梁设备符号名之间的对应关系自动建立。 status = IoCreateSymbolicLink(&LnkName,&DevName)...原创 2020-05-12 09:09:46 · 238 阅读 · 0 评论 -
Windows内存放血篇,突破物理内存的CopyOnWrite
原创链接:https://bbs.pediy.com/thread-222949.htm本篇以x86(开启PAE) 以及x64 Win7系统不借助微软API突破内存的写拷贝机制进行讲述0x01 Before Starting1. PAE: Physical Address Extension,Inter为了支持更大的物理内存寻址而设计的x86寻址方式,虚拟地址没有变化都是32位,只是描述物理内存的位数由原先的32为增加到36位,能够最多寻址 2^4 * 4GB =...转载 2020-05-11 16:09:24 · 626 阅读 · 0 评论 -
应用程序与驱动程序交互函数DeviceIoControl详解
这种通信方式,就是驱动程序和应用程序自定义一种IO控制码,然后调用DeviceIoControl函数,IO管理器会产生一个MajorFunction 为IRP_MJ_DEVICE_CONTROL(DeviceIoControl函数会产生此IRP),MinorFunction 为自己定义的控制码的IRP,系统就调用相应的处理IRP_MJ_DEVICE_CONTROL的派遣函数,你在派遣函数中判断Mi...转载 2019-12-20 08:52:31 · 3054 阅读 · 0 评论 -
MmIsAddressValid、ProbeForRead、ProbeForWrite函数分析
MmIsAddressValidWDK文档中给出的功能描述:The MmIsAddressValid routine checks whether a page fault will occur for a read or write operation at a given virtual address.根据描述来看这个函数的功能只是去检查读写操作会不会触发一个页错误,但是作为一个...原创 2019-12-19 15:07:10 · 1312 阅读 · 0 评论 -
微软新签名政策
microsoft新的签名政策有了更深入的了解。结论如下:1、以后内核驱动程序都必须经过EV签名(SHA256算法,官方称呼是“扩展签名”),用老签名(SHA1算法,官方称呼是“标准签名”)不行了。2、EV签名是有钱就能买到的,但是要想驱动被正常的加载,还必须“由硬件开发人员中心仪表板签名”(官网原话)。而普通开发者要获得这个签名不是容易的事情。这个可以理解为“新DSE政策”。3、由于这个政...转载 2019-12-19 08:17:18 · 330 阅读 · 0 评论 -
WINDOWS驱动开发指导(想学内核的人无需再被“大牛”忽悠)
http://www.m5home.com/bbs/thread-8012-1-1.html向大牛学习,时不我待,加油加油。原创 2019-12-18 16:41:45 · 229 阅读 · 0 评论 -
[Windows驱动开发]之内存概念及内存操作示例代码
一、内存管理概念1. 物理内存概念(Physical Memory Address)PC上有三条总线,分别是数据总线、地址总线和控制总线。32位CPU的寻址能力为4GB(2的32次方)个字节。用户最多可以使用4GB的真实物理内存。PC中很多设备都提供了自己的设备内存。这部分内存会映射到PC的物理内存上,也就是读写这段物理地址,其实读写的是设备内存地址,而不是物理内存地址。2. 虚拟内存概念...转载 2019-12-18 16:25:39 · 642 阅读 · 0 评论 -
Win7 x64动态开启DSE
链接:https://blog.youkuaiyun.com/zhuhuibeishadiao/article/details/51055046原创 2019-12-18 15:14:08 · 330 阅读 · 0 评论 -
VS 的 /GS 编译选项解析
简单地说, /gs 选项就是打开 stack guard 功能, 也就是在 call 一个函数, 进行压栈的过程中, 在 ebp 和 local variables 中间, 插入一个 global cookie. 一旦 local variable 发生了溢出, 改写了 stack guard 的值, 则函数返回的时候会检查到该变化, 并立刻终止应用程序, 这样能够及时发现问题.请看原文:...转载 2019-12-18 15:02:54 · 1694 阅读 · 0 评论 -
内存操作相关知识梳理及示例代码
1.基本函数及其原型分配内存:PVOID ExAllocatePool( IN POOL_TYPE PoolType, IN SIZE_T NumberOfBytes );内存操作函数两个:VOID RtlMoveMemory( IN VOID UNALIGNED *Destination, IN CONST VOID UNALI...原创 2019-12-18 14:56:07 · 471 阅读 · 0 评论 -
win64 驱动内存基本操作,相关重要知识理解
1.基本函数及其原型分配内存:PVOID ExAllocatePool( IN POOL_TYPE PoolType, IN SIZE_T NumberOfBytes );内存操作函数两个:VOID RtlMoveMemory( IN VOID UNALIGNED *Destination, IN CONST VOID ...原创 2019-12-18 14:42:23 · 248 阅读 · 0 评论 -
Win64 驱动内核编程-20.UnHook SSDT
具体内容看链接:(以备后续学习)https://blog.youkuaiyun.com/u013761036/article/details/65101735原创 2019-12-18 14:37:18 · 198 阅读 · 0 评论 -
Windows下dump文件生成与分析
一、生成Dump文件方式1.1任务管理器在程序崩溃后,先不关闭程序,在任务管理器中找到该程序对应的进程。右键—>创建转储文件。此时会在默认的目录下创建出一个dump文件。可以看出,此种方法只适用于程序崩溃但没有立即自行退出的情况。倘若程序故障后自行退出,则此方法就难以应用。不过,我们可以在注册表中添加如下信息已确保系统在程序崩溃后自行保存一个dum...转载 2019-12-18 11:39:00 · 594 阅读 · 0 评论 -
有关于《Windows驱动程序开发技术详解》中的HelloDDK卸载后导致Windows7蓝屏的解决方案
看《Windows驱动程序开发技术详解》的朋友们可能发现,按照书上的代码写了(抄了)HelloDDK后安装运行后正常,但卸载时发现Windows 7 蓝屏了,报错信息为PAGE_FAULT_IN_NON_PAGED_AREA (这可着实吓坏了我这个刚入门Windows驱动程序的萌新)先上解决方案:把所有#pragma INITCODE 替换成 #pragma PAGEDCODE至于为什...转载 2019-12-18 11:26:22 · 491 阅读 · 1 评论 -
win7下使用DebugView看内核打印的配置方法
DebugView是大家常用的查看内核打印输出的工具之一。最近因为调试系统变成了win7,使得DebugView无法查看内核打印,只能查看上层输出。在网上搜索了有关的配置信息,归结为两种方法:一、打开注册表手动修改键值1. 打开注册表:(在Run中输入regedit);2. 在HKLM\SYSTEM\CuurentControlSet\Control\Session Manag...转载 2019-12-18 11:18:36 · 913 阅读 · 0 评论 -
VS2017+WDK10驱动编译与调试
https://blog.youkuaiyun.com/liny000/article/details/81260385原创 2019-12-16 15:42:50 · 347 阅读 · 0 评论 -
IRP操作文件之再填坑
啧,大佬飘过……文字较多,可以直接看最后面的 最近在捣腾发送IRP_MJ_CREATE打开文件,同时要能解 reparse point。几顿操作猛如虎之后,终于可以正常解析 reparse point了,然后就像检验一下,这整个流程和IoCreateFile的区别大不大。就在打开的时候,加了个 FILE_DELETE_ON_CLOSE标记,看看FileObject销毁后文件是否...转载 2019-12-12 10:53:13 · 592 阅读 · 0 评论 -
IRP操作文件填坑日记
背景:近段时间一个项目需要IRP操作文件.于是.搜索硬盘.把好几年前的代码找出来.说起这个代码,需要感谢黑月教主(achillis)和炉子.当时炉子开源了PsVoid.里面就有Irp操作文件.但是抄了之后.win7蓝屏.当时水平太菜.只好在Q上麻烦教主帮忙.教主帮忙分析一番之后.于是网上就有了.那个经典的ULONGUnKnow[41]. 然后各个博客转载…当然了.当时我自己也先存了一份.不过...转载 2019-12-12 10:51:01 · 568 阅读 · 0 评论 -
Win64 驱动内核编程-27.强制读写受保护的内存
强制读写受保护的内存某些时候我们需要读写别的进程的内存,某些时候别的进程已经对自己的内存读写做了保护,这里说四个思路(两个R3的,两个R0的)。方案1(R3):直接修改别人内存最基本的也最简单的就是直接通过WriteProcessMemory 和 ReadProcessMemory对没有进行保护的程序的内存进行修改,一些单机游戏辅助什么的可能会有这种简单方式修改其他进程内存。方案2(R3...转载 2019-12-10 15:30:42 · 1779 阅读 · 0 评论 -
内核程序中进程的pid,handle,eprocess之间相互转换的方法
在内核程序开发中,我们常常需要取得某进程的pid或句柄,或者需要检索进程的eprocess结构,很多API函数需要的参数也不同,所以掌握pid<->handle<->eprocess相互转换的方法会大大提高我们的开发效率。以下就是我自己在实际开发中总结出来的转换方法,在此记录下来,以供需要的朋友参考。1、pid->handleOBJECT_ATTRIBUTES ...转载 2019-12-09 11:39:09 · 434 阅读 · 0 评论 -
BlackBone工具集合:注入、hook、驱动程序
FF_BlackBone介绍作为Windows开发人员,经常遇到枚举进程、枚举模块、读写进程内存的操作;Windows安全开发人员更是会涉及注入、hook、操作PE文件、编写驱动。每次都要翻各种资料制造轮子,那么有没有好的开源库解决这个问题呢,目前知道的就Blackbone了,而且它的代码写的很好,完全可以作为教科书来用。PS:作者DarthTon在github上的头像很有意思,就粘了下来。...转载 2019-12-09 11:37:51 · 5530 阅读 · 0 评论 -
如何禁用windows数字签名
发现Windows操作系统在启用数字签名的情况下部分外接设备的驱动无法安装,设备无法使用,可以考虑通过禁用数字签名的方式来让我们的驱动能够安装成功Windows+x,以管理员打开命令提示符(cmd),执行以下命令,看到提示操作成功完成,重新启动电脑,即永久关闭了数字签名验证bcdedit.exe -set loadoptions DDISABLE_INTEGRITY_CHECKS如果想再...转载 2019-10-30 08:34:45 · 1726 阅读 · 1 评论 -
妙用WIN64AST来运行破解版的SANDBOXIE(无需打开测试签名模式)
SANDBOXIE是一款非常不错的的沙盘,可惜新的64位破解版不完善,必须要打开“测试签名模式”才能使用。打开“测试签名模式”会严重降低系统安全性,其实就等于禁用掉了WIN64内核保护的一个重要功能:驱动签名强制。微软没有提供短时间内禁用“驱动签名强制”的功能,如果要启用或者禁用则必须重启电脑。难道为了运行SANDBOXIE就要顾此失彼么?答案当然是否定的,用WIN64AST来帮你忙即可。转载 2017-11-13 16:43:02 · 2399 阅读 · 0 评论 -
DDK编译驱动程序
相对于繁琐的配置VS2015来编译驱动程序,DDK编译高效便捷,但需要掌握其中的必要程序。 一、在源程序的相同目录下创建两个文件makefile和Sources,这两个文件均为文本文件,内容如下:TARGETNAME 驱动名称TARGETTYPE 编译程序类型为驱动编译源文件为ds.c二、安装VS2010或更高版本,选择Checked Bu原创 2017-11-13 09:31:50 · 1117 阅读 · 0 评论 -
内核级驱动对抗Hook ZwSetInformationFile反删除技术
网络安全中的文件删除与保护一直都是大家谈论的焦点问题,针对如何保护磁盘上属于自己的专有文件,已经存在一些现成技术,比如信息隐藏技术。笔者详细的谈论过有关基于有序规则的信息隐藏与加密技术,利用一些常见图片、视频等作为载体将文件嵌入其中,达到掩人耳目的目的。这种方式如果在图像的鲁棒性、文件规则的健壮性、加密算法的有效性上能够很好的满足,是可以很好的实现文件的保护的。下面论述的是文件在没有隐藏的情况下,转载 2017-10-26 09:09:10 · 1775 阅读 · 0 评论 -
Windows内核学习笔记-- 编写程序手动加载驱动程序
#include #include #include #include #define DRIVER_NAME "HelloDriver" #define DRIVER_PATH "..//MyDriver//HelloDriver.sys" //装载NT驱动程序 BOOL LoadNTDriver(char* lpszDriverNa转载 2017-11-02 09:35:13 · 1827 阅读 · 0 评论 -
C++中#if #ifdef 的作用
一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译”。有时,希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。 条件编译命令最常见的形式为: #ifdef 标识符 程序段1 #else 程序段2 #endif它的作用是:当标识符已经被定义过(一般转载 2017-11-02 09:21:07 · 630 阅读 · 0 评论 -
关于不结束进程强删文件一点点看法
这也是好久以前的代码了。我是菜鸟,在这个问题上研究的不够深,说错了还请大牛指正。 这个问题也是一个老问题,不过我是菜鸟我有话要说。我在做这个问题的时候查阅了好多资料,其实这个问题不能算解决,这篇文章你将会看到一段比较长的代码,其实这段代码不是我写的,是网上一个比较有名的人(人称MJ)写的,据说这段代码是通过360文件粉碎机逆向出来的。 我查了好多资料,发现能够实现标转载 2017-10-25 09:57:10 · 659 阅读 · 0 评论 -
强删文件--->构建IRP---->独占--->正在运行 以及磁盘读写(思路)
版权声明:本文为博主原创文章,未经博主允许不得转载。个人比较崇拜360 一个小小的按钮下面蕴含着很多的原理 要有多么强大才能1天搞定偏移-------致敬360 致敬MJ-001无奈本人学业不精 只能说说“独占”和“正在运行”打开文件 一般使用ZwCreateFile NtCreateFile 但这些函数还不够底层 使用IoCreateFile会好一些被其它程序独占转载 2017-10-25 09:50:34 · 807 阅读 · 0 评论 -
IRP操作文件
版权声明:本文为博主原创文章,未经博主允许不得转载。[cpp] view plain copy#include #ifndef MAX_PATH #define MAX_PATH 260 #endif NTSTATUS ObOpenObjectByPointer(PVOID Obje转载 2017-10-25 09:49:09 · 1540 阅读 · 1 评论 -
强制删除文件(1)——直接发IRP到文件系统
这个程序比较简单,主要练习了两个点:(1)模拟发送IRP(2)使用内核事件对象同步IRP的执行强制删除文件的思路很简单,把SECTION_OBJECT_POINTERS结构的DataSectionObject和ImageSectionObject两个域清空即可删除正在运行的文件。如果不清空就不能删除运行中的文件。正在运行的文件的这两个域值不为0而文件系统正在根据这两个域决定该文件是转载 2017-10-25 09:22:34 · 1547 阅读 · 0 评论 -
Error 1275 - 此驱动程序被阻止加载
0用DriverMonitor加载一个驱动准备调试,出现下图;现摘录网上相关论述如下;1遇到驱动程序阻止加载,有多种原因,可以参考如下解决方法: 方法一: 1.右键桌面上的“计算机”→“属性”。 2.选择左边选项卡的“高级系统设置”。 3.切换到左边的“硬件”选项卡→选择第二个“设备安装设置”。 4.在弹转载 2017-11-10 10:54:18 · 3960 阅读 · 0 评论 -
Win10下VS2015(WDK10)驱动开发环境配置
1、 概述微软在”WDK7600“以后就不再提供独立的内核驱动开发包了,而是必须首先安装微软集成开发环境VisualStudio,然后再从微软官网下载集成的WDK开发包、或者离线安装包,但是安装后Visual Studio就集驱动程序开发,编译,安装,部署和调试于一身,使得Windows驱动程序开发会变得更容易。对于Windows 10和Visual Studio2015驱动开转载 2017-11-14 08:20:58 · 531 阅读 · 0 评论 -
vs2012+win8内核编译环境
好,旧社会的苦故事已经剧终了。现在开始讲翻身得解放的故事。新时代忽然就来了,VS2012给了我们新生活(此处当响起为英雄而欢呼般的掌声)!VS2012是Win8发布后出来的,有很多针对Win8的特性,但也能在Win7/Vista系统上运行。请您先下载安装VS2012软件,再安装Win8的WDK,WDK的编译环境会自动集成到VS2012中去。当您再次打开VS2012的时候,在新项目向导里面,就能够找转载 2017-11-14 08:59:28 · 500 阅读 · 0 评论 -
DDK编译驱动需要的文件 rc文件,makefile和SOURCE文件
用DDK编译驱动,需要两个文件的支持,一个是MakeFile文件,这个文件是通用的。而Source文件则根据每个驱动程序而不同,转了一篇讲解如何编写这两个文件的文章,感谢原作者。学习和编写WDM 驱动程序对谁而言都是一件具有挑战的事情,需要恒心和毅力。当你入门后你会发现这是一件多么令人兴奋的事情。但是如何使用WDM的编译环境从而开始WDM 学习的旅程?对一个初学者来说这个门槛可不低。安转载 2017-11-14 09:06:00 · 1404 阅读 · 0 评论
分享