liio
驱动小牛
驱动小牛
  • 注册日期2005-12-24
  • 最后登录2022-06-16
  • 粉丝4
  • 关注1
  • 积分24分
  • 威望343点
  • 贡献值0点
  • 好评度171点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:2255回复:17

ZwReadFile在过滤驱动中发生意外.挑战啊!!!大牛进

楼主#
更多 发布于:2007-02-10 16:56
  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;
    }


请大牛指点...
liio
驱动小牛
驱动小牛
  • 注册日期2005-12-24
  • 最后登录2022-06-16
  • 粉丝4
  • 关注1
  • 积分24分
  • 威望343点
  • 贡献值0点
  • 好评度171点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于: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
---------
Odyssey
驱动小牛
驱动小牛
  • 注册日期2004-12-15
  • 最后登录2008-03-29
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望115点
  • 贡献值0点
  • 好评度115点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-02-10 23:07
ZwReadFile必须在IRQL=passive level才能安全的调用,
其他的IRQL上如果出现page fault是不能用try-except来处理。
killvxk
论坛版主
论坛版主
  • 注册日期2005-10-03
  • 最后登录2014-04-14
  • 粉丝3
  • 关注1
  • 积分1082分
  • 威望2003点
  • 贡献值0点
  • 好评度1693点
  • 原创分2分
  • 专家分0分
地板#
发布于:2007-02-10 23:09
引用第2楼Odyssey2007-02-10 23:07发表的“”:
ZwReadFile必须在IRQL=passive level才能安全的调用,
其他的IRQL上如果出现page fault是不能用try-except来处理。


解决方法钩上那个secpXXX_handle
没有战争就没有进步 X3工作组 为您提供最好的军火
killvxk
论坛版主
论坛版主
  • 注册日期2005-10-03
  • 最后登录2014-04-14
  • 粉丝3
  • 关注1
  • 积分1082分
  • 威望2003点
  • 贡献值0点
  • 好评度1693点
  • 原创分2分
  • 专家分0分
地下室#
发布于:2007-02-10 23:10
我现在天天挂钩~
没有战争就没有进步 X3工作组 为您提供最好的军火
Odyssey
驱动小牛
驱动小牛
  • 注册日期2004-12-15
  • 最后登录2008-03-29
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望115点
  • 贡献值0点
  • 好评度115点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-02-10 23:17
引用第3楼killvxk2007-02-10 23:09发表的“”:


解决方法钩上那个secpXXX_handle


霸王硬上弓。。。
liio
驱动小牛
驱动小牛
  • 注册日期2005-12-24
  • 最后登录2022-06-16
  • 粉丝4
  • 关注1
  • 积分24分
  • 威望343点
  • 贡献值0点
  • 好评度171点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2007-02-11 09:54
引用第5楼Odyssey2007-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...?
liio
驱动小牛
驱动小牛
  • 注册日期2005-12-24
  • 最后登录2022-06-16
  • 粉丝4
  • 关注1
  • 积分24分
  • 威望343点
  • 贡献值0点
  • 好评度171点
  • 原创分0分
  • 专家分0分
  • 社区居民
7楼#
发布于:2007-02-11 10:39
后来想一想,就算没有SHARE_READ.我们也是在他MJ_CREATE时操作.此时它的Irp被挂起了

应该不存在无权限的问题?

线程是驱动入口启动的.
liio
驱动小牛
驱动小牛
  • 注册日期2005-12-24
  • 最后登录2022-06-16
  • 粉丝4
  • 关注1
  • 积分24分
  • 威望343点
  • 贡献值0点
  • 好评度171点
  • 原创分0分
  • 专家分0分
  • 社区居民
8楼#
发布于: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;
}
liio
驱动小牛
驱动小牛
  • 注册日期2005-12-24
  • 最后登录2022-06-16
  • 粉丝4
  • 关注1
  • 积分24分
  • 威望343点
  • 贡献值0点
  • 好评度171点
  • 原创分0分
  • 专家分0分
  • 社区居民
9楼#
发布于:2007-02-11 12:01
线程确实是在passive level
killvxk
论坛版主
论坛版主
  • 注册日期2005-10-03
  • 最后登录2014-04-14
  • 粉丝3
  • 关注1
  • 积分1082分
  • 威望2003点
  • 贡献值0点
  • 好评度1693点
  • 原创分2分
  • 专家分0分
