WQXNETQIQI
驱动大牛
驱动大牛
  • 注册日期2006-06-12
  • 最后登录2010-10-26
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望1076点
  • 贡献值0点
  • 好评度895点
  • 原创分1分
  • 专家分0分
阅读:4788回复:0

[恢复]如何通过一个先启动的驱动程序阻止后来的驱动程序加载。

楼主#
更多 发布于:2007-01-02 21:40
  这是在 2006年12月16日 18:31:41 GMT 检索到的 http://bbs.driverdevelop.com/simple/index.php?t116323.html 的 G o o g l e 缓存内容。
G o o g l e 已先预览各网页,拍下网页的快照存档。
这网页可能有更新的版本,请按此查看最新版。
本缓存网页可能引用了已经不存在的图片。单击此处,只查看缓存文本。
请使用网址 http://www.google.com/search?&q=cache:kvIq8XVjc-cJ:bbs.driverdevelop.com/simple/index.php%3Ft116323.html+%E5%A6%82%E4%BD%95%E9%80%9A%E8%BF%87%E4%B8%80%E4%B8%AA%E5%85%88%E5%90%AF%E5%8A%A8%E7%9A%84%E9%A9%B1%E5%8A%A8%E7%A8%8B%E5%BA%8F%E9%98%BB%E6%AD%A2%E5%90%8E%E6%9D%A5%E7%9A%84%E9%A9%B1%E5%8A%A8%E7%A8%8B%E5%BA%8F%E5%8A%A0%E8%BD%BD&hl=zh-CN&gl=cn&ct=clnk&cd=1 链接此页或将其做成书签。


Google 和网页作者无关,不对网页的内容负责。
这些搜索字词都已标明如下:  如何  通过  一个  先  启动  驱  动  程序  阻止  后来  加  载  
 
 

--------------------------------------------------------------------------------


驱动程序开发网技术社区 -> Kernel Mode discussion and Soft Driver -> 如何通过一个先启动的驱动程序阻止后来的驱动程序加载。  登录 -> 注册 -> 回复主题 -> 发表主题
 



guaiguaiguan 2006-08-18 15:30
我想做一个驱动程序,把它的Goup设置成System Bus Extender,以便让它在其他驱动程序加载前加载。我希望在这个驱动程序driverentry入口代码中,能够递归删除另外一个驱动程序的入口键值。
比如L"\\Registry\\Machine\\System\\CurrentControlSet\\d347bus",结果启动后发现,键的确被删掉了,但是d347bus.sys (虚拟光驱daemon的驱动)还是被加载了。因为可以通过softice的mod命令提供的加载模块列表知道这一些。
我倒是想到在驱动中直接调用zw*函数删除该文件,只是不知道我的驱动加载太靠前,这些文件操作函数是否能够使用。不过我还没有试
聪明的回帖者,你有什么高见,能够帮我实现这个目标。这里的d347bus驱动group为Boot Bus Extender。应该没有我加载的顺序靠前。
 

guaiguaiguan 2006-08-18 16:54
太没面子了,没人理我。
试了一下删除文件,没有任何反应,也不蓝屏。路径名无论写成
L“\\??\\c:\\windows\\system32\\drivers\\d347bus.sys"
还是
L“\\??\\SystemRoot\\system32\\drivers\\d347bus.sys"
都不行?启动后,文件依旧在,几度夕阳红,真是见鬼了
 

guaiguaiguan 2006-08-18 17:02
如果把该驱动配置的group项从注册表中去掉,d347bus.sys能够成功删除,否则d347bus.sys没有删除,不过无论d347bus.sys是否被删除,d347bus.sys都被加载在先,也就是该模块已经被加载到内存中了,这是我不希望看到的。
 

guaiguaiguan 2006-08-18 17:06
年纪大了,看花眼了,d347bus驱动比我的驱动先加载,我的goup为System Bus Extender。
System Reserved
Boot Bus Extender
System Bus Extender
SCSI miniport
Port
Primary Disk
SCSI Class
SCSI CDROM Class
FSFilter Infrastructure
FSFilter System
FSFilter Bottom
FSFilter Copy Protection
FSFilter Security Enhancer
FSFilter Open File
FSFilter Physical Quota Management
FSFilter Encryption
FSFilter Compression
FSFilter HSM
FSFilter Cluster File System
FSFilter System Recovery
FSFilter Quota Management
FSFilter Content Screener
FSFilter Continuous Backup
FSFilter Replication
FSFilter Anti-Virus
FSFilter Undelete
FSFilter_Activity_Monitor
FSFilter Top
Filter
Boot File System
Base
Pointer Port
Keyboard Port
Pointer Class
Keyboard Class
Video Init
Video
Video Save
File System
Event Log
Streams Drivers
NDIS Wrapper
COM Infrastructure
UIGroup
LocalValidation
PlugPlay
PNP_TDI
NDIS
TDI
NetBIOSGroup
ShellSvcGroup
SchedulerGroup
SpoolerGroup
AudioGroup
SmartCardGroup
NetworkProvider
RemoteValidation
NetDDEGroup
Parallel arbitrator
Extended Base
PCI Configuration
 

