grzonu
Były Moderator
- Dołączył
- Grudzień 26, 2006
- Posty
- 1390
Infekcja plików exe ? Tutorial
cz.1 - XP
Przygotowałem tutorial na temat infekcji plików exe.
Co będzie nam potrzebne:
- Defixed lub inny debugger
- LordPe
- Hexplorer lub inny hexedytor
- masm
- znajomosc asmeblera
Zasada dzialania:
Do docelowego programu dodajemy dodatkowa sekcje z kodem i ustawiamy na nia Entry Point wykonujemy nasz kod a nastepnie skaczemy do miejsca starego Entry Pointu
Zaczynamy
Najpierw znajdzmy plik ktory chcemy zmodyfikowac i dodac do niego swoj kod.
Jeśli juz go mamy musimy napisac swoj kod ktory ma zostac wykonany. Napiszemy go w asemblerze ale tak aby zadna
funkcja nie byla importowana z IAT(tablica importow). Posluzy nam do tego masm.
w naszym kodzie wywolamy funkcje MessageBoxA.
Napiszmy wiec kod
Ten kod kompilujemy prace z masmem mamy za soba.
Teraz musimy otworzyc hexedytor i przekopiowac nasze stringi w miejsce nopow ktore zostawilismy na koncu
http://img329.imageshack.us/img329/5193/81970425.jpg
http://img37.imageshack.us/img37/4049/31100984.jpg
zaznaczamy stringi ktore mamy nizej w sekcji data i naciskamy ctrl+c potem klikamy w miejsce nopow i naciskamy ctrl+v
nastepnie zapisujemy ten plik.
Koniec zabawy z hexedytorem
Teraz nalezy zapisac stary entry point na kartce w tym celu otwieramy defixed i otwieramy w nim plik ktory bedziemy
modyfikowac. Otworzy się nam okno z kodem tego programu i musimy przepisac numer ktory jest na na czarnym tle w
kolumnie address(najczesciej 00401000 choc moze byc inny)
Teraz musimy przekopiowac sekcje kodu do docelowego programu.
uzyjemy do tego programu LordPE
otwieramy go i klikamy na PE editor wybieramy plik ktory chwile temu modyfikowalismy i klikamy na
sections wybieramy ta sekcje ktora ma flage 60000020 (zwykle nazywa sie code lub text) i kliakmy na niej
prawym przyciskiem myszy i wybieramy save section to disc i zapisujemy sekcje w pliku na dysku
nastepnie otwieramy docelowy plik przez LordPE i postepujemy tak samo jak w przypadku pliku wczesniejszego z tym ze
tutaj robimy Load section from disc i wybieramy wczesniej zapisaną sekcje i zapisujemy(np. na kartce) VOffset
dodanej sekcji. i na nowej sekcji klikamy prawym przyciskiem myszki i klikamy na edit section header
ustawiamy flags na 60000020 klikamy ok. pozostaje jeszcze jedno zmienic entry point na ten zapisany na
kartce(Voffset).
wiec w pierwsze pole w glownym oknie wpisujemy nowy entry point i klikamy save.
Teraz trzeba bedzie zmodyfikowac adresy stringow na takie ktore mamy w kodzie na rysunku zaznaczylem gdzie sie
zaczynaja jakie stringi(string zaczyna sie znakiem a konczy 00)
http://img26.imageshack.us/img26/1110/63811952.jpg
http://img257.imageshack.us/img257/9539/56582823.jpg
Teraz trzeba w miejsce wskazane na drugim rysunku w miejsce RET wpisac JMP stary_entry_point
Np. JMP 00401000 Zapisujemy teraz plik(copy to executable->all modyfication) i cieszymy sie zainfekowanym plikiem.
kod zrodlowy
Ta metoda dziala tylko w systemie XP i nizszych gdyz w Viscie kernel32.dll nie jest ladowany zawsze pod ten sam adres
o tym jak zrobic to w viscie w cz.2 ktora mam nadzieje niebawem powstanie
Tutorial pochodzi ze strony grzonu.pl i nie moze byc kopiowany bez zgody autora
cz.1 - XP
Przygotowałem tutorial na temat infekcji plików exe.
Co będzie nam potrzebne:
- Defixed lub inny debugger
- LordPe
- Hexplorer lub inny hexedytor
- masm
- znajomosc asmeblera
Zasada dzialania:
Do docelowego programu dodajemy dodatkowa sekcje z kodem i ustawiamy na nia Entry Point wykonujemy nasz kod a nastepnie skaczemy do miejsca starego Entry Pointu
Zaczynamy
Najpierw znajdzmy plik ktory chcemy zmodyfikowac i dodac do niego swoj kod.
Jeśli juz go mamy musimy napisac swoj kod ktory ma zostac wykonany. Napiszemy go w asemblerze ale tak aby zadna
funkcja nie byla importowana z IAT(tablica importow). Posluzy nam do tego masm.
Kod:
GetFunc PROC adr1:dword,adr2:dword
PUSH adr1 ;rzucamy na stos nazwe dll`ki
mov eax,7C801D7Bh ;kopiujemy do eax adres LoadLibraryA
CALL eax ;wywolujemy LoadLibraryA
PUSH adr2 ;rzucamy na stos nazwe importowanej funkcji
PUSH eax ;rzucamy na stos adres biblioteki
mov eax,7C80AE30h ;kopiujemy do eax adres GetProcAddress
CALL eax ;wywolujemy GetProcAddress
ret ;zwracamy adres funkcji
GetFunc endp
w naszym kodzie wywolamy funkcje MessageBoxA.
Napiszmy wiec kod
Kod:
.386
.model flat,stdcall
option casemap:none
GetFunc PROTO :dword,:dword
.data
msg db "MessageBoxA",0
dll db "user32.dll",0
wiad1 db "kodzik",0
wiad2 db "msg",0
.code
start:
PUSH OFFSET msg ;rzucamy na stos nazwe funkcji
PUSH OFFSET dll ;rzucamy na stos nazwe dll`ki
CALL GetFunc ;wywoujemy nasza funkcje pobierajaca adres
PUSH 0 ;rzucamy parametry funkcji MessageBoxA
PUSH OFFSET wiad1 ;rzucamy parametry funkcji MessageBoxA
PUSH OFFSET wiad2 ;rzucamy parametry funkcji MessageBoxA
PUSH 0 ;rzucamy parametry funkcji MessageBoxA
CALL eax ;wywolujemy MessageBoxA
xor eax, eax ;zerujemy eax
ret ;koniec;musimy zostawic kilka NOP`ow aby po tym kodzie zrobic skok do starego EP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
;nasza funkcja :)
GetFunc PROC adr1:dword,adr2:dword
PUSH adr1 ;rzucamy na stos nazwe dll`ki
mov eax,7C801D7Bh ;kopiujemy do eax adres LoadLibraryA
CALL eax ;wywolujemy LoadLibraryA
PUSH adr2 ;rzucamy na stos nazwe importowanej funkcji
PUSH eax ;rzucamy na stos adres biblioteki
mov eax,7C80AE30h ;kopiujemy do eax adres GetProcAddress
CALL eax ;wywolujemy GetProcAddress
ret ;zwracamy adres funkcji
GetFunc endp
;tu zostawiamy troche nopow ktore beda nam potrzebne pozniej do wrzucenia stringow
NOP
NOP
NOP
NOP
NOP
...
...
...
end start
Ten kod kompilujemy prace z masmem mamy za soba.
Teraz musimy otworzyc hexedytor i przekopiowac nasze stringi w miejsce nopow ktore zostawilismy na koncu
http://img329.imageshack.us/img329/5193/81970425.jpg
http://img37.imageshack.us/img37/4049/31100984.jpg
zaznaczamy stringi ktore mamy nizej w sekcji data i naciskamy ctrl+c potem klikamy w miejsce nopow i naciskamy ctrl+v
nastepnie zapisujemy ten plik.
Koniec zabawy z hexedytorem
Teraz nalezy zapisac stary entry point na kartce w tym celu otwieramy defixed i otwieramy w nim plik ktory bedziemy
modyfikowac. Otworzy się nam okno z kodem tego programu i musimy przepisac numer ktory jest na na czarnym tle w
kolumnie address(najczesciej 00401000 choc moze byc inny)
Teraz musimy przekopiowac sekcje kodu do docelowego programu.
uzyjemy do tego programu LordPE
otwieramy go i klikamy na PE editor wybieramy plik ktory chwile temu modyfikowalismy i klikamy na
sections wybieramy ta sekcje ktora ma flage 60000020 (zwykle nazywa sie code lub text) i kliakmy na niej
prawym przyciskiem myszy i wybieramy save section to disc i zapisujemy sekcje w pliku na dysku
nastepnie otwieramy docelowy plik przez LordPE i postepujemy tak samo jak w przypadku pliku wczesniejszego z tym ze
tutaj robimy Load section from disc i wybieramy wczesniej zapisaną sekcje i zapisujemy(np. na kartce) VOffset
dodanej sekcji. i na nowej sekcji klikamy prawym przyciskiem myszki i klikamy na edit section header
ustawiamy flags na 60000020 klikamy ok. pozostaje jeszcze jedno zmienic entry point na ten zapisany na
kartce(Voffset).
wiec w pierwsze pole w glownym oknie wpisujemy nowy entry point i klikamy save.
Teraz trzeba bedzie zmodyfikowac adresy stringow na takie ktore mamy w kodzie na rysunku zaznaczylem gdzie sie
zaczynaja jakie stringi(string zaczyna sie znakiem a konczy 00)
http://img26.imageshack.us/img26/1110/63811952.jpg
http://img257.imageshack.us/img257/9539/56582823.jpg
Teraz trzeba w miejsce wskazane na drugim rysunku w miejsce RET wpisac JMP stary_entry_point
Np. JMP 00401000 Zapisujemy teraz plik(copy to executable->all modyfication) i cieszymy sie zainfekowanym plikiem.
kod zrodlowy
Ta metoda dziala tylko w systemie XP i nizszych gdyz w Viscie kernel32.dll nie jest ladowany zawsze pod ten sam adres
o tym jak zrobic to w viscie w cz.2 ktora mam nadzieje niebawem powstanie
Tutorial pochodzi ze strony grzonu.pl i nie moze byc kopiowany bez zgody autora