qaaz | 82.208.44.* | 14.6.2007 5:22 |
| Takze zase upresneni k metodam hledani bazovky kernel32.dll. Kazdy to obslehne z nejakeho tutorialu a ani se neobtezuje zjistit jak to vlastne funguje. Tady jsou ruzne metody:
1) Vyzkousime ruzne adresy, na kterych vime, ze se v ruznych verzich widli vyskytuje.
2) Prohledame celou pamet, nebo jeji casti, bajt po bajtu.
3) Na fs:[0x30] je ulozena adresa PEB, ktery mimo jine obsahuje seznam loadnutych modulu serazeny podle poradi jejich inicializace (InInitOrderModuleList, nebo tak nejak). Z nej nacteme druhou polozku, ktera je kernel32 (prvni je ntdll).
4) Defaultni exception handler je v kernel32. Z fs:[0] nacteme aktualni handler a prochazime SEH list az k poslednimu handleru, ktery je ten z kernel32.dll. Tim ziskame adresu uvnitr kernel32, takze staci jet dolu dokud nenarazime na jeho hlavicku. Dllky se loaduji zarovnane na 64KB, takze staci jit po 64KB krocich (cimz zaroven preskocime matouci data jeste pred [za] hlavickou).
5) Na fs:[0x18] je ulozena adresa TEB, ktery mimo jine obsahuje i hodnotu vrcholu zasobniku. 0x1C bajtu od nej je pointer ukazujici do kernel32, odtud zase jedeme dolu (po mezich 64KB) az k hlavicce.
A jako vzdy male rejpnuti na konec:
To, ze nevis co ten kod dela, je v pohode.
To, ze si to nevygooglis, je k zamysleni.
To, ze o tom i presto pises clanek, je hloupe.
To, ze ho nenapises tak, aby to nebylo moc videt, je pekne trapny ;)
|
|