阅读:2256回复:17
ZwReadFile在过滤驱动中发生意外.挑战啊!!!大牛进
DbgPrint信息.
程序跳过所有的无扩展名以及大小小于1024字节的文件的打开操作 Size:56Byte,The file is:\Device\HarddiskVolume1\WINDOWS\System32\Config\SECURITY Skip................ Size:56Byte,The file is:\Device\HarddiskVolume1\WINDOWS\System32\Config\SOFTWARE Skip................ Size:54Byte,The file is:\Device\HarddiskVolume1\WINDOWS\System32\Config\SYSTEM Skip................ Size:55Byte,The file is:\Device\HarddiskVolume1\WINDOWS\System32\Config\DEFAULT Skip................ Size:51Byte,The file is:\Device\HarddiskVolume1\WINDOWS\System32\Config\SAM Skip................ Size:55Byte,The file is:\Device\HarddiskVolume1\WINDOWS\System32\Config\SAM.LOG Size:60Byte,The file is:\Device\HarddiskVolume1\WINDOWS\System32\Config\SOFTWARE.LOG Our Waitting Thread is outside of system sleep team. File size:1024 File Size Get $$$ :1024 Thread changed the value,now is:19E4 Size:58Byte,The file is:\Device\HarddiskVolume1\WINDOWS\System32\Config\SYSTEM.LOG Size:59Byte,The file is:\Device\HarddiskVolume1\WINDOWS\System32\Config\DEFAULT.LOG Size:60Byte,The file is:\Device\HarddiskVolume1\WINDOWS\System32\Config\SECURITY.LOG Our Waitting Thread is outside of system sleep team. File size:1024 File Size Get $$$ :1024 Thread changed the value,now is:19E4 Our Waitting Thread is outside of system sleep team. File size:1024 File Size Get $$$ :1024 Thread changed the value,now is:19E4 Our Waitting Thread is outside of system sleep team. File size:1024 File Size Get $$$ :1024 Thread changed the value,now is:19E4 Our Waitting Thread is outside of system sleep team. File size:1024 File Size Get $$$ :1024 Thread changed the value,now is:19E4 *** Fatal System Error: 0xc0000218 (0xE184C790,0x00000000,0x00000000,0x00000000) STOP: c0000218 Unknown Hard Error Unknown Hard ErrorBreak instruction exception - code 80000003 (first chance) 每次ZwReadFile到:\Device\HarddiskVolume1\WINDOWS\System32\Config\目录下的文件时.系统就Stop :0x218 IoCreateFile代码: __try { InitializeObjectAttributes( &objectAttributes, &fileNameUnicodeString, OBJ_KERNEL_HANDLE | OBJ_CASE_INSENSITIVE, NULL, NULL ); status = IoCreateFile(&hFileHandle, SYNCHRONIZE | FILE_READ_DATA, &objectAttributes, &ioStatus, 0, FILE_ATTRIBUTE_NORMAL, //文档属性 FILE_SHARE_READ | FILE_SHARE_WRITE, FILE_OPEN, FILE_SYNCHRONOUS_IO_NONALERT | FILE_NON_DIRECTORY_FILE, NULL, 0, CreateFileTypeNone, NULL, 0); *hFile = hFileHandle; } __except(1) { *hFile = NULL; status = STATUS_OBJECT_TYPE_MISMATCH; } ZwReadFile代码: __try { status = ZwReadFile(hFile, NULL, NULL, NULL, &ioStatus, PEBuffer, 64, &byteOffset, NULL); DbgPrint("READ Status:%X,File:%X,%X\n",status,PEBuffer[0] ,PEBuffer[1]); } __except(1) { status = STATUS_ROUTIE_FAIL; } 请大牛指点... |
|
沙发#
发布于:2007-02-13 05:33
引用第16楼wowocock于2007-02-12 12:22发表的“”: 太可怕了,以后离wowocock要远点~ |
|
|
板凳#
发布于:2007-02-12 12:22
对付老V之类的最好是全HOOK,从FDS到磁盘驱动到直接IO,全HOOK,不然搞不定的,嘿嘿......
![]() |
|
|
地板#
发布于:2007-02-11 19:01
我的方法绕过FSD读取文件~我懒不行么~
哈哈~ |
|
|
地下室#
发布于:2007-02-11 13:33
问题貌似解决了.判断share,如果是0就不读了
好象只能这样.v大能说说你的具体方法不 |
|
5楼#
发布于:2007-02-11 12:13
引用第11楼killvxk于2007-02-11 12:07发表的“”: 后面这句不太明白.去内存里读?可是这个时候系统才开始OPEN文件... |
|
6楼#
发布于:2007-02-11 12:11
引用第10楼killvxk于2007-02-11 12:04发表的“”: 强.问题明白了!谢谢!. 必须做到0. HIVE?我MJ_Create时下发IRP可以么? |
|
7楼#
发布于:2007-02-11 12:07
最好绕过ZwReadFile去读取,其实最好还是自己在内存里在线读取HIVE~
|
|
|
8楼#
发布于:2007-02-11 12:04
系统读的时候,你要是读了就蓝了~
boot=3的驱动只要irql正确基本没有什么问题~ boot=0的驱动,这个很难控制有时候不蓝,有时候蓝~ boot=1的驱动,偶尔蓝~ |
|
|
9楼#
发布于:2007-02-11 12:01
线程确实是在passive level
|
|
10楼#
发布于:2007-02-11 11:08
字符串倒序查找.
我用来找点(.)的 郁闷.这个东西很耗资源. LONG FindString(PWSTR s ,WCHAR c) { LONG i; LONG l = 0; LONG ol = 0; for(i=wcslen(s)-1;i>=0;i--) { if(s == 0x5C) { l = i; break; } } if(!l) { return -1; } ol = l; for(i=wcslen(s)-1;i>l;i--) { if(s == c) { l = i; break; } } if(ol == l) { return -1; } return l; } |
|
11楼#
发布于:2007-02-11 10:39
后来想一想,就算没有SHARE_READ.我们也是在他MJ_CREATE时操作.此时它的Irp被挂起了
应该不存在无权限的问题? 线程是驱动入口启动的. |
|
12楼#
发布于:2007-02-11 09:54
引用第5楼Odyssey于2007-02-10 23:17发表的“”: 这个东西是Boot启动. 如果是对IRQL有要求.我就不明白为什么前面对.Ntdll.dll,一大堆sys文件的读都正常呢? 除非系统加载config/sam等文件时做了什么? -------------------------- 我的看法 1、不大可能是IRQL的问题。 2、当我过滤掉.log文件无扩展名文件时,一切正常。就是字符串处理慢死了。开销太大。这里再次证明了与IRQL无关?。 3、我觉得挂钩文件系统是最爽的.嘿嘿.这几天我也是天天在挂。跟老V学习啊 4、谢谢几位大牛关注。我随后贴上字符串处理的代码。在MJ_CREATE消息中处理真郁闷、 5、怎么判断是否有FILE_READ_DATA权限。在IoCreateFile,也就是说。系统打开a.txt。我们怎么才能判断FILE_SAHRE_READ?如果Routie我看只能拆它的IO_STACK_LOCATION了 6、很奇怪。这个东西是做什么的?(ZwYieldExecution) STACK_COMMAND: kb FOLLOWUP_IP: nt!KeRegisterBugCheckReasonCallback+77c 808213fa e85d6a0000 call nt!ZwYieldExecution+0x630 (80827e5c) 7、会不会是系统没有SHARE_READ然后我们尝试open...? |
|
13楼#
发布于:2007-02-10 23:17
引用第3楼killvxk于2007-02-10 23:09发表的“”: 霸王硬上弓。。。 ![]() |
|
14楼#
发布于:2007-02-10 23:10
我现在天天挂钩~
|
|
|
15楼#
发布于:2007-02-10 23:09
引用第2楼Odyssey于2007-02-10 23:07发表的“”: 解决方法钩上那个secpXXX_handle |
|
|
16楼#
发布于:2007-02-10 23:07
ZwReadFile必须在IRQL=passive level才能安全的调用,
其他的IRQL上如果出现page fault是不能用try-except来处理。 |
|
17楼#
发布于:2007-02-10 16:57
!analyze -v信息
MODULE_NAME: nt FAULTING_MODULE: 80800000 nt DEBUG_FLR_IMAGE_TIMESTAMP: 42250a1d DEFAULT_BUCKET_ID: WRONG_SYMBOLS BUGCHECK_STR: 0xC0000218 LAST_CONTROL_TRANSFER: from 808213fa to 8084fda8 STACK_TEXT: WARNING: Stack unwind information not available. Following frames may be wrong. fbd07464 808213fa 00000003 00000000 00000100 nt!DbgBreakPointWithStatus+0x4 fbd07844 80821925 0000004c c0000218 fbd078a0 nt!KeRegisterBugCheckReasonCallback+0x77c fbd07864 8097434e 0000004c c0000218 fbd078a0 nt!KeBugCheckEx+0x1b fbd07a18 8093233e c0000218 00000001 00000001 nt!RtlCompressBuffer+0x250a fbd07bc4 809325c2 c0000218 00000001 00000001 nt!ExRaiseDatatypeMisalignment+0xaa fbd07c34 80944f20 c0000218 00000001 00000001 nt!ExRaiseHardError+0x13e fbd07dac 808eda06 00000001 00000000 00000000 nt!LsaDeregisterLogonProcess+0xe612 fbd07ddc 80869fa2 80944d38 00000001 00000000 nt!PsRemoveCreateThreadNotifyRoutine+0x21e 00000000 00000000 00000000 00000000 00000000 nt!KiDispatchInterrupt+0x5a2 STACK_COMMAND: kb FOLLOWUP_IP: nt!KeRegisterBugCheckReasonCallback+77c 808213fa e85d6a0000 call nt!ZwYieldExecution+0x630 (80827e5c) SYMBOL_STACK_INDEX: 1 SYMBOL_NAME: nt!KeRegisterBugCheckReasonCallback+77c FOLLOWUP_NAME: MachineOwner IMAGE_NAME: ntkrnlpa.exe BUCKET_ID: WRONG_SYMBOLS Followup: MachineOwner --------- |
|