Hacking and more...
HaCkinG CulT
Lista Forumurilor Pe Tematici
Hacking and more... | Reguli | Inregistrare | Login

POZE HACKING AND MORE...

Nu sunteti logat.
Nou pe simpatie:
bruneta99
Femeie
25 ani
Satu Mare
cauta Barbat
25 - 50 ani
Hacking and more... / n00bs / Cum sa scrii primul tau virus Moderat de Shocker
Autor
Mesaj Pagini: 1
andoseg
Little Kevin

Inregistrat: acum 17 ani
Postari: 68
Am gasit pe net un tutorial care explica mai pe larg cum sa faci un virus :

---->Cum sa infectezi un fisier COM<-----
                   de iRQ9

Atentie pentu cei caposi si supergeniali- acest tutorial a fost scris pentru cei
care n-au scris încă nici un virus.

Doresc ca prin acest tutorial sa dau viata unui nou subiect de studiu la Moldhack
- virusologia sau arta de a scrie virusi.

Probabil ca nu este om in ziua de azi care n-a auzit de virusi. Contrar însa
tuturor legendelor, virusii nu sunt niste fenomene supranaturale. Îmi amintesc
cum cineva m-a îtrebat o dată dacă e drept ce a auzit ea - că virusii de calulator
pot fi contactati dacă se fumează în birou... Imaginati-vă cum m-am simtit atunci.
Nu-mi venea să cred ce auzeau urechile - ori persoana îsi bateea joc de mine, ori
era adînc în bezna necunostintii... Pînă la urmă ultima s-a dovedit a fi valabilă.
Dar  chiar si un cunoscător în ale calculatoarelor s-ar putea întreba într-o
zi: cît de greu e să scrii un virus ?

Răspunsul e simplu: este usor să creezi un virus, alta e problema să creezi un virus
puternic.
Sper că intelegeti că prin puternic, am invedere următoarele lucruri:
    -virusul sa fie greu de detectat de programe antivirus
    -virusul sa fie fecund - adica sa se reproduca rapid, prin
     căi diverse si inobservabil (asta apropo de unitatile de
     flopy-disk, care încep din senin să lucreze ).

Dar, cum eu sunt un om pasnic, si nu ma intereseaza sa fac altora rau,
tema acestui tutorial va fi cu totul si cu totul neasteptata...
Cum sa utilizam virusii in alte scopuri. De exemplu crackuirea programelor.
Sau inversul- protejarea programelor. Desi acesti ultimi virusi, nu sunt virusi
in adevaratul sens al cuvintului- adica le lipseste functia de reproducere.

In crearea unui virus in fata noastra apare urmatoarea problema:
    -cum sa facem ca virusul sa coexiste cu programul infectat,
     sa-si indeplineasca sarcinile sale, dar sa lase si programul
     sa lucreze.

Eu consider ca aceasta este principala caracteristica a unui virus,
care odata implementata ofera posibilitatea ca virusul sa-si indeplineasca
toate sarcinile sale, iar sarcinele pot fi:
    -autoreproducere
    -automodificrea
    -spionarea calculatorului gazdei
    -sarcini distructive, de santajare, etc
    (virusul poate sa va incripterze tot hardul si pina nu veti trimite
    1000$ pe contul xxxxxx, nu veti primi cheia de decriptare- sa nu
    ziceti ca eu v-am dat aceasta idee ).

Acestea sunt sarcini pentru care sunt utilizati in mod obisnuit virusii.
Dar de ce sa nu-i utilizam si in alte scopuri? Cuma ar fi de exemplu:
    -crackuirea unor programe
    -protejarea unor programe
    -adaugarea de functii noi programelor

lista nu se incheie aici si sper ca voi o veti continua la nesfirsit.

Sa vedem totusi cum poate fi infectat un program. Desigur ca tehnici
exista multe, si sper ca pe viitor vor aparea pe pagina noatra noi
eseuri pe aceasta tema. Pentru inceput sa ne punem insa o sarcina
simpla- infectarea unui fisier executabil de tip COM. La aceasta faza,
sa zicem, ca nu conteaza sarcina pe care acesta o va indeplini.
Pentru inceput ajunge ca el sa ne ceara o parola pentru
a executa acel program. Autoreproducerea, distrugerea, si santajul il las
pe seama celor mai violenti. Din aceste functii ale virusului as spune ca
doar autoreproducerea e un subiect demn de discutat, in rest orice prost
poate sa-ti stearga hardul sau sa-ti violeze sectorul BOOT. Urasc pe cei
violenti, deci nu vom discuta aceasta aici. Înca un lucru pe care îl urasc-
sunt caii troian.

