首页
社区
课程
招聘
[求助]被ZwSetSystemInformation蓝怕了
发表于: 2008-11-7 18:54 6444

[求助]被ZwSetSystemInformation蓝怕了

2008-11-7 18:54
6444
到底ZwSetSystemInformation加载驱动怎么样才不会蓝,我用工具加载都没事。。。。偶尔有几个没蓝的,在我打开icesword后也蓝了,windbg跟踪看到驱动是加载了,该干的事也都干了,但是不知道为什么后面就蓝了,目前能不蓝的只能是驱动里面只有一句DbgPrint的,其他的基本都蓝,并且一般都报下面错误:
Access violation - code c0000005 (!!! second chance !!!)
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for ntdll.dll -
268053d8 ??              ???
求大大帮助
附ZwSetSystemInformation加载驱动代码,网上搜的
#include <windows.h>
#include <stdio.h>
#define NT_SUCCESS(Status) ((NTSTATUS)(Status) >= 0)
#define SystemLoadAndCallImage 38

typedef struct _UNICODE_STRING {
    USHORT Length;
    USHORT MaximumLength;
    PVOID Buffer;
} UNICODE_STRING, *PUNICODE_STRING;

typedef unsigned long NTSTATUS;

typedef struct _SYSTEM_LOAD_AND_CALL_IMAGE
{
    UNICODE_STRING ModuleName;
} SYSTEM_LOAD_AND_CALL_IMAGE, *PSYSTEM_LOAD_AND_CALL_IMAGE;

typedef DWORD (CALLBACK* ZWSETSYSTEMINFORMATION)(DWORD, PVOID, ULONG);
ZWSETSYSTEMINFORMATION ZwSetSystemInformation;
typedef DWORD (CALLBACK* RTLINITUNICODESTRING)(PUNICODE_STRING,PCWSTR );
RTLINITUNICODESTRING RtlInitUnicodeString;
typedef DWORD (CALLBACK* RTLANSISTRINGTOUNICODESTRING)(PVOID, PVOID,DWORD);
RTLANSISTRINGTOUNICODESTRING RtlAnsiStringToUnicodeString;

int main(int argc, char *argv[])
{
    SYSTEM_LOAD_AND_CALL_IMAGE GregsImage;
    UNICODE_STRING TmpBuff;
    char    szDrvFullPath[256],szTmp[256];
    int iBuffLen;
   
    printf("Load driver with ZwSetSystemInformation( )\r\n");
    printf("Date: 8th May 2007\r\n");
    printf("Modifed by: GaRY <wofeiwo_at_gmail_dot_com>\r\n\r\n");
    if(argc != 2 || stricmp(argv[1], "-h") ==0 || stricmp(argv[1], "-?") ==0 || stricmp(argv[1], "/?") ==0)
    {
        printf("Usage: %s <DriverPath>\r\n", argv[0]);
        exit(-1);
    }

    // 从ntll.dll获取函数
    if( !(RtlInitUnicodeString = (RTLINITUNICODESTRING) GetProcAddress( GetModuleHandle("ntdll.dll"), "RtlInitUnicodeString" )) )
    {
        printf( "GetProcAddress(\"RtlInitUnicodeString\") Error:%d\n", GetLastError() );
        exit(1);
    }
    if( !(ZwSetSystemInformation = (ZWSETSYSTEMINFORMATION) GetProcAddress( GetModuleHandle("ntdll.dll"), "ZwSetSystemInformation" )) )
    {
        printf( "GetProcAddress(\"ZwSetSystemInformation\") Error:%d\n", GetLastError() );
        exit(1);
    }
    if( !(RtlAnsiStringToUnicodeString = (RTLANSISTRINGTOUNICODESTRING) GetProcAddress( GetModuleHandle("ntdll.dll"), "RtlAnsiStringToUnicodeString" )) )
    {
        printf( "GetProcAddress(\"ZwSetSystemInformation\") Error:%d\n", GetLastError() );
        exit(1);
    }

    GetFullPathName(argv[1], 256, szTmp, NULL);
    printf("Loading driver: %s\r\n", szTmp);
    iBuffLen = sprintf(szDrvFullPath, "\\??\\%s", szTmp);
    szDrvFullPath[iBuffLen]=0;
    TmpBuff.Buffer = (PVOID)szDrvFullPath;
    TmpBuff.Length = iBuffLen;
    RtlAnsiStringToUnicodeString(&(GregsImage.ModuleName),&TmpBuff,1);

    if( NT_SUCCESS( ZwSetSystemInformation( SystemLoadAndCallImage, &GregsImage, sizeof(SYSTEM_LOAD_AND_CALL_IMAGE)) ))    //加载进内核空间
    {
        printf("Driver: %s loaded.\r\n", szDrvFullPath);
    }
    else
    {
        printf("Driver: %s not loaded.\r\n", szDrvFullPath);
    }
    return true;
}

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 214
活跃值: (46)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
set system information加载的驱动是加载到进程的session空间中,一旦你的加载进程退出,该驱动所在内存就会被释放

此外,内存是分页的,如果进DPC,也会导致蓝屏

解决方法是加载后分配NONPAGED POOL并将代码重定位后放到内存中执行
2008-11-7 19:52
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
哦。。。有点明白了。。。。正在修改中。。还要开NONPAGED POOL,还要代码重定位,有点繁琐了。。。。
2008-11-7 20:42
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
调试一个晚上,咱菜鸟总算调试成功,终于不蓝了。。。。。感谢QIQI大大提醒。。。。
2008-11-7 23:57
0
雪    币: 231
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
qdk
5
还可以这样加载驱动,学习了
2008-11-9 05:09
0
雪    币: 231
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
qdk
6
我也很蓝。
原来是这样的原因。
怪不得windbg看crash dump有时候是pde换出蓝的,有时候是其他原因
2009-1-14 09:50
0
雪    币: 135
活跃值: (76)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
学习啦~~
2009-2-6 19:12
0
游客
登录 | 注册 方可回帖
返回
//