Assembler este ușor! A învăța să program de eliberare n 020 (virus) (BLER) buletinul informativ

Înainte de a începe studiul materialului în această versiune, ar trebui să citiți cele anterioare.

Întrebările pe care le primesc de la începători (vă rugăm să le citiți!):

prietenii mei! Nu m-am așteptat că voi obține în jur de 300 de Anul Nou fericit! Vă mulțumesc tuturor foarte mult! Citind multe scrisori am vărsat chiar o lacrimă! Sincer! Foarte frumos! Eu pot, la rândul său, vă doresc tuturor un Crăciun fericit. Deși în trecut, dar încă.

Astăzi avem un jubileu, ediția a XX. Mă bucur că am ajuns în cele din urmă acest număr. Sper că împreună vom merge mai departe. Ajungeți sutele. Imaginați-vă "Eliberarea de N 126 (browser profilându)". Da. Eyed visare.

Eu încă obține o mulțime de email-uri cu întrebări de genul: „? Vom lua instrucțiuni MMX, etc.“ Desigur, vom face! Dupa ce termina DOS, vom ajunge în jos la Windows, în cazul în care tot farmecul și ia în considerare procesoare Pentium. Cel puțin, așa sper.

Încă o dată, unele podpschiki aștept cu nerăbdare să programarea în limbaj de asamblare sub Windows. Dar cea mai mare parte a echipei noastre este familiarizat cu DOS. Eu cred că ar fi oportun să se treacă DOS, ca să spunem așa, „simt că, ca un pește în apă.“ După aceea începe prespokoynenko programarea sub Windows. Am chiar și în timp ce face planuri pentru unificarea celor două Brosurile: programare în limbaje de nivel înalt, cum ar fi: C ++, Pascal, etc, și de către asamblorii noastre ..

Poate că, așa cum am trece la Windows, în buletinul nostru va co-gazda. Ie newsletter-ul va transporta 2-3 persoane pe picior de egalitate. Vor fi mai multe discuții, dezbateri, diverse discuții și așa mai departe. Acum ai învățat practic, scrie algoritmii programului pe care voi antena de satelit. Desigur, acestea nu sunt întotdeauna optime la 100%. La urma urmei, aceeași problemă poate fi rezolvată în mai multe moduri. Nu-i așa? Cred că vom face forum de discuții online, unde oricine poate pleca pentru o revizuire generală decizia a unei probleme, algoritm, un program, etc. Ei bine, pe care le pot folosi acum CGI, SSI, etc. Ce crezi că va fi interesat? Ce altceva poate oferi?

Cum de a rescrie dosarul de cerere în fișiere text din DOS?

  • marca „mouse“ tot ceea ce este în fereastra de mai sus (butonul din dreapta al „mouse-ului“ ---> Selectați toate (Selectați toate));
  • Apăsați pe Ctrl + Insert;
  • rula DOS Navigator, Norton Commander, Volcov Commander sau FAR;
  • Apăsați pe Shift + F4;
  • VIRUS20.ASM introduceți numele fișierului;
  • apăsați Shift + Insert;
  • Apăsați F2;
  • iesire la DOS și asambla!

Esti gata pentru a afla in problema aniversare infecta alte programe? a venit timpul. Acum Virus nostru este pe deplin funcțional. Fii atent! infectarea Accidental fișierul dorit, va trebui să-și petreacă ceva timp pentru a vindeca manual. Imediat vă avertizez: nu am scris anti-virus. Am fie au. Deci, fii foarte atent!

1) Virus rezident. Acest lucru înseamnă că va infecta programe numai dacă executați o com-fișier infectat. În memoria nu mai este nimic!

2) Virusul nu face nimic, dar infectează fișiere.

3) Nici unul dintre antivirus nu vindeca un fișier infectat cu virusul nostru! Deci, nu se așteaptă nici Dr. Web, sau pe orice altceva.

4) Virusul infectează numai * .com-fișierele din directorul curent. Ce înseamnă? De exemplu, în directorul c: \ ASSM au următoarele fișiere:
1. test.com
2. dn.com
3. nc.exe
și, test.com infectate cu virusul nostru. Lansarea test.com pentru a efectua, acesta infecteaza dn.com. Dn.com rulează atunci nu contracta virusul, deoarece în acest director nu mai este nostru virus neinfectați * .com-fișiere.

DAR! Dacă sunteți în calea (în autoexec.bat), în valoare de cale către directorul c: \ ASSM, cursa test.com din directorul curent, de exemplu, c: \ nc, virusul va infecta primul nostru contra-com-fișier în directorul c: \ nc. Fii atent.

În cazul în care, cu toate acestea, au fost ceva probleme, și nu știi cum să eliminați virusul care a infectat intregul calculator, apoi trimite imediat mi un e-mail. Voi explica cum de a restabili fișierul infectat. Cu toate că, în cazul în care, înainte de a alerga virus20.com pentru a efectua, puteți citi descrierea să-l și dau peste tot, lucrările pentru a restaura fișierul infectat nu va fi. Dacă aveți timp, voi așeza pe site-ul de pe pagina de start antivirus (doar în cazul. Și dintr-o dată pe cineva veni la îndemână?). Și, în general, se pot scrie antivirus? Desigur! Voi fi bucuros să se familiarizeze cu creativitatea. Trimite optiuni!

