庆祝奥运会圆满成功,近日有些郁闷,来坛子上逛逛,放点血。
提到内存驱动的暴力搜索,大家想到最多的是搜索内存中的PE格式文件,同时比对某些特征来判断是否是sys文件,今天我放出来的这个,原理上和这个类似,但我搜的不是MZ,PE等,我是从0x00A80004开始搜索的,什么是0x00A80004? 看了代码你就知道了。
判断pe文件的合法性以及最后的处理函数就不用放了,提了一下思路,Ark就多了一种检测病毒的方法。
////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////
//2008.06.11
/*
通过搜索高端内存的驱动指针来查找内存中的驱动,基本上,是不可能有驱动能够在这种模式下隐藏的。
判断此处是否是一个Driver_Object结构,如果是,进一步判断DriverStart所指的内存是否是一个PE文件,如果是,那么他就是一个驱动程序的指针。
*/
VOID SearchDriverByMemoryDriverObjectPointer(void)
{
DWORD *pMemoryStart = (DWORD *)0x80000000;
DWORD *pMemoryEnd = (DWORD *)0xFFFFF000;
DWORD *Begin;
DWORD *End;
int i = 0;
DWORD * DriverStart = NULL;
DWORD Tail = 0;
PDRIVER_OBJECT pDriver;
PLDR_DATA_TABLE_ENTRY pdte;
ANSI_STRING aString;
DRIVER_ARRAY da;
PDRIVER_ARRAY pda = &da;
MxxPrint("Enter SearchDriverByMemoryDriverObjectPointer entry.");
for(pMemoryStart; pMemoryStart != pMemoryEnd; pMemoryStart += 1024)
{
//DbgPrint("%08x\n", pMemoryStart);
//页面的提交以1k大小为单位,因此大循环以1k为步进长度,小循环以8为步进长度。缩短了运行时间。
if(MmIsAddressValid(pMemoryStart) == 0)
continue;
End = pMemoryStart + 1024;
for(Begin = pMemoryStart; Begin != End; Begin += 2)
{
//Type and Size
if( *(DWORD *)Begin != 0x00A80004)
continue;
//驱动的大小不能是0
if( *(DWORD *)((DWORD)Begin + 0x10) == 0)
continue;
DriverStart = (DWORD *)(*(DWORD *)((DWORD)Begin + 0x0C));
if((DriverStart == NULL)|(DriverStart < (DWORD *)0x80000000))
continue;
//驱动的内存文件在内存起始处都是以1000的倍数开头的,因此判断尾部是否是3个0,就能判断该地址是否合法
Tail = (DWORD)DriverStart << 20;
if(Tail != 0)
continue;
if(Check_PE_File(DriverStart) == FALSE)
continue;
pDriver = (PDRIVER_OBJECT)Begin;
pdte = (PLDR_DATA_TABLE_ENTRY)(pDriver->DriverSection);
if(pdte == NULL)
continue;
RtlUnicodeStringToAnsiString(&aString, &pdte->FullDllName,TRUE);
pda->pDriver = pDriver;
pda->DriverStart = pdte->DllBase;
pda->DriverSize = pdte->SizeOfImage;
pda->Flag = FLAG_LINK_MEMORY_DRIVER_POINTER;
strcpy(pda->DriverName, aString.Buffer);
RtlFreeAnsiString(&aString);
//ProcessDriver(pda);
}
}
}
////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////
[课程]FART 脱壳王!加量不加价!FART作者讲授!