🧐 Kernel32 Imagebase

🐴 haker.com.pl

🟦 fl3a
🖊️ 13:40 21-08-2005
Słyszałem (znam) trzy metody na pobranie adresu kernel32, są to: PEB, SEH i TOPSTACK . Pytanie, która z nich jest najlepsza? Gdzieś wyczytałem, że jest jakaś możliwość zlokalizowania ntdll bez lokalizowania kernel32 i używania eksportowanych przez niego funkcji - może ktoś wie coś więcej na ten temat?
🟦 nBD
🖊️ 15:46 21-08-2005
PEB - daje radę, oczywiście OS musi być z rodziny NT, w sumie tą metodę stosuję, bo jest łatwa i szybka w Asm oczywiście.
TOPSTACK - [esp+0x1C] podobno nie zawsze zawiera adres kernel

Poczytaj:
http://www.hick.org/code/skape/shellcode/win32/generic.c
Tam jest fajnie opisane.
🟦 Jonny
🖊️ 06:22 26-08-2005
Topstack działa tylko zaraz po utworzeniu procesu - spróbuj wewnętrznie z jakiegoś dll dostać tą metodą adres - nic z tego, bo tak na prawdę to nie będziesz wiedział jak głęboko postawiona jest ramka stosu - ile pamięci zajmuje stos od momentu utworzenia programu. W gruncie rzeczy tak na prawdę to nie chodzi o sam adres kernel - bo niby po co ci on?. W gruncie rzeczy chodzi o adres tabeli eksportów (importów tez w niektórych przypadkach), więc tak na prawdę otrzymanie adresu kernel jest metodą pośrednią do tego, aby dostać eksporty, ale jest jeszcze inne rozwiązanie - bardziej uniwersalne, ale więcej miejsca zajmuje - chociaż w gruncie rzeczy, też sprowadza się do dostania uchwytu (handlera) kernel (jak wiadomo handler dll jest adresem liniowym i jednocześnie wskazuje na adres w pamięci). Jak się zastanowić, to gdy wykonujesz jakiś kod - czy to wirus czy powiedzmy wywaliło Cię do jakiegoś dll, bo używaleś sploita albo exploita to zawsze masz 2 opcje (czasem 3 w ekstremalnym przypadku, ale dla ułatwienia możemy go pominąć, bo zdarza się nadzwyczaj rzadko) - albo wylądujesz w jakimś dll (zazwyczaj, bo przecież chodzi przeważnie o zamazanie stosu, czyli odpalenie naszego kodu) albo w jakimś exe - w obu przypadkach jesteś w pliku formatu PE, więc już wiesz gdzie wylądowałeś. Potem możesz już tradycyjnie - w górę pamięci (choć jest to troszkę niebezpieczne, ale w gruncie rzeczy najlepsze) aż do adresu startu programu. No, a potem lecisz już tylko do adresu tabeli eksportów - proste i skuteczne - tylko że to zajmuje miejsca w kodzie. W każdych obecnych windach (no oprócz serii win9x), aby jakiś programik chodził, to plik PE musi eksportować jakąś funkcję kernel - wniosek - skoro w dll, gdzie wylądujesz będzie jakaś funkcja kernel, to masz i adres liniowy zmapowanego jądra w przestrzeni adresowej naszego procesu - i dostaniesz wszystkie funkcje jadra, a właśnie tylko o to chodzi.
🟦 omega_red
🖊️ 19:49 11-01-2006
Po co się martwić o adres kernel, skoro można używać syscalli ;)
Wszystkie treści umieszczone na tej witrynie są chronione prawem autorskim. Surowo zabronione jest kopiowanie i rozpowszechnianie zawartości tej witryny bez zgody autora. Wszelkie opublikowane tutaj treści (w tym kody źródłowe i inne) służą wyłącznie celom informacyjnym oraz edukacyjnym. Właściciele tej witryny nie ponoszą odpowiedzialności za ewentualne niezgodne z prawem wykorzystanie zasobów dostępnych w witrynie. Użytkownik tej witryny oświadcza, że z zamieszczonych tutaj danych korzysta na własną odpowiedzialność. Wszelkie znaki towarowe i nazwy zastrzeżone zostały użyte jedynie w celach informacyjnych i należą wyłącznie do ich prawnych właścicieli. Korzystając z zasobów witryny haker.com.pl oświadczasz, że akceptujesz powyższe warunki oraz politykę prywatności.