Pentru a continua aveti nevoie de cunostinte minime de asembler, daca
nu le aveti  puteti doar sa va faceti o inchipuire vaga asupra ce vom
discuta in continuare.

Dupa cum sper ca stiti, fisierile COM sunt cele mai simple programe
executabile sub DOS. Nu exista nimic complicat in faptul cum  se
incarca aceste programe in memorie.
Principiul e simplu:
ce vedeti ca se patreaza in fisierul COM acelasi lucru va fi incarcat
in memorie, dupa care sistemul de operare va da control acelui program
printr-un salt la adresa  unde a fost incarcat programul.
Repet- ceea ce se incarca in memorie este o replica exacta a ceea ce se
pastreaza in fisier.
Veti intreaba- oare nu e evident, oare nu e logic sa fie asa?
Bine daca va ajuta cu ceva... la fisierele EXE lucrurile nu sunt
chiar asa simple si daca schema de infectare pe care v-o propun
se poate lauda cu faptul ca ocupa doar vreo 10-15 bytes (atentie,
schema de infectare doar, fara sarcinele pe care le are virusul),
atunci infectarea unui fisier EXE este cu mult mai anevoiasa.

Fisierele COM nu pot depasi ca lungime 65536 bytes, adica exact
portiunea de memorie ce poate fi adresata de un WORD(2 bytes). Toate jump-urile
si call-urile intr-un fiser COM sunt de tip near, adica nu depasesc limita
de memorie adresabila printr-un WORD. Iata ce face posibil ca programului
sa-i  fie indiferent in ce segment ruleaza el- atita timp cit adresele sunt
codate ca adrese relative. Adica presupunem ca la adresa CS:200h aveti urmatoarea
instructiune:

CS:00000100        JMP 000060D7h    ; code:  E9 D4 5F
CS:00000103        ...   
...            ...
...            ...
CS:000060D7            PUSH EAX       
...       


Codul de la  CS:00000200 si anume instructiunea JMP 300h va fi codata
pe 3 bytes: E9 D4 5F

E9 este codul instructiunii JMP care are ca argument un word,
nu toate JMP-urile sunt codate cu E9, aceasta depinde de tipul
argumentului- (constanta, registru, variabila) si de marimea lui (BYTE, WORD, DWORD).
Dar ce naiba inseamna D4 5F? Ei bine, dupa cum stiti sau acus veti
afla valorile WORD se pastreaza in memorie cu fundul in sus:
D4 5F nu inseamna altceva decit 5FD4. Daca nu stiati acest lucru
atuci acesta e un motiv in plus sa gasiti o carte buna de asembler .
Dar ce inseamna 5FD4? Ei bine, ajunge atita suspans-
in contextul dat  5FD4 nu inseamna altceva decit 'sari la instructuiunea
ce se afla cu 5FD4 bytes in jos dupa mine'. Observati formularea:
cu 'cu 5FD4 bytes' si nu 'sari la...'. Cu alte cuvinte, daca inca
n-ati priceput: 5DFD4 =  60D7 - 0103 .
0103 este adrsa instructiunii ce urmeaza imediat dupa JMP-ul nostru,
este logic - atita timp cit instructiunea noastra ocupa 3 bytes.

Ca sa mai exersam un pic:

CS:00000100    JMP 103h  ; este codat ca E90000,

    dar va asigur ca compilatorul va optimiza acest cod
    prin:
   
CS:00000100    JMPS 103h ; code:  EB 01
CS:00000102    NOP       ; code:  90
   
JMPS - este un JMP SHORT.
Puteti sa va mai jucati cu aceste lucruri, si veti vedea
ca nimic nu e intamplator in faptul cum codeaza asemblerul
instructiunile voastre.
Puteti sa scrieti aceste  instructuiuni la adrese diferite
direct din debuger si sa vedeti cum acesta le codeaza.

Sa revenim insa la virusi si sa vedem in sfirsit banala
schema de infectare a unui fisier COM.