5) * .Com-fișiere în directorul c: \ windows \ comandă, după infectare refuză să funcționeze corect. Care este motivul - nu este foarte clar. Gritting aceste fișiere Pklite, rezultatul a fost același (de exemplu, determinarea incorectă a liniei de comandă). Cel mai probabil, ei conta sumă de control sau altceva. Poate, cine știe - a scrie. Nu am timp pentru a înțelege. Pentru experimente vor trebui să caute alte * .com-fișiere.

În edițiile viitoare, vom scrie un antivirus și am venit la acest rău, inofensiv, dar un interesant și se răcește pentru a face virusul nostru.

Acum, mai mult, până la punctul.

Întrebare: Este posibil în loc de RET și folosi CALL JMP? Și în loc de JMP - RET?

Desigur, puteți! Iată un exemplu simplu:

În unele cazuri, este util să se utilizeze comenzi non-standard.

De ce spun acest lucru? Vă rugăm să rețineți, acum ne întoarcem la eticheta de inițializare a virusului (Inițializare):

împinge de offset Init; 3 octeți
ret; 1 octet

Cum fișierul infectat?
Care este „fișierul victimă“ după infectare?

Fișier Infecția apare după cum urmează (vezi procedura Infect_file). Omite căutarea de fișiere. Vom presupune că fișierul a fost deja găsit. Rămâne doar pentru a verifica lungimea sa:

mov ax, cs: [1Ch]; obține al doilea cuvânt din lungimea fișierului infectat
sau topor, ax; În cazul în care nu este 0, atunci de ieșire.
jnz Error_infect ;. Acest lucru înseamnă că dimensiunea fișierului este mai mare de 64K.
mov bp, cs: [1Ah]; obține cuvântul low-ordine (adică, dimensiunea fișierului)

De ce verifica lungimea com-fișier, în cazul în care este cunoscut faptul că com-fișiere nu pot fi mai mult de 64K? Faptul că DOS determină ce tip de fișier nu este pornit să se extindă, iar în primele două bytes de conținutul fișierului. În cazul în care acest lucru este "MZ" sau "ZM", atunci fișierul - EXE, în caz contrar - COM. Puteți verifica. Astfel, nimic nu împiedică pe oricine pentru a redenumi un fișier, de exemplu, test.exe 450Kb în lungime test.com. DOS va determina în continuare că acest EXE-fișier în primii doi octeți.

Un exemplu este COMMAND.COM, care ocupă 95KB DOS 7.0. extensie COM au lăsat pentru compatibilitate cu programele scrise pentru versiunile mai vechi de DOS.

Deci, ce se întâmplă dacă încercăm să infecteze Command.com același lucru, care este în esență un COMMAND.EXE? Oh, nimic! Vom doar în bară! Ie acesta va înceta să lucreze la toate. Asta pentru acest lucru și ar trebui să verificați dimensiunea de faptul că acesta este mai mic de 64K.

Observați cum o facem. După funcția 4Fh (4EH) găsit un fișier în DTA la offset 1Ah a intrat dimensiunea fișierului. pentru că doi octeți poate stoca un număr de până la 65.535, cele două cuvinte sunt folosite pentru a determina mărimea fișierului. Primul (offset 1Ah) - jumătate mai mic al doilea (offset - 1Ch) - mai în vârstă. Ne amintim că datele sunt stocate în memorie din contra ( „înapoi“).

Ceea ce nu am făcut în virus, deci este - nu am verificat primul simbol două (MZ). De ce? Și ce dacă exe-fișier are o lungime mai mică de 64K, dar extinderea COM? Acest lucru, de asemenea, poate fi. Ei bine, doar cineva glumit. Sper că te faci singur cu ușurință.

  • deschide fișierul găsit citire / scriere (3D02h);
  • primele șase bytes (3Fh) citește;
  • Verificăm dacă fișierul este infectat cu un virus noastre deja sau nu încă.

Aici, ne oprim pe scurt. În exemplul nostru, vom folosi așa-numitul semnătură 1122h pentru a determina dacă fișierul infectat gasit virusul nostru sau nu. Această semnătură ar trebui să fie situat la 4 compensate de la începutul fișierului. Vă rugăm să rețineți că vom verifica

cmp cuvânt ptr [bx + 4], 1122h

și fișierul 1122h vor fi staționate pe dimpotrivă: 2211h. Aici aveți o altă dovadă că datele sunt stocate în calculator „înapoi“.

Și dacă într-un fișier neinfectați la offset 4 de la început au deja o astfel de linie? Se pare că am simțit că fișierul este deja infectat? Da. Dar ce crezi, ceea ce este probabilitatea ca semnătura va fi în fișierul pe o astfel de schimbare? Poate, chiar, și fișierul ceva nu. Dar dacă sunteți încă în dubiu, puteți face o semnătură mai lungă. De exemplu, 6 octeți. Este o chestiune de timp.

Așa că am verificat. Apoi setați indicatorul de fișier la sfârșitul fișierului. Vom construi pe coada de fișier virus.

După cum puteți vedea, vom folosi funcția 4202h pentru a muta cursorul la sfârșitul fișierului. Aici, uita-te la această caracteristică:

Funcția 4202h 21h întrerupe: Setarea pointerul la sfârșitul fișierului.

AX = 4202h
BX = numărul de fișier
CX, DX = numărul de octeți nobhodimosti conta de la sfârșitul fișierului și instalați-l pe indexul lor.