Kernel32 imagebase

fl3a

Użytkownik
Dołączył
Marzec 12, 2005
Posty
538
Slyszalem (znam) trzy metody na popbranie adresu kernel32 sa to: PEB, SEH i TOPSTACK . Pytanie ktora z nich jest najlepsza? Gdzies wyczytalem ze jest jakas mozliwosc zlokalizowania ntdll bez lokalizowania kernel32 i uzywania exportowanych przez niego funkcji - moze ktos wie cos wiecej na ten temat?
 

Jonny

Użytkownik
Dołączył
Kwiecień 7, 2002
Posty
401
Originally posted by nBD
PEB - daje rade, oczywiscie OS musi byc z rodziny nt, w sumie ta metode stosuje bo jest latwa i szybka w asm oczywiscie
TOPSTACK - [esp+0x1C] podobno nie zawsze zawiera adres kernela

poczytaj http://www.hick.org/code/skape/shellcode/win32/generic.c tam jest fajnie opisane.
Topstack dziala tylko zaraz po utworzeniu procesu - sprobuj wewnetrznie z jakiegos dll-ka dostac ta metoda adres - nic z tego bo tak naprawde to nie bedzieszs wiedzial jak gleboko postawiona jest ramka stosu - ile pamieci zajmuje stos od momentu utworzenia programu. W gruncie rzeczy tak naprawde to nie chodzi o sam adres kernela - bo niby po co ci on ????????. W gruncie rzeczy chodzi o adres tabeli eksportow (importow tez w niektorych przypadkach) wiec tak naprawde otrzymanie adresu kernela jest metoda posrednia do tego aby dostac eksporty, ale jest jeszcze inne rozwiazanie - bardziej uniwersalne ale wiecej miejsca zajmuje - chociaz w gruncie rzeczy tez sprowadza sie do dostania uchwytu (handlera) kernela (jak wiadomo handler dll-kow jest adresem liniowym i jednoczesnie wskazuje na adres w pamieci). Jak sie zastanowic to gdy wykonujesz jakis kod - czy to wiruska czy powiedzmy wywalilo cie do jakiegos dll-ka bo uzywales sploita albo exploita to zawsze masz 2 opcje (czasem 3 w extremalnym przypadku ale dla ulatwienia mozemy go pominac bo zdarza sie nadzwyczaj zadko) - albo wyladujesz w jakims dll-ku (zazwyczaj bo przecierz chodzi przewaznie o zamazanie stosu czyli odpalenie naszego kodu) albo w jakims exeku - w obu przypadkach jestes w pliku formatu PE wiec juz wiesz gdzie wyladowales. Potem mozesz juz tradycyjnie - w gore pamieci (choc jest to troszke niebezpieczne ale w gruncie rzeczy najlepsze) az do adresu startu programu no a potem lecisz juz tylko do adresu tabeli exportow - proste i skuteczne - tylko ze to zajmuje miejsca w kodzie. W kazdych obecnych windach (no oprocz serii win9x) aby jakis programik chodzil to plik PE musi eksportowac jakas funkcje kernela - wnioske - skoro w dll-ku gdzie wyladujesz bedzie jakas funkcja kernelka to masz i adres liniowy zmapowanego jaderka w przestrzeni adresowaej naszego procesu - i dostaniesz wszystkie funkcje jaderka a wlasnie tylko o to chodzi.
 

omega_red

Użytkownik
Dołączył
Grudzień 15, 2005
Posty
3
Po co się martwić o adresy kernela skoro można używać syscalli
<
 
Do góry Bottom