wowocock 2006-08-18 23:14
如何通过一个先启动的驱动程序阻止后来的驱动程序加载
创建和他一样的符号连接.
或者HOOK加载驱动路径上的任何位置,监控驱动的加载,你在他前面启动了还有什么做不了的??
 

guaiguaiguan 2006-08-19 09:07
如何通过一个先启动的驱动程序阻止后来的驱动程序加载
创建和他一样的符号连接.
好像无法阻止,创建相同的符号连接,只对那些设计比较规范的驱动程序有效,比如它们发现设备和符号连接名称已经创建,就直接退出。因为设备和符号连接只是通讯用的,不用设备和符号连接,驱动尽管不能通信但拦截部分(ssdt hook)一样能够正常运行。由于有些程序不会检查iocreatedevice iocreatesymbollink的返回值。如果它们不管设备是否创建继续运行,或者干脆不创建设备和符号表,这种机制就会失效。
聪明的公鸡,我说得对吗?
 

guaiguaiguan 2006-08-19 09:13
我没有怀疑hook的有效性,hook ntcreatefile和 ntopenfile函数肯定能够阻止系统加载后来的驱动程序。我查看了一些流氓软件的驱动程序,发现它们在驱动加载上并不特别靠前,这是否意味着hook机制,对于
System Reserved
Boot Bus Extender
System Bus Extender
此时能否使用.
 

guaiguaiguan 2006-08-19 09:15
不过可以肯定的是经过验证,通过把这些驱动的注册键删除是可以成功阻止这些后来的驱动加载的.不过对于一些过滤驱动而言,比如磁盘过滤,一旦阻止其加载,能否启动起来系统,就看运气了
 

bfire 2006-08-20 10:27
你的这个驱动是如何安装的?
 

bfire 2006-08-20 10:28
驱动名和符号名全数字的可行?
 

AllenZh 2006-08-20 22:10
QUOTE:
引用第7楼guaiguaiguan于2006-08-19 09:15发表的“”:
不过可以肯定的是经过验证,通过把这些驱动的注册键删除是可以成功阻止这些后来的驱动加载的.不过对于一些过滤驱动而言,比如磁盘过滤,一旦阻止其加载,能否启动起来系统,就看运气了

肯定不会是你说的“看运气”,如果你测试结果真地如此,我相信是你的驱动写的不够好
 

guaiguaiguan 2006-08-22 09:00
QUOTE:
引用第10楼AllenZh于2006-08-20 22:10发表的“”:
肯定不会是你说的“看运气”,如果你测试结果真地如此,我相信是你的驱动写的不够好

当然我会尽量保证先启动的驱动程序能够把后阻止驱动程序注册信息摘除干净。
 

bfire 2006-08-22 09:28
你是不是想对付 3721 这些流氓软件??
我现在来学这个就是想干掉3721这些垃圾。
 

guaiguaiguan 2006-08-22 17:34
做流氓软件挺好的,好羡慕啊. 上海很棒信息技术有限公司的很棒小秘书为公司带来了滚滚财运。公司才10几个人,运营3个月,创收2000万,全年目标8000万。虽然只有十几个人,但是它们的客户端占据和控制上千万台电脑的桌面。这些电脑就像勤勤恳恳的老黄牛在默默地为它们创造财富的神话。
 

guaiguaiguan 2006-08-22 17:38
其实做这样的工具很简单。你只需装一套最新的360safe,然后再装一个3721助手,用360safe来杀,这样Windows\system32\drivers目录下,会生成一个pnp*.sys文件。然后你用idapro对这个驱动反汇编,所有的实现一目了然,跟开源差不多。而且文件特别小,不到100行代码。然后你可以在它的基础上稍作修改即可。
  最近好像还做了改动,增加了注册表键的递归删除。
呵呵,一般人我不告诉他。
 

bfire 2006-08-22 17:52
我这个我清楚,只要自己的driver先于3721的,然后删除它的service键,基本上就行了。

写流氓软件,占领用户电脑,不时的去点击一些网站就可赚钱吗?我很想知道他们的运营模式。,然后我们也可这样赚钱。。^_^。目前流氓软件不算病毒,所以不违法!!
 

