首页
社区
课程
招聘
[求助]如何加载驱动文件?
发表于: 2008-2-5 00:00 11674

[求助]如何加载驱动文件?

2008-2-5 00:00
11674
希望给出实例,最好是Delphi实现...
还有一个问题..
恢复SSDT完整源程序 sys+exe
http://www.gyzy.org/blog/read.php?42
其中,EXE里面这个函数不明白是什么意思,大牛们帮忙看一下,缺少这个函数貌似无法加载驱动,还有,谁会翻译成Delphi?...
void ReSSDT( IN HANDLE hDriver)
{
    HMODULE    hKernel;
    DWORD    dwKSDT;                // rva of KeServiceDescriptorTable
    DWORD    dwKiServiceTable;    // rva of KiServiceTable
    PMODULES    pModules=(PMODULES)&pModules;
    DWORD    dwNeededSize,rc;
    DWORD    dwKernelBase,dwServices=0;
    PCHAR    pKernelName;
    PDWORD    pService;
    PIMAGE_FILE_HEADER    pfh;
    PIMAGE_OPTIONAL_HEADER    poh;
    PIMAGE_SECTION_HEADER    psh;

    
	FARPROC NtQuerySystemInformationAddr=GetProcAddress(GetModuleHandle("ntdll.dll"),"NtQuerySystemInformation");
    // get system modules - ntoskrnl is always first there
    rc=((PFNNtQuerySystemInformation)NtQuerySystemInformationAddr)(11,pModules,4,&dwNeededSize);
    if (rc==STATUS_INFO_LENGTH_MISMATCH) {
        pModules=(MODULES *)GlobalAlloc(GPTR,dwNeededSize);
        rc=((PFNNtQuerySystemInformation)NtQuerySystemInformationAddr)(11,pModules,dwNeededSize,NULL);
    } else {
strange:
        printf("strange NtQuerySystemInformation()!\n");
        return;
    }
    if (!NT_SUCCESS(rc)) goto strange;
    
    // imagebase
    dwKernelBase=(DWORD)pModules->smi.Base;
    // filename - it may be renamed in the boot.ini
    pKernelName=pModules->smi.ModuleNameOffset+pModules->smi.ImageName;
    
    // map ntoskrnl - hopefully it has relocs
    hKernel=LoadLibraryEx(pKernelName,0,DONT_RESOLVE_DLL_REFERENCES);
    if (!hKernel) {
        printf("Failed to load! LastError=%i\n",GetLastError());
        return;        
    }

    GlobalFree(pModules);

    // our own export walker is useless here - we have GetProcAddress :)    
    if (!(dwKSDT=(DWORD)GetProcAddress(hKernel,"KeServiceDescriptorTable"))) {
        printf("Can't find KeServiceDescriptorTable\n");
        return;
    }

    // get KeServiceDescriptorTable rva
    dwKSDT-=(DWORD)hKernel;    
    // find KiServiceTable
    if (!(dwKiServiceTable=FindKiServiceTable(hKernel,dwKSDT))) {
        printf("Can't find KiServiceTable...\n");
        return;
    }

    printf("&KiServiceTable==%08X\n\nDumping 'old' ServiceTable:\n\n",dwKiServiceTable+dwKernelBase);    
    
    // let's dump KiServiceTable contents        
    
    // MAY FAIL!!!
    // should get right ServiceLimit here, but this is trivial in the kernel mode
    GetHeaders((PCHAR)hKernel,&pfh,&poh,&psh);

    for (pService=(PDWORD)((DWORD)hKernel+dwKiServiceTable);
            *pService-poh->ImageBase<poh->SizeOfImage;
            pService++,dwServices++)
	{
		ULONG ulAddr=*pService-poh->ImageBase+dwKernelBase;
		SetProc( hDriver,dwServices, &ulAddr );	
		//printf("%08X\n",ulAddr);    
	}
        

    printf("\n\nPossibly KiServiceLimit==%08X\n",dwServices);

    FreeLibrary(hKernel);

}

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 375
活跃值: (12)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
2
这个不是加驱动的。
2008-2-5 16:07
0
雪    币: 451
活跃值: (78)
能力值: ( LV12,RANK:470 )
在线值:
发帖
回帖
粉丝
3
这个函数是定位内核基质的
既然楼主连基本的内核都不懂
为啥来要求改成delphi?
其实一样的,只要你懂delphi,代码随便改就ok

楼主还是去学习1下内核基础吧
楼主只想要delphi版本,不知道啥意思?难道VC不能运行?难以置信..奇怪
delphi写驱动现在方便了,有kmdkit了
2008-2-5 18:52
0
雪    币: 101
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
CreateService -> OpenService -> StartService
驱动文件显示是运行,可惜没有任何效果,没有恢复SSDT...
我想请问上面的ReSSDT函数查找系统分配表和加载驱动有什么关系?
没有它难道就无法加载了吗?
2008-2-5 23:46
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
5
严重同意猪娃牛```

基础啊基础
2008-2-6 07:59
0
雪    币: 375
活跃值: (12)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
6
猪蛙牛……………………

靠……

三体合一啊。
2008-2-6 11:05
0
雪    币: 101
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我确实是很菜,所以才想弄清楚是什么原理,希望大牛们指点一下...
为何我无法正常加载,难道因为确实EXE代码中的ReSSDT函数?
2008-2-7 23:24
0
雪    币: 66
活跃值: (16)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
8
恢复SSDT是在ReSSDT中完成的(包括定位KiServiceTable,dump原始KiServiceTable,重定位等),没有这个函数的话是不会恢复SSDT的。

ps 北极星2003:再邪恶一次发牢骚。。嘿嘿……

to 小伟:你的头像怎么看怎么不纯洁-_-!
2008-2-7 23:42
0
雪    币: 451
活跃值: (78)
能力值: ( LV12,RANK:470 )
在线值:
发帖
回帖
粉丝
9
to 小伟:粉红的哇.
汗.
楼主,先去学习啥是内核在回来吧.不然很难讲清楚的哦
猪+蛙+牛=?汗死.
超级无敌大炉子解释---基因突变
2008-2-8 22:16
0
雪    币: 375
活跃值: (12)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
10
猪蛙龟还合适。。

显然炉子生物没学好。。

猪蛙龟就是使用502强力胶水后产生的变异变体。

PS:楼主可以参考一下《Undocumented Windows 2000 Secrets》,会有帮助的。
2008-2-10 20:34
0
游客
登录 | 注册 方可回帖
返回
//