阅读:4618回复:27
想得到ndis.sys的基址,方法有哪些,大侠请指点!
想用hook的方法做包过虑,
一种方法是注册dummy protocol,来得到protocol chain,从而得到各protocol的信息 另一种方法是直接hook ndis.sys,改export table,但却不知道ndis.sys的加载地址 哪位大侠知道方法或者方向,或者有什么建议,都欢迎! |
|
沙发#
发布于:2002-05-15 12:26
关注,在Sys中是否有什么办法可以得到*.sys的基址。
请大侠赐教!!我再加50分!!!!!! |
|
|
板凳#
发布于:2002-05-15 12:47
我也凑个热闹,加20!!
怎么好像打扑克 - 吹牛皮一样? |
|
地板#
发布于:2002-05-15 13:07
我想这是大家遇到的一个共同的问题,肯请哪位高手出来指点指点!
或者咱哥几个研究也成,集思广益,我想也成! 不过如果有高手,还是指点为好,等待且学习中... |
|
地下室#
发布于:2002-05-15 15:06
在SoftICE中,用MOD命令可以看到 NDIS.SYS 加载的影像地址 XXXXXXXX。用D XXXXXXXX 可以看到
MZ........PE........,看来东西在这里耶。 |
|
5楼#
发布于:2002-05-15 15:08
咱写了一段程序,没有什么理论依据,好像也跟文档不符,不过似乎能找出这个地址,看我的源程序:
|
|
6楼#
发布于:2002-05-15 15:12
要增加的定义:
typedef enum _SYSTEM_INFORMATION_CLASS { SystemBasicInformation, SystemProcessorInformation, SystemPerformanceInformation, SystemTimeOfDayInformation, SystemNotImplemented1, SystemProcessesAndThreadsInformation, SystemCallCounts, SystemConfigurationInformation, SystemProcessorTimes, SystemGlobalFlag, SystemNotImplemented2, SystemModuleInformation, SystemLockInformation, SystemNotImplemented3, SystemNotImplemented4, SystemNotImplemented5, SystemHandleInformation, SystemObjectInformation, SystemPagefileInformation, SystemInstructionEmulationCounts, SystemInvalidInfoClass1, SystemCacheInformation, SystemPoolTagInformation, SystemProcessorStatistics, SystemDpcInformation, SystemNotImplemented6, SystemLoadImage, SystemUnloadImage, SystemTimeAdjustment, SystemNotImplemented7, SystemNotImplemented8, SystemNotImplemented9, SystemCrashDumpInformation, SystemExceptionInformation, SystemCrashDumpStateInformation, SystemKernelDebuggerInformation, SystemContextSwitchInformation, SystemRegistryQuotaInformation, SystemLoadAndCallImage, SystemPrioritySeparation, SystemNotImplemented10, SystemNotImplemented11, SystemInvalidInfoClass2, SystemInvalidInfoClass3, SystemTimeZoneInformation, SystemLookasideInformation, SystemSetTimeSlipEvent, SystemCreateSession, SystemDeleteSession, SystemInvalidInfoClass4, SystemRangeStartInformation, SystemVerifierInformation, SystemAddVerifier, SystemSessionProcessesInformation } SYSTEM_INFORMATION_CLASS; typedef struct _SYSTEM_MODULE_INFORMATION { ULONG Reserved[2]; PVOID Base; ULONG Size; ULONG Flags; USHORT Index; USHORT Unknown; USHORT LoadCount; USHORT ModuleNameOffset; CHAR ImageName[256]; } SYSTEM_MODULE_INFORMATION, *PSYSTEM_MODULE_INFORMATION; NTSYSAPI NTSTATUS NTAPI ZwQuerySystemInformation( IN SYSTEM_INFORMATION_CLASS SystemInformationClass, IN OUT PVOID SystemInformation, IN ULONG SystemInformationLength, OUT PULONG ReturnLength OPTIONAL ); 实现的代码: BOOLEAN SetWP( ULONG * pOldVal, BOOLEAN bSet ) { ULONG Val; DbgPrint( \"Set Write protect !\\n\" ); if( bSet ) { __asm { push eax; mov eax, cr0; mov Val, eax; and eax, 0FFFEFFFFh; mov cr0, eax; pop eax; } *pOldVal = Val; } else { Val = *pOldVal; __asm { push eax; mov eax, Val; mov cr0, eax; pop eax; } } return TRUE; } VOID GetKernelModule() { ULONG iReturn; ULONG iSize; ULONG i; PCHAR pSysInf; PCHAR pImageName; PCHAR pImage; ANSI_STRING AnsiName; PSYSTEM_MODULE_INFORMATION pModule; iSize = 4000; pSysInf = ExAllocatePool( NonPagedPool, iSize ); if( pSysInf ) { ZwQuerySystemInformation( 11, pSysInf, iSize, &iReturn ); if( iReturn > 4000 ) { ExFreePool( pSysInf ); iSize = iReturn/4*4+4; pSysInf = ExAllocatePool( NonPagedPool, iSize ); if( pSysInf ) { ZwQuerySystemInformation( 11, pSysInf, iSize, &iReturn ); } } if( pSysInf ) { pModule = pSysInf; while( (PCHAR)pModule-pSysInf < iSize ) { pImageName = ( PCHAR )pModule + 32; pImage = ( PCHAR )pModule->Base + pModule->Size; DbgPrint( \"HookNDIS: %s --> Flag:%s\\n\", pImageName, pImage ); pModule++; } ExFreePool( pSysInf ); } } } 调用代码: ULONG OldVal; SetWP( &OldVal, TRUE ); GetKernelModule(); SetWP( &OldVal, FALSE ); |
|
7楼#
发布于:2002-05-15 15:18
然后用SoftICE调试,就会看到每个pImage指向的地方跟用MOD看到的地址一样,用dbgview可以看到打出来的MZ.....字样,用D命令看到确实是文件的映像。不知道这个是否可用,大家也都试试,关注这个话题,等高手来指正。
|
|
8楼#
发布于:2002-05-15 15:20
http://www.driverdevelop.com/forum/viewthread.php?tid=12387&PHPSESSID=a3e9aa6664df603ad6db2b79f93991a9
|
|
9楼#
发布于:2002-05-15 15:22
pImage = ( PCHAR )pModule->Base + pModule->Size;
NT Native API说,Size是The size of the module,可是从程序里看来也许不对,那排在后面的模块岂不是太大了?看起来倒象是个Offset! |
|
10楼#
发布于:2002-05-15 15:24
fracker,你的代码是用ddk编译吗?
怎样安装和运行?现在你是大侠了,呵呵! |
|
11楼#
发布于:2002-05-15 15:30
这个我在NT,2000下都试过能行,XP重起来试。
|
|
12楼#
发布于:2002-05-15 15:37
是用DDK搞的,有一个工具可以安装和加载叫INSTDRV.EXE,NT 4.0 DDK有源程序,也可以到网上找,为了加快大家速度,我把工程放上来,不过大家要能容忍这里面的好多垃圾哦。
|
|
|
13楼#
发布于:2002-05-15 15:59
XP下不成,原因还没找。
|
|
14楼#
发布于:2002-05-15 16:11
知道ndis.sys的加载地址
-------------------------------------------------------- 找ndis.sys等内核模块的加载地址及在导出表中find函数 Gary Nebbett的书讲得很清楚,看看就得了. |
|
15楼#
发布于:2002-05-15 16:14
大侠,什么名字,具体的描述!在线等待!!
|
|
|
16楼#
发布于:2002-05-15 16:17
他的什么书,能否说的详细些,在哪能找到?
又一个大侠哦!呵呵! |
|
17楼#
发布于:2002-05-15 16:27
fracker你给的工程文件好象不全,在source里的文件好多都没有,why?编译通不过!指点!!
|
|
18楼#
发布于:2002-05-15 16:29
faint,中译本就是《windows NT/2000本机API参考手册》
兄弟,不要随便叫“大虾”哟 开始贴的链接里已有了相关的代码 用的时候: func=(PULONG)FindFunc(FindNtoskrnl(),\"KeGetCurrentThread\"); 这个例子是找ntoskrnl.exe导出函数的,你把里面ntoskrnl.exe换为ndis.sys,写上你找的函数名即可 |
|
19楼#
发布于:2002-05-15 16:35
pjf兄,太感谢了!可是怎么能买着呀,不好意思了 ;) ;) ;)
|
|
|
上一页
下一页