tooflat 2006-08-22 18:12
貌似start=0的驱动是ntldr加载的,而且ntldr是先获取所有该类驱动的列表,再计算各个驱动的加载顺序再加载的,所以即使你的驱动先加载,也没法禁止其他驱动加载,不过让其他驱动不能正常工作,倒是有可能。
 

wowocock 2006-08-23 08:47
估计专做杀流氓软件的东西,收益也会不少......
 

doskey 2006-08-23 08:52
QUOTE:
引用第16楼tooflat于2006-08-22 18:12发表的“”:
貌似start=0的驱动是ntldr加载的,而且ntldr是先获取所有该类驱动的列表,再计算各个驱动的加载顺序再加载的,所以即使你的驱动先加载,也没法禁止其他驱动加载,不过让其他驱动不能正常工作,倒是有可能。


何以见得?



QUOTE:
引用第17楼wowocock于2006-08-23 08:47发表的“”:
估计专做杀流氓软件的东西,收益也会不少......


专杀流氓软件的目前都是免费的……
还是做流氓软件比较赚钱  
 

guaiguaiguan 2006-08-23 08:54
QUOTE:
引用第16楼tooflat于2006-08-22 18:12发表的“”:
貌似start=0的驱动是ntldr加载的,而且ntldr是先获取所有该类驱动的列表,再计算各个驱动的加载顺序再加载的,所以即使你的驱动先加载,也没法禁止其他驱动加载,不过让其他驱动不能正常工作,倒是有可能。

不对啊,360safe就是这么干的。我测试了一下我的驱动,好像也能正常工作啊?因为我发现被拦劫的驱动程序的设备符号名称没有创建,在系统的模块列表中,也没有这个模块的名称。
 

guaiguaiguan 2006-08-23 09:01
除了删除注册表注册键之外,我觉得360safe采用删除文件的方法也不错,因为其驱动加载在先,其他被阻击的驱动加载在后。先行加载的驱动除了可以删除其使用的注册键外,还可以直接查询其对应的磁盘映像文件,实现物理删除。不过要选择删除的时机,360safe是通过实现IoRegisterDriverReinitialization,判断\\SystemRoot目录能够访问时,才开始实施追杀令。
 

bfire 2006-08-23 14:56
ZZ
**************************************************************************
事实上,Windows 2000的引导过程是从安装时候就已经开始的。
那我们首先从windows 2000的安装说起。
当windows 2000 setup运行时,它向硬盘上写入MBR(主引导记录),同时在这个磁盘驱动器的第一个可引导分区(就是我们在fdisk后激活的分区)写入引导扇区,引导扇区的内容根据不同的文件系统格式而变化(FAT或 者是NTFS)。如果你的机器上曾装有MS操作系统并建立了引导扇区的话,windows 2000 setup将检测它要覆盖的引导扇区是否有效,如果有效的话,windows 2000 setup安装程序将把引导扇区的内容复制到这个分区的根目录中的文件bootsect.dos中。Setup程序在写完引导扇区后,将把windows 2000所用的文件拷贝到硬盘,包括两个引导文件Ntldr和Ntdetect.com。另外,setup还会在引导分区的根目录中建立引导菜单文件boot.ini。
例:
[boot loader]
timeout=3
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows "
multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="Windows Server 2000" /fastdetect

这是我的机器上的boot.ini文件,该内容显示装了两个操作系统,win98和win2000,后面的那个参数/fastdetect最常见,是安装系统时默认的,它的作用是使ntdetect忽略秉性和串行设备的枚举。Boot.ini文件中的相关参数还有很多,各有不同的功能,因为与本文没太大关系,所以不作具体介绍,有兴趣的朋友可以到网上找找有关资料。

