-
-
[旧帖]
[原创]WinXP下搜索SEH链表获取Kernel32.dll基址
0.00雪花
-
发表于:
2012-5-2 00:29
3084
-
[旧帖] [原创]WinXP下搜索SEH链表获取Kernel32.dll基址
0.00雪花
在内存中搜索kernel32.dll映像基址的方法,小弟只知道三种①暴力搜索堆栈②搜索PEB③搜索SEH链表,前两种,我觉着过于招摇了,尤其是第二种几乎刚刚写出来,就被杀了T_T。。。
第一种方法我很熟悉了,今天突然想用第三种方法实现以下,于是乎说做就做,实践中发现了一个小小的问题,在WIN7下搜索SEH链表,得到的是Ntdll.dll的基址,并不是Xp下的Kernel32.dll。为了让程序更健壮些,我加入了SEH异常处理函数,能够修正EIP使程序能够达到预期结果。。。
这里只列出了关键代码,具体的测试代码我放在附件里面了。求精华贴,求邀请码。。。
编译环境:VC6.0
关键代码如下:
DWORD dwHandlerAddress = (DWORD)ExceptionHandler;
LPVOID APIENTRY GetKernelBase()
{
LPVOID lpModule = NULL;
{
_asm push ebp //注册SEH,附加数据,原始EBP
_asm push offset next //附加数据,安全代码区域
_asm push dwHandlerAddress
_asm push fs:[0]
_asm mov fs:[0],esp
_asm cld
_asm xor esi,esi
_asm mov esi,dword ptr fs:[0] //获取SEH链表地址
_asm lookup:
_asm lodsd
_asm inc eax
_asm je find
_asm dec eax
_asm xchg esi,eax
_asm jmp short lookup
_asm find:
_asm mov edi,dword ptr [esi]
_asm and edi,0xffff0000
_asm start:
_asm cmp word ptr [edi],0x5a4d //判断内存模块是否为PE文件
_asm jnz next
_asm mov esi,edi
_asm add esi,dword ptr ds:[esi+0x3c]
_asm cmp word ptr [esi],0x4550
_asm jnz next
_asm mov lpModule,edi
_asm jmp short end
_asm next:
_asm sub edi,0x10000
_asm cmp edi,0x70000000
_asm je end
_asm jmp short start
_asm end:
_asm pop fs:[0]
_asm add esp,0x0c
}
return lpModule;
}
EXCEPTION_DISPOSITION _cdecl ExceptionHandler(EXCEPTION_RECORD * ExceptionRecord,
LPVOID EstablisherFrame,
CONTEXT * ContextRecord,
LPVOID DispatcherContext)
{
if(ExceptionRecord->ExceptionCode == STATUS_ACCESS_VIOLATION)
{
//内存访问异常,调整EIP到正常的内存地址
DWORD dwEbp=0,dwEip=0,dwEsp=0;
_asm
{
mov eax,EstablisherFrame
push dword ptr [eax+0x08]
pop dwEip
push dword ptr [eax+0x0c]
pop dwEbp
mov dwEsp,eax
}
ContextRecord->Eip=dwEip;
ContextRecord->Ebp=dwEbp;
ContextRecord->Esp=dwEsp;
return ExceptionContinueExecution;
}
else if(ExceptionRecord->ExceptionCode == 0x0C0000027
|| ExceptionRecord->ExceptionFlags == 2
|| ExceptionRecord->ExceptionFlags == 6)
{
//进行展开操作
return ExceptionContinueSearch;
}
else
{
//其他异常
return ExceptionContinueSearch;
}
}
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课