
驱动内核
文章平均质量分 58
专注成就专业_
专注成就专业!!!
展开
-
Windows下Critical Section、Event、Mutex、Semaphores区别
临界区(Critical Section) 保证在某一时刻只有一个线程能访问数据的简便办法。在任意时刻只允许一个线程对共享资源进行访问。如果有多个线程试图同时访问临界区,那么在有一个线程进入后其他所有试图访问此临界区的线程将被挂起,并一直持续到进入临界区的线程离开。临界区在被释放后,其他线程可以继续抢占,并以此达到用原子方式操作共享资源的目的。 临界区包含两个操作原语转载 2013-03-21 17:40:27 · 781 阅读 · 0 评论 -
windows 磁盘驱动的总结
<br /> 前段时间完成了,基于软件驱动实现磁盘还原的保护程序,一直没有时间总结一下这方面相关的知识,<br />方便以后的查阅。<br /> 明天,课设验收,乘着今晚,总结一下在开发过程中的相关问题。。。<br /> <br /> 首先,我们应该原创 2010-12-30 20:46:00 · 1604 阅读 · 0 评论 -
What are DASD volumes and labels?
<br />DASD volumes are used for storing data and executable programs (including the operating system itself), and for temporary working storage. DASD labels identify DASD volumes and the data sets they contain.<br /> <br />DASD 卷被用于数据的存储数据和可执行程序(包括操作系统自己),原创 2010-11-02 16:28:00 · 1316 阅读 · 0 评论 -
hook zwduplicateobject 防止句柄被复制。。。
<br />具体方法,是在这个函数体中判断,现将其下发,得到复制后的句柄后,通过ZwQueryInformationProcess 查询,得到持程序的 pid ,最后,与我们的程序的PID 比较,如果是我们要保护的,则将其句柄值清0 ,返回访问错误。。。<br /> <br />这里我犯了三个错误:<br />1:使用函数的时候,没有注意函数是否有效,也就是,在使用一些可能被别人挂钩过的函数时,我们还是先通过自己搜索比较好。<br />2:在函数中,只需要调用一次底层的函数就可以了<br />3:在发现时我原创 2010-06-09 13:33:00 · 2251 阅读 · 0 评论 -
MiniFilter 的应用层通信程序的编写问题
今天,开始了对 minifilter 的编写,目的是掌握微型过滤程序的编写习惯以及熟悉其中的结构,与sfilter 比起来,它封装了更多的东西,让初学者有点不知所错,但是经过了对sfilter的学习后,你会感觉到那时对函数的进一步封装,用起来是那么的方便,只不过比较上层而已。。。 好了,进入今天的主题,为了让驱动和应用层通信,MS 在mini 哲中类型的驱动中提供原创 2010-05-30 17:55:00 · 4386 阅读 · 0 评论 -
MiniFilter 通信过程中的要点。
通信程序写好后,发现似乎不能有效的卸载程序,居然连关机都不能,是不是让人很郁闷,真的是这样的。。。然而,想到了早上对一些内容的学习,突然间发现,其实问题已经有了眉目,其实这样的问题发生的很是隐蔽的,不是很容易发现的,这个问题就是在通信过程中,我们自己生成的 PFLT_PORT 端口,如果我们不能在 FltUnregisterFilter 执行之前,将其关闭,不然,就会造成系统被原创 2010-05-30 20:39:00 · 1924 阅读 · 1 评论 -
TDI, NDIS 驱动的学习
最近,因为项目的需要,想加入防火墙的功能模块,故开始了对这方面知识的学习。。。。<img style="margin: 2px;" title="名称: AFD.jpg查看次数: 271文件大小: 14.4 KB" src="mhtml:file://C:/Documents and Settings/Administrator/桌面/技术专题 【原创】Windows网络体系结构总原创 2010-05-16 22:55:00 · 1040 阅读 · 0 评论 -
驱动中获取进程完整路径名
原文地址:http://www.osronline.com/article.cfm?id=472 Over the years developers have needed or wanted to know the name of the image executing in a given process. Traditionally, this was o转载 2010-05-01 12:34:00 · 3674 阅读 · 0 评论 -
对暴搜内存的一些理解
最近在写一些东西,发现对内存的搜索是一种比较有效获取信息的方法,于是乎就有了下文: 上图是 反汇编 ntfs.sys 中的分发函数设置的部分,通过上边的操作,程序执行初始化,再看下图,是它在内存布局: 我们发现,方法函数再内存中的布局,是有一定的规律的 都是 C7 46 开头,然后是 4个字节的 XX XX XX XX 的形式,那么,如果我们得到了这个程序在原创 2010-04-25 19:02:00 · 722 阅读 · 0 评论 -
浅淡 “对 HOOK PE 的学习体会”
浅淡 “对 HOOK PE 的学习体会” 我们都知道,对于PE 文件的结构中,有一个叫做导出表的东西,这个表中存放着这个程序运行所需要的函数。这些函数都存放在一个结构中。如果,我们能够替换这个结构中的某些地址,那么,我们就能够在程序执行之前,拿到控制权。下边看一下这个结构的示意图: 从这个图中,我们可以清楚的看到,导出表函数名和函数地址组成,它们可以通过导出表获得:pM原创 2010-04-16 22:49:00 · 560 阅读 · 0 评论 -
解析 bootstat.dat 文件,探究为什么XP知道上次系统启动失败。。。
<br />这个周末终于有时间来搞我的还原驱动了,但是在做的过程中发现了一点问题;<br />加载驱动后,重启机器会使得XP认为系统启动失败,提示我们回到上一次的正确位置。。。<br /> <br />这是由于 bootstat.dat 这个文件造成的,用winhex 打开造成的原创 2010-11-14 14:16:00 · 13246 阅读 · 1 评论 -
源代码加密及图纸保密新技巧-SDC沙盒加密
透明加密技术是近年来针对企业数据保密需求应运而起的一种数据加密技术。所谓透亮,是指对应用者来说是透明的,觉得不到加密存留,当运用者在敞开或编辑指定文件时,体系将主动对加密的数据举行解密,让使用者看到的是明文。保留数据的时候,系统主动对数据举行加密,保留的是密文。而不曾权限的人,无转载 2011-08-09 18:42:23 · 3108 阅读 · 0 评论 -
windows驱动与用户态交互时候,用户无法打开驱动的问题
有段时间没搞驱动了,忘了好多东西啊。。。呜呜呜1:检查驱动中是否有初始化分发函数IRP_MJ_CREATE和IRP_MJ_CLOSE2:是否完成了IRP请求3:应用层打开的符号链接名是否正确:“\\\\.\\XXX”原创 2013-02-01 15:07:46 · 916 阅读 · 0 评论 -
XP,win7下拿到完整路径名
记录一下:NTSTATUS GetProcessImageName(PUNICODE_STRING ProcessImageName){ NTSTATUS status; ULONG returnedLength; ULONG bufferLength; PVOID buffer; PUNICODE_STRING imageName; PAGED_CODE();原创 2013-01-31 17:15:18 · 1484 阅读 · 0 评论 -
Minifilter的动态安装、加载及卸载
MINIFILTER框架的文件系统过滤驱动,无法使用的CreateService和OpenService进行动态加载。看了一下,使用Inf文件安装Minifilter驱动的方式是在注册表驱动服务项下比传统驱动多创建了Instances子键,然后读取DefaultInstance值,这个值标明了Instance选项,然后,再去读指定的Instance的Altitude和Flags值。转载 2012-06-08 11:33:38 · 4012 阅读 · 2 评论 -
中期的翻译作业:Advanced Windows 2000 Rootkit Detection - Execution Path Analysis
高级windows 2000 Rootkits 的检测(可执行路径的分析)摘要在本文中,一种新的检测内核模式和用户模式的方法已经被描述了。当前的技术利用进程的单步模式去计算在系统内核和动态链接库中的指令的执行数量,为了检测被恶意代码额外插入的指令,像Rootkits,后门等。对于windows 2000这种检测单元的实现,充分的利用了这种技术,也进行了讨论。背景在计算机翻译 2012-03-12 14:55:48 · 867 阅读 · 0 评论 -
RtlInitializeGenericTable系列函数的总结
Windows 驱动中使用伸展树(Splay Tree)或者平衡树来存储数据,加快数据的查询速度的方法总结。伸展树维基百科,自由的百科全书伸展树(Splay Tree)是一种二叉排序树,它能在O(log n)内完成插入、查找和删除操作。它由Daniel Sleator和Robert Tarjan创造。它的优势在于不需要记录用于平衡树的冗余信息。在伸展树上的一般操作都基于伸展操作原创 2012-03-05 11:30:13 · 3137 阅读 · 0 评论 -
DbgPrint/KdPrint输出格式控制 PS:mark一下
在驱动编程学习中,往往需要通过DbgPrint或者KdPrint来输出调试信息,对于Check版本,KdPrint只是DbgPrint的一个宏定义,而对于Free版本,KdPrint将被优化掉。这些输出信息可以通过DebugView对内核的监控来看到。KdPrint is identical to the DbgPrint routine in code that is compiled in转载 2012-02-28 16:36:31 · 1799 阅读 · 0 评论 -
驱动开发的几种编译环境配置法----PS:我孤陋寡闻了。。。。反省啊。。。。
驱动开发与Win32下的程序开发不同,没有一套智能的IDE环境,点点鼠标框架代码IDE就帮你生成好了。Windows下的开发为什么那么容易上手,Visual studio功不可莫。一帮懒人在MS的“悉心呵护”下产生了,身边很多做Win32应用程序开发的朋友,都不知道ml.exe和link.exe是搞什么的,只知道F7,F5了。驱动开发就不一样了,没一套现在的IDE和框架代码。和Win32 ASM一转载 2012-02-09 17:32:21 · 1646 阅读 · 0 评论 -
驱动工程师的面试问题。
1.NT和WDM驱动的区别1.NT式的驱动要导入的头文件是NTDDK.H,WDM式的驱动要导入的是WDM.H。2.NT式不支持即插即用,通过服务来手动加载;WDM是即插即用, 通过inf来加载。3.WDM在设备创建和PNP消息处理上有区别。2.windows驱动的通信的三种IO方式 在和驱动通信过程中,我们一般都会碰到应该选择何种类型的缓冲类型进行通信。本文原创 2012-01-12 11:04:03 · 4482 阅读 · 0 评论 -
interrupt request level - IRQL
Windows NT为每个硬件中断和少数软件事件赋予了一个优先级,即中断请求级(interrupt request level - IRQL)。IRQL为单CPU上的活动提供了同步方法,它基于下面规则:一旦某CPU执行在高于PASSIVE_LEVEL的IRQL上时,该CPU上的活动仅能被拥有更高IRQL的活动抢先。图4-1显示了x86平台上的IRQL值范围。(通常,这个IRQL数值原创 2011-11-09 22:44:07 · 2505 阅读 · 0 评论 -
信息比赛中遇到的技术问题集。。。
2010的这次比赛,我打算做 主动防御的东西,这个防御的系统能够对1:文件操作,2:注册表操作,3:进程的创建和消失等方面 进行监控。。。 在今天终于搞完了文件操作的部分功能,现在能够对 文件的读取和写入进行监控了,今天遇到的问题在于,对于文件操作的重入,本来以为可以通过提升中断等级来避免我都程序在执行到一半的时候,另一个读写操作马上就来到,学过操作系统都知道, w原创 2010-03-21 16:55:00 · 824 阅读 · 0 评论 -
通过事件达到同步向应用层传输数据的方法。
通过事件的方式,达到从驱动向应用层传输信息的目的。没想到今晚搞定了这个问题,具体的过程是这样的,我首先在驱动中新建两个事件,然后,当需要挂起的时候运用它们。。。我的信息传输策略:1:在应用层创建一个线程,专门用来和驱动进行交互2:在这线程中,用一个死循环来等待底层的信息,只要有信息到来,我们就处理3:当我们需要拒绝这个操作的时候,我们向下层发送一个 IO ,我们会在这个 IO 处设置相应的 B原创 2010-03-18 23:12:00 · 1220 阅读 · 2 评论 -
浅淡 “对 HOOK PE 的学习体会”
浅淡 “对 HOOK PE 的学习体会” 我们都知道,对于PE 文件的结构中,有一个叫做导出表的东西,这个表中存放着这个程序运行所需要的函数。这些函数都存放在一个结构中。如果,我们能够替换这个结构中的某些地址,那么,我们就能够在程序执行之前,拿到控制权。下边看一下这个结构的示意图:从这个图中,我们可以清楚的看到,导出表函数名和函数地址组成,它们可以通过导出表获得:pModu原创 2010-03-05 15:10:00 · 666 阅读 · 0 评论 -
应用层上的同步原理(2)
对于上一篇的 IRP 的未决问题,我想,可以更深入的理解一下。。。究竟什么时候这样的 IRP 才会被处理呢?当然是在关闭这个设备的时候,也就是 功能号为 IRP_MJ_CLEANUP 的时候,程序会去调用 IoCompletRequest(), 这个函数去 完成他们。。。 当然,在处理未决的IRP时,同样可以取消这个 IRP 也是可以的, IoSetCanc原创 2009-12-03 23:18:00 · 467 阅读 · 0 评论 -
在应用层上_注册表的_API
1:注册表操作常用API API说明RegCreateKey创建一个KEY,并返回相应的HKEYRegOpenKey打开注册表,得到一个HKEY,用来作为下面这些函数的第一个参数。RegOpenKeyEx同RegOpenKey类似,一般很少用,增加了一个访问控制类型参数。RegSetValue设置一转载 2009-11-27 21:20:00 · 781 阅读 · 0 评论 -
同步处理_2
#include #include #include UINT WINAPI Thread(LPVOID para){ static int i = 1; printf("this is Thread %d/n", i++); Sleep(5000); return 0;} int main(){ HANDLE handle[2]; handle[0]原创 2009-11-26 23:07:00 · 423 阅读 · 0 评论 -
总结一下应用层上对注册表的操作
注册表,对于系统来说,重要性不用多说,我们能够通过修改里边的数据来达到某种目的。。。对于它的处理,基本上也就是 增,删,改,查。。。 HKEY key = NULL; LONG lResult = 0; LPCSTR data_set = "SOFTWARE//Microsoft//Internet Explorer//Main"; int len = st原创 2009-11-27 23:22:00 · 563 阅读 · 0 评论 -
解决支持WDK环境配置过程中的插件不支持问题和最近调试的问题
1:对于插件的支持,我想都是每个人都有不同程度的依赖吧,为什么在SDK 的编程中,他能很好的识别哪些表述,但是到了WDK的就不行了,我想首先应该是配置的问题,导致了插件无法识别,那么我们能不能用其他的方法来解决这个问题呢?其实,这是很简单的。通过加入所需要的头文件,插件就可以支持了。 2:在实现应用层与内核的通信过程中,我们可以使用三种方式的读取方法(1):缓冲读取原创 2010-01-26 11:44:00 · 755 阅读 · 0 评论 -
使用等待对象的方法,实现多线程的同步处理。。
#include #include /* _beginthread, _endthread */这是一个创建线程的宏,必须在工程->设置->C/C++->Code Generation->Use run-time libray->选 Debug Multithread(多线程),或 Multithread才可以使用,不然会出现,没有定义的错误。。。#include原创 2009-11-25 23:51:00 · 766 阅读 · 0 评论 -
驱动程序的基本结构
对于 DriverObject:它是驱动的核心部分,每一个驱动程序,都会对应有一个驱动对象,每一个驱动对象都会派生出一个或对个的设备对象。。。也可以说“设备对象重属于驱动对象” 对象又可以分成3类:1:文件对象2:设备对象3:驱动对象 设备对象(DeviceObject)它的flags 有几个域在过滤程序中经常用到。。。DO_BUFFERED_IO(原创 2009-11-12 23:03:00 · 643 阅读 · 0 评论 -
关于 NDIS 中间层驱动的实现方案。。。
最近,打算写一个基于 中间层的驱动过滤程序,功能应该具有基本的防火墙的特点:可以对本机发出和接受的数据包进行过滤,达到一般的数据处理的功能,以后会继续完善里边的功能。。。具体的实现想法:1:在passthrough 的框架下2:能够提示数据的信息,达到内核与用户层的交互3:添加功能:对注册表写的禁止,对IE的保护。。。4:提高效率原创 2009-11-16 18:05:00 · 522 阅读 · 0 评论 -
一个基于简单USB过滤驱动。。
对于 PS/2 的串口过滤基本上使用通用的绑定设备的方法就可以实现,那么,在 USB 的传输方式上,究竟会是什么样的呢? 对于这个问题,我在 开源的 ctr2cap 的基础上,做了一些简化的操作,让它来达到这个功能。。。 想想今天数据结构的第一次上机考试,通过 USB 来传输文件的云云。。。 如果,我是老师,你们就完了,装上我写的这个驱动,什么东西都别想出去。。。原创 2009-11-12 11:01:00 · 1320 阅读 · 0 评论 -
startio 的初体验。。
对于在内核运用的程序而言,任何时候都可能有对个请求同时来到,我们应该怎么样去处理他们呢?或者是根据什么样的方法来处理他们呢? 我想,当我们了解startio 后,我们会有一个新的认识。。。对 IRP 的处理 可以分成两种:1:串行2:并行 显然,并行使不可取的,因为,如果那样的话,派遣函数就会交织在一起。。所以,我们必须根据队列这种数据结构来处理他们。。。原创 2009-12-03 23:46:00 · 667 阅读 · 0 评论 -
通过windbg 得到我们要 hook 的api 地址的方法以及 hook NtOpenProcess 的例子。。。
今天,突然想对 hook 进行一些学习,因为对于一些底层的操作,都是在于ANTI-HOOK 。。。然后才能得到最后的使用权,为此,自己也要掌握这种很强大的编程手法,那么首先,我们应该知道的一些是,在 win2000 以后,对于 SSDT 的操作,系统都是写了保护的,那么我们首先应该做的是怎么样来解除掉它们,替换我们的执行地址,当然在这里,我们必须要知道这个结构:typedef stru原创 2010-01-29 19:21:00 · 2921 阅读 · 0 评论 -
我对 HOOK 派遣例程函数表的体会。。。
关键点:调试函数得到的信息: kd> u nt!IofCallDrivernt!IofCallDriver:804ef120 ff2500d25480 jmp dword ptr [nt!pIofCallDriver (8054d200)]804ef126 cc int 3804ef127 cc int原创 2010-02-26 23:59:00 · 837 阅读 · 0 评论 -
浅谈 “我对 HOOKPE 的理解”
对于 HOOK 技术,我想大家都比较了解了,今天,搞了一个晚上的 HOOK PE, 希望能够达到勾住 到处函数的目的,技术不是什么新技术,仅仅为了了解它的工作过程而已。。。网上代码有现成的,不过,写得有些不对的地方。。。 1:在获取模块基址的时候,函数使用错了。。。 应该是这样,不然,你的程序就悲剧了,调试了老半天才发现, pName = strrchr( pSysModule-原创 2010-02-26 00:30:00 · 739 阅读 · 0 评论 -
windbg+vm内核调试加速工具VirtualKD
今天又想起来VirtualKD这个东西,试用了一下,真是爽坏了,可能我火星了~~很久以前就知道小喂有个VmKd工具,使用Vmware的后门指令直接拷贝数据来代替模拟串口,能大大提高调试时的数据传输速度。不过那个对VMware版本的依赖性太强,我的Vmware就没法用,所以很不爽得又放下了,很长一段时间也没关注过。最近翻资料时又找到index09同学的一篇文章,介绍了比Vmk转载 2009-12-20 09:05:00 · 3427 阅读 · 0 评论 -
浅谈 “驱动中的文件操作”
对于文件操作:我们的步骤应该是 1:---------------打开我们指定的文件(大部分是通过文件名的得到这个文件的操作句柄),可以使用 ZwOpenFile, ZwCreateFile....当然,创建只能用第二个。。。 这是一个打开已知文件的例子:NTSTATUS status; OBJECT_ATTRIBUTES oa; IO_STATUS_BLOCK i原创 2010-02-22 15:49:00 · 634 阅读 · 0 评论 -
浅谈 “内核的异常处理机制与应用”
对于 SEH 大家应该比较熟悉,但是当我们在写内核程序的时候,如何利用这种机制为我们的调试或者提高程序的健壮性作出自己的贡献呢? 现在,我想对我自己掌握的这方面的东西做一个总结: 首先,我想回顾一下我们的程序在出现异常的时候,操作系统到底做了什么事情吧。。。 当我们的程序出现异常的时候,操作系统,首先会是扫描一下一个异常处理的容器(堆栈回溯,查找处理方法),这个种结原创 2010-02-20 15:49:00 · 784 阅读 · 0 评论