Va prezint probabil cea mai simpla schema existenta
pina acum, pe care eu am elaborat-o si am folosit-o
inca pe cind aveam vreo 15 ani . Dar ca la majoritatea
lucrurilor pe care le descoperi la aceasta virsta - iti
dai seama ca ele deja de mult au fost inventate de altii,
ba chiar se folosesc pe larg.

Înainte de a infecta programul sa ne intrebam cind dorim
sa intre in actiune codul virusului? Posibil ca
doriti ca acest lucru sa se intimple inainte ca progrmul
sa intre in actiune, dupa care sa dati controlul programului.
Dar s-ar putea ca virusul sa intre in actiune la un moment dat
in executia  programului - de exemplu un virus care la un
moment dat apas un buton pentru voi.
Schema pe care v-o prezint este valabila pentru ambele
cazuri. Noi insa il vom studia pentru simplitate pe primul.

Cum se  realizeaza implantarea virusului intr-un fisier COM?
Veti fi tentati sa credeti ca acest lucru se poate realiza
prin simpla inserare a codului virusului la locul dorit.
De exemplu daca doriti ca virusul se execute la începutul
programului- veţi insera codul virusului la începutul
fisierului COM. Gresit. Încercati.
Veti deplasa astfel tot codul programului cu un numar de
bytes egal cu lungimea virusului.
JUMP-urile relative vor ramîne valabile -este corect,
dar nu si referintele la date. De exemplu daca ne referim
la o adresa absoluta  500h  unde se pastreaza o variabila,
dupa inserarea codului viruslui care are de exemplu lungimea
de 300h bytes, variabila noastra se va afla deja la adresa 800h.

Nu uitati ca un fisier COM nu are un segment de
date aparte. Datele si codul sunt pastrate la gramada,
în acelasi segment. Este sarcina programatorului sa
faca ca firul de executie al programului sa nu intre
peste date. În acest scop majoritatea programatorilor
plaseaza datele la începutul programului, iar inaintea
lor, un JMP care sare peste ele. Priviti:
       
CS:00000100h    JMP 0000700h    ;Aici incepe programul, si imediat
...        ...        ;urmeaza datele
...        DB 3,4,5,0    ;Aici se stocheaza datele
...        ...

CS:00000700H    PUSH EAX     ;Aici începe codul programului
...        ...
...        ...
   
Deci, inserarea codului virusului la inceputul sau în interiorului
programului nu este o solutie vitala. Pentru ca astfel corupem
referintele la adrese absolute.

Sa ne gîndim la altceva.
V-ati gindit oare de ce v-am povestit atit de mult cum
se codeaza instructiunea JMP ? În curind veti afla.

Ideea mea este de a scrie codul virusului la sfirsitul
programului, si ca sa-l facem sa se execute inainte de
a intra in actiune programul sa plasam la inceputul
programului un JMP, care ne arunca exact la locul unde incepe
codul viruslui (adica la sfirsitul programului).
Cind am spus 'plasam un JMP la inceputul programului' am
avut in vedere faptul ca instructiunea noastra (care ocupa 3 bytes)
se suparascrie peste primii 3 bytes a porgramului astfel
evitam deplasarea codului.
Deaceea cind realizam infectarea acesti trei bytes trebuie
memorati undeva printre datele virusului. Dupa ce virusul
se executa, acesti bytes se restabilesc (adica se sterge
JMP-ul nostru) si sarim din nou la inceputul programului.
Programul va rula in pace. Doar daca virusul nostru n-a
schimbat registri sau flag-uri de care programul nostru
facea uz. Desi, la inceputul programului acest lucru e
mai putin grav, fiti prudenti totusi si folositi instructiunile
PUSHA, PUSHF la începutul codului virusullui si POPF, POPA la
sfirsitul lui, pentru a salva/restabili registrii si flag-urile.

Sa exemplificam. Avem urmatoarea tinta - programul TEST.COM.
Dorim sa-l infectam.
Fie:
lungimea programului    Lp= 1000h (4096 în zecimal) bytes
lungimea virusului    Lv= 0200h
Prin urmare programul infectat va avea 1200h bytes.

Am uitat sa va spun ca înainte de a fi rulat, unui program
COM i se atribuie un segment de cod unde acesta va rula. Acesta
se pastreaza în registrul CS. Numai ca, codul programului
nu va fi încarcat în cadrul acestui segment de la adresa
CS:00000000 cum s-ar putea sa credeti, ci de la adresa.
CS:00000100, astfel se rezerva loc pentru asa numita zona
PSP, unde printre alte lucruri interesante veti gasi si
linia de comanda cu care ati rulat acest program.
Mergem mai departe.