Windows 2000的启动:
当你按下机器上的power键,计算机就开始启动了,首先是上电自检,通过后bios引导计算机去读取硬盘上的MBR,根据MBR中的信息,找到引导分区,将引导分区内的引导扇区的代码读入内存并把控制权交给该代码。引导扇区代码的作用是向Windows 2000提供磁盘驱动器(硬盘)的结构和格式信息并且从磁盘根目录中读取Ntldr文件,在引导扇区代码将Ntldr加载到内存后,它把控制权交给Ntldr的入口点。如果引导扇区代码在根目录中没有找到Ntldr文件的话,若文件系统为FAT格式,则显示:“Boot:无法找到Ntldr”,若引导文件系统是NTFS格式,则显示:“NTLDR丢失”。然后,Ntldr使用内建的文件系统代码从根目录读取boot.ini文件(Ntldr内建代码与引导扇区文件系统代码不同的是,Ntldr文件系统代码可以读取子目录)。此时,Ntldr清除屏幕,如果boot.ini中存在不止一种引导选项,则显示引导选择菜单,如果在boot.ini制定的超时范围内未有任何动作的话,Ntldr会选择默认的选项。引导选项确定后,Ntldr加载和执行Ntdetect.com(这是一个使用系统bios进行查询计算机基本设备和设置信息的16位实模式程序)。然后,Ntldr开始清除屏幕并显示:“Starting Windows……”进度栏。这个进度栏保持空白,直到Ntldr开始加载引导驱动程序(假如有100个引导驱动程序,则每加载一个文件,进度条增加1%)。在进度条的下面是信息:“For troubleshooting and advanced startup options for windows 2000 , press F8 .”如果此时按下F8键,会出现高级启动菜单,包括:已知的最近正确模式(last known good),安全模式(safe mode),调试模式(debug mode)等等等等。
此后,Ntldr加载合适的内核和HAL映像文件(缺省为Ntoskrnl.exe和HAL.dll),读入SYSTEM注册表hive文件(hive文件是一种包含注册表子树的文件)以确定该加载哪些引导驱动程序,加载引导驱动程序,为Ntoskrnl.exe的执行准备CPU寄存器。之后,Ntldr调用Ntoskrnl.exe并由它开始初始化执行程序子系统并引导系统-启动(system-start)设备驱动程序,在一系列的初始化工作完成后Ntoskrnl.exe为系统本机应用程序作准备并运行smss.exe。
smss的主要任务是:初始化注册表,创建系统环境变量,加载Win32子系统(Win32k.sys)的内核模式部分,启动子系统进程Crss,启动登陆进程winlogon。然后,winlogon开始执行其启动步骤,如创建初始的窗口和桌面对象等等。然后它创建服务控制管理器(SCM)进程(Winnt\System32\Services.exe),它加载所有的标记为自动启动(auto-start)的服务程序和设备驱动程序和本机安全验证子系统(Lsass)进程(Winnt\system32\Lsass.exe)。当一切加载成功且用户在控制台成功登陆后,SCM则认为系统引导成功,注册表中 已知最近正确配置(HKLM\SYSTEM\select\LastKnownGood)由\CurrentControlSet替代。反之,如果用户在引导的时候选择高级菜单中的已知最近正确模式(LastKnownGood)或者加载时驱动程序返回一个严重的或者关键的错误,系统会以LastKnownGood的值作为CurrentControlSet 的值。
之后,我们便看到了熟悉的桌面。至此,windows 2000的引导过程结束。
限于篇幅,本文只简单的讲述一下windows 2000操作系统引导的大体过程,一些细节方面的东东请看我整理的其他windows 2000操作系统方面的文章。
 

bfire 2006-08-23 14:58
3.加载内核阶段

在加载内核阶段中,NTLDR将加载NTOKRNL.EXE内核程序,然后NTLDR将加载硬件抽象层(HAL.dll),接着系统将加载注册表中的“HKEY_MACHINESystem”键值,这时NTLDR将读取“HKEY_MACHINESystemselect”键值来决定哪一个ControlSet将被加载。所加载的ControlSet将包含设备的驱动程序以及需要加载的服务。再接着NTLDR加载注册表“HKEY_LOCAL_MACHINESystemservice”下的start键值为0的底层设备驱动。当ControlSet的镜像CurrentControlSet被加载时,NTLDR将把控制权传递给NTOSKRNL.EXE,至此引导过程将结束。

小提示:如果在启动的时候按F8键,那么我们将会在启动菜单中看到多种选择启动模式,这时NTLDR将根据用户的选择来使用启动参数加载NT内核,用户也可以在Boot.ini文件里设置启动参数。
 

doskey 2006-08-23 15:36
按照21、22楼的文章所说的,ntldr会去加载hive,那就是说逆向分析ntldr就可以完全取得hive的结构?
另外,引导结束后的实时模式向保护模式切换是由谁做的?ntldr?
 

DrSmart 2006-08-24 09:57
启动到桌面上那个360safe就停止了,名字是pnpxxx的随机的
 

wangjianfeng 2006-08-29 18:24
过要选择删除的时机,360safe是通过实现IoRegisterDriverReinitialization,判断\\SystemRoot目录能够访问时,才开始实施追杀令。
=================================

我没看到360调用上面的函数,好像是直接就删文件和注册表,我看它的组是 system bus extender, 在这个组中,就可以使用 zwDeleteFile 来删除文件了??? zwDeleteFile 是直接由 Ntoskrnl.exe 直接导出的??? 大牛们教育我.
 



查看完整版本: [-- 如何通过一个先启动的驱动程序阻止后来的驱动程序加载。 --] [-- top --]



Powered by PHPWind v4.3.2 Code ? 2003-05 PHPWind
Time 0.035440 second(s),query:4 Gzip enabled

You can contact us

最新喜欢:

alenyangalenya...
驱动开发者 呵呵
游客

返回顶部