Anty Dump na Win9x

Kazdy chyba wie jak jest zbudowany plik PE, jesli chodzi o rozmieszczenie glownych struktur:

1. Dos header
2. PE header
3. Data Directory
4. Tabela sekcji
5. Sekcje

Tak to wyglada w duzym skrocie. Po zaladowaniu pliku do pamieci zmieniaja sie tylko odleglosci miedzy sekcjami, pod warunkiem:

object align != file align

no ale naglowki sa ulozone tak jak w pliku na dysku, najpierw DOS potem PE, potem reszta smiecia. Polozenie naglowka PE zapisane jest jako RAW adres w polu New Exe Offset naglowka DOS. Sprawdzajac to pole, mozna zauwazyc ze jest ono 32bitowe, wiec wpadl mi do glowy taki pomysl (no moze nie jest on najswiezszy), zeby naglowek PE przeniesc z oryginalnego polozenia, gdzies na koniec pliku, albo pomiedzy sekcje. Nic prostszego, bierzemy plik PE EXE do hiew:

- F8 -> F4 jestesmy pod naglowkiem PE
- * i zaznaczamy obszar az do konca tabeli sekcji
- ustawiamy kursor pod koniec pliku, gdzie jest troche miejsca i ciskamy SHIFT+F5 kopiujac tam zaznaczony wczesniej naglowek
- zaznaczamy oryginalny naglowek i zamazujemy (ALT+F2) go zerami
- ciskamy F8 tak zeby wyswietlic strukure naglowka DOS
- F3 i ustawiamy adres "NewExe offset" na RAW adres w pliku, gdzie wczesniej skopiowalismy naglowek PE

Wychodzimy z hiew i jesli nic nie schrzanilismy, exek powinien normalnie sie uruchomic. Teraz sprobujcie go dumpnac z poziomu ProcDumpa. Obojetnie jakie opcje sa wlaczone, ProcDump nie potrafi dumpnac naglowka DOS, nie wspominajac o PE. W wyniku dumpa, pod offsetem 0 otrzymamy tylko banner ProcDumpa :), zadnych naglowkow, nawet naglowka DOS. Exeki dumpniete pod LordPE wygladaja znacznie lepiej, jest naglowek DOS, ale z blednie ustawionym offsetem do przemieszczonego naglowka PE, oprocz tego LordPE wrzuca w takim wypadku sekcje pod inne adresy RAW i zeby calkowicie odbudowac strukture exeka, trza oprocz modyfikacji naglowka DOS, zmodyfikowac adresy RAW wszystkich sekcji w tabeli sekcji, w kazdym razie tak czy siak, troche roboty jest.

Metoda ta ma jeszcze jednego plusa, otoz jesli naglowek PE umiescimy w obszarze sekcji, ktora ma atrybuty write, mozna bezposrednio, bez zadnego ring0, ani innego syfu, zamazac caly naglowek PE w pamieci :), nie musze mowic, jakie to ma plusy. Jak zwykle nie ma rozy bez kolcow, powyzsza metoda dziala z powowdzniem na moim Windows95, pod NT niestety wyskakuja bledy, ze program zostal nieprawidlowo zainicjalizowany.

bart/xt