Показать сообщение отдельно

  #4  
Старый 21.01.2010, 00:38
slesh
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


По умолчанию

спрашивается а нафига её искать методом поиска?
Если же можно тупо взять из PEB
Вариант с подмененным и неправильным PEB'ом можно расценивать как манию приследывания и последюю стадию шизофрении. Так что лучше юзать через PEB
Под 2k, XP, 2k3 ты получишь адрес kernel32.dll а под w7 - адрес KERNELBASE
KERNELBASE - это считай жалкий аналог kernel32.dll
Но есть хитрость. В них в обоих есть функции GetProcAddress и LoadLibraryExA
через который можно загрузить любую либу (хотябы туже kernel32 для w7)
Для всякого малвара своего юзаю примерно такую схему:

Код:
__declspec(naked) HMODULE GetKernel32(void)
{
	__asm 
	{
		push    esi
		xor     eax,eax
		mov     eax,fs:[0x30]
		js      find_kernel_9x
		mov     eax,[eax+0x0c]
		mov     esi,[eax+0x1c]
		lodsd
		mov     eax,[eax+0x8]
		jmp     find_kernel_end
find_kernel_9x:
		mov		eax,[eax+0x34]
		lea		eax,[eax+0x7c]
		mov		eax,[eax+0x3c]
find_kernel_end:
		pop     esi
		ret
	}
}

KERNELBASE = GetKernel32();
*(void* *)&_LoadLibraryExA = HideGetProcAddress(KERNELBASE, "LoadLibraryExA");
*(void* *)&_GetProcAddress = HideGetProcAddress(KERNELBASE, "GetProcAddress");

if (!_LoadLibraryExA || !_GetProcAddress) return 0;

kernel32_dll = _LoadLibraryExA("kernel32.dll", 0, 0);
итд итп.
HideGetProcAddress - самописная функция поиска адреса функции (когдато выкладывал тут её)
И пашет идеально на всей линейке NT начиная от 2k

Другое дело в ядре искать адрес загрузки ядра, Там это уже нужно осуществлять перебор.
Вот пример
Код:
 mov esi, dword ptr ds:[0ffdff038h]; адрес обработчика для IDLE
 lodsd
 cdq 
 lodsd
base_loop: 
 dec eax 
 cmp dword ptr [eax], 00905a4dh ; сигнатура для файла ядра MZ+P+0x00
 jnz base_loop  
 mov lib, eax
Но этот код очень удобно юзать под ядром. Вернее под ядром его тока и можно заюзать )
 
Ответить с цитированием