10楼#
发布于:2007-02-11 12:04
系统读的时候,你要是读了就蓝了~

boot=3的驱动只要irql正确基本没有什么问题~
boot=0的驱动,这个很难控制有时候不蓝,有时候蓝~
boot=1的驱动,偶尔蓝~
没有战争就没有进步 X3工作组 为您提供最好的军火
killvxk
论坛版主
论坛版主
  • 注册日期2005-10-03
  • 最后登录2014-04-14
  • 粉丝3
  • 关注1
  • 积分1082分
  • 威望2003点
  • 贡献值0点
  • 好评度1693点
  • 原创分2分
  • 专家分0分
11楼#
发布于:2007-02-11 12:07
最好绕过ZwReadFile去读取,其实最好还是自己在内存里在线读取HIVE~
没有战争就没有进步 X3工作组 为您提供最好的军火
liio
驱动小牛
驱动小牛
  • 注册日期2005-12-24
  • 最后登录2022-06-16
  • 粉丝4
  • 关注1
  • 积分24分
  • 威望343点
  • 贡献值0点
  • 好评度171点
  • 原创分0分
  • 专家分0分
  • 社区居民
12楼#
发布于:2007-02-11 12:11
引用第10楼killvxk2007-02-11 12:04发表的“”:
系统读的时候,你要是读了就蓝了~

boot=3的驱动只要irql正确基本没有什么问题~
boot=0的驱动,这个很难控制有时候不蓝,有时候蓝~
boot=1的驱动,偶尔蓝~



强.问题明白了!谢谢!.

必须做到0.

HIVE?我MJ_Create时下发IRP可以么?
liio
驱动小牛
驱动小牛
  • 注册日期2005-12-24
  • 最后登录2022-06-16
  • 粉丝4
  • 关注1
  • 积分24分
  • 威望343点
  • 贡献值0点
  • 好评度171点
  • 原创分0分
  • 专家分0分
  • 社区居民
13楼#
发布于:2007-02-11 12:13
引用第11楼killvxk2007-02-11 12:07发表的“”:
最好绕过ZwReadFile去读取,其实最好还是自己在内存里在线读取HIVE~



后面这句不太明白.去内存里读?可是这个时候系统才开始OPEN文件...
liio
驱动小牛
驱动小牛
  • 注册日期2005-12-24
  • 最后登录2022-06-16
  • 粉丝4
  • 关注1
  • 积分24分
  • 威望343点
  • 贡献值0点
  • 好评度171点
  • 原创分0分
  • 专家分0分
  • 社区居民
14楼#
发布于:2007-02-11 13:33
问题貌似解决了.判断share,如果是0就不读了

好象只能这样.v大能说说你的具体方法不
killvxk
论坛版主
论坛版主
  • 注册日期2005-10-03
  • 最后登录2014-04-14
  • 粉丝3
  • 关注1
  • 积分1082分
  • 威望2003点
  • 贡献值0点
  • 好评度1693点
  • 原创分2分
  • 专家分0分
15楼#
发布于:2007-02-11 19:01
我的方法绕过FSD读取文件~我懒不行么~
哈哈~
没有战争就没有进步 X3工作组 为您提供最好的军火
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
16楼#
发布于:2007-02-12 12:22
对付老V之类的最好是全HOOK,从FDS到磁盘驱动到直接IO,全HOOK,不然搞不定的,嘿嘿......
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
killvxk
论坛版主
论坛版主
  • 注册日期2005-10-03
  • 最后登录2014-04-14
  • 粉丝3
  • 关注1
  • 积分1082分
  • 威望2003点
  • 贡献值0点
  • 好评度1693点
  • 原创分2分
  • 专家分0分
17楼#
发布于:2007-02-13 05:33
引用第16楼wowocock2007-02-12 12:22发表的“”:
对付老V之类的最好是全HOOK,从FDS到磁盘驱动到直接IO,全HOOK,不然搞不定的,嘿嘿......

太可怕了,以后离wowocock要远点~
没有战争就没有进步 X3工作组 为您提供最好的军火
游客

返回顶部