Sa presupunem ca programul care trebuie infectat arata cam asa:


Adresa:        Codul:        Instructiunea:           
______________________________________________   
CS:00000100    50        PUSH EAX   
CS:00000101    B4 09        MOV AH,09h
CS:00000103    BA 3B 01    MOV DX,013Bh
...        ...        ...
...        ...        ...
...        ...        ...
...        ...        ...
CS:00001FFF    90        NOP        ;Ultima instructiune   
-----------------------------------------------

CS:00001100    ???        ???        ;Aici vom baga virusul


Observam ca primii 3 bytes din acest program sunt: 50 B4 09.
Atentie! Ei trebuie salvati cind realizam infectrea pentru
ca peste ei vom scrie instructiunea JMP 01000h (care ocupa
3 bytes).

Iata cum va arata programul infectat:


Adresa:        Codul:        Instructiunea:           
______________________________________________   

CS:00000100    E9 FD 0F    JMP 1100h    ;sarim la virus

CS:00000103    BA 3B 01    MOV DX,013Bh    ;restul programului
...        ...        ...        ;ramîne nemodificat
...        ...        ...
...        ...        ...
...        ...        ...
CS:00001FFF    90        NOP        ;Ultima instructiune   
______________________________________________    ;din program
       
CS:00001100    60        PUSHA        ;Aici icepe virusul
CS:00001101    9C        PUSHF        ;salvam registrii
...        ...        ...        ;si flagurile.

...        ...        ...        ; Aici actioneaza
                          virusul

;Dupa ce virusul si-a facut treaba, vom restabili primii 3 bytes din program:

CS:000012D0    C6 06 00 01 50    MOV BYTE PTR [100],50h
CS:000012D5    C6 06 00 01 B4    MOV BYTE PTR [101],B4h
CS:000012DA    C6 06 00 01 09    MOV BYTE PTR [102],09h
CS:000012DF    ...        ...
...        ...        ...

;JMP-ul nostru a fost sters!
;Acum putem sa sarim linistiti inapoi la inceput:

CS:000012E9    9D        POPF        ;restabilim flagurile
CS:000012FA    61        POPA        ;restabilim registri
CS:000012FB    BE 00 01    MOV SI,100h
CS:000012FE    FF E6        JMP SI        ;si gata
-----------------------------------------------
CS:00001300    ???        ???

       
Atrageti atentia cum sunt encodate instructiunile de
restabilire a primelor trei bytes. Observama ca
bytii de restabilit (50, B4, 09 ) se afla la adresele
de memorie CS:000012D4, CS:000012D9, CS:000012DE.

Dupa ce am vazut programul infectat putem sa ne dam seama
cum se realizeaza infectarea.
Presupunem ca codul virusului nostru se pastreaza intr-un
fisier VIRUS.DAT (cu lungimea Lv=200h).

Iata etapele de parcurs:

1). Citim primii 3 bytes din TEST.COM -> 50, B4, 09
2). Acum corectam operanzii instructiunilor de restabilire
    din VIRUS.DAT.
Daca in memorie acesti bytes se afla la adresele:
    CS:000012D4, CS:000012D9, CS:000012DE,
În fisier ele se vor afla la offseturile 01D4h, 01D9h, 01DEh.
Mai bine zis ele se afla la acele adrese de memorie
pentru ca de exemplu:
    CS:000012d4 =CS100h+Lp+01D4h)

Sper ca e clar. Daca nu - mai reflectati.

3). Acum scriem linistiti peste acesti trei bytes din TEST.COM
codul instructiunii     JMP [Lp] adica JMP 1100h,
care se codeaza astfel:     (E9 FD 0F) .
Amintesc ca (E9) este codul instructiunii JMP,
iar (FD 0F) înseamna     (0FFDh)01000h-03h)= ( Lp-3 ).

Sper ca e clar. Daca nu - mai reflectati.

4). Ne-a ramas cel mai usor lucru.
Adaugam codul virusului la capatul fisierului TEST.COM

5). Gata.

Mentiuni:
Am descris în acest tutorial numai principiul de infectare a unui
program.
Ramîne la latitudinea voastra scrierea virusului propriu zis
(adica a sarcinilor pe care acesta le executa).
O singura mentiune: desi am evitat coruperea referintelor
la adrese absolute din cadrul programului,
trebuie sa intelegeti ca virusul in sine nu e protejat de
asa ceva. În dependenţă de lungimea programului infectat,
virusul se va pomeni la adrese diferite.
Partea buna este că virusul îl scrieti voi si cunoasteti
locurile unde se fac referinte absolute la memorie- la infectare
puteti corecta aceste referinte cu lungimea programului (Lp).
Va sfatuiesc sa aveti un singur loc de acest fel - cel în
care veti baga (Lp) într-un registru de exemplu (DX). În continuare
referindu-va la adrese absolute folositi ca baza acest registru.

Sper ca e clar. Daca nu - mai reflectati.

Ca sa aveti un exemplu veti gasi pe moldhack, sectiunea SOFT,
programul 'COM password Installer'.
Sarcina acestui "virus" este de a proteja programele COM cu
parola, dar putea  fi si alta

Studiati-l cu succes


_______________________________________

Wherever you go i'll see you

pus acum 17 ani
   
cyber
Elite Member

Din: www.kellot.lx.ro
Inregistrat: acum 17 ani
Postari: 528
intrebare .....poate stupida......in ce program scri schema virusului?

_______________________________________
..::Nu am mai trecut de mult pe aici::..

..::[][]::..

pus acum 17 ani
   
k4hvd
Grand Master

Din: Oradea
Inregistrat: acum 17 ani
Postari: 322
suntem in anul 2007 si .COM-urile nu mai sunt folosite decat foarte rar. nu vad de ce te-ai axa pe virusi care infecteaza astfel de fisiere (nu vad, de fapt de ce te-ai axa pe virusi in principal.. )

pus acum 17 ani
   
Zero_Cool
Pe lista neagra

Inregistrat: acum 17 ani
Postari: 796

k4hvd a scris:

suntem in anul 2007 si .COM-urile nu mai sunt folosite decat foarte rar. nu vad de ce te-ai axa pe virusi care infecteaza astfel de fisiere (nu vad, de fapt de ce te-ai axa pe virusi in principal.. )


Ai dreptate. Da e bine ca sa stii pe viitor 


pus acum 17 ani
   
tot_Zeu
Vizitator



mi se pare mie sau e ASM 8086

pus acum 17 ani
   
pudramadre
Little Kevin

Inregistrat: acum 17 ani
Postari: 77
COMurile poate ca nu mai sunt folosite, dar totusi windowsul are si el cateva COMuri. Dupa cum. Si dupa cum spunea si Zero_Cool, e bine sa stii pe viitor.  

pus acum 17 ani
   
Vektor
Little Kevin

Din: Arad
Inregistrat: acum 17 ani
Postari: 77

k4hvd a scris:

suntem in anul 2007 si .COM-urile nu mai sunt folosite decat foarte rar. nu vad de ce te-ai axa pe virusi care infecteaza astfel de fisiere (nu vad, de fapt de ce te-ai axa pe virusi in principal.. )


Trecand peste asta...


tot_Zeu a scris:

mi se pare mie sau e ASM 8086


si peste asta...


pudramadre a scris:

COMurile poate ca nu mai sunt folosite, dar totusi windowsul are si el cateva COMuri. Dupa cum. Si dupa cum spunea si Zero_Cool, e bine sa stii pe viitor.  


Fishierele .COM din windows NT/2K/XP/etc sunt de fapt exe-uri redenumite.


andoseg a scris:

Am gasit pe net un tutorial care explica mai pe larg cum sa faci un virus :


Inainte sa dai paste orbeshte cu tutoriale gasite pe net citeshte-le si incearca sa intzelegi ce e acolo. Poate pentru a intzelege ai nevoie sa citeshti inainte alte tutoriale...


andoseg a scris:

CS:00001FFF    90        NOP        ;Ultima instructiune   
______________________________________________    ;din program
       
CS:00001100    60        PUSHA        ;Aici icepe virusul


Poate ar trebui sa citeshti prima data despre baza 16 si eventual ceva notziuni de baza despre programare. Un program nu poate sa se termine cu NOP.


_______________________________________
Forum ']['€AM€LiT€: http://portal.te-home.net/forum
Forum HeXHub: http://meka-meka.com/forum/viewforum.php?f=52 , http://www.thenighthawk.biz/index.php?option=com_smf&Itemid=14

pus acum 17 ani
   
Pagini: 1  

Mergi la