Ambalatori și programe de despachetare

A doua ediție, suplimentată

Subiectul acestui articol a apărut aici. În newsletter-ul Dummy. unul dintre guru-ii de care sunt, i sa pus următoarea întrebare:







Buna ziua tuturor! Explicați-mi, ce este un pachet de despachetare? Rummaged pe disc în program și a întâmpinat o astfel de bestie - "unpacker". Explicați ce puteți face cu asta? Pentru ce este? Cu ce ​​mănâncă? Înțeleg că acesta este un tip de program.

Prin urmare, despacheta. Acesta este programul de despachetare. În consecință, programul poate fi ambalat. Cum? Pentru aceasta, există ambalaje speciale. Dar, la început, să ne amintim ce înseamnă "ambalaj".

Archivers, sper că toată lumea știe. Exemple de astfel de programe sunt populare pe Internet WinZip și WinRAR. Arhivatorul vă permite să împachetați fișiere. Și care este ambalajul sau, cum se spune, compresia?

Mai ușor se poate imagina după cum urmează. Folosind metode algoritmice speciale, arhivatorul găsește secvențe repetate în fișiere și le înlocuiește cu coduri mai scurte. De exemplu, în fișiere text, câteva litere, de exemplu, "e", "a" sau un caracter spațiu, sunt repetate adesea. Arhivatorul calculează numărul de apariții de caractere în text și apoi construiește o tabelă simbol optimizată, în care cele mai comune simboluri au codurile cele mai scurte, ca și în codul Morse. Întregul text este recodificat în conformitate cu noul tabel, iar procesul se repetă din nou. La urma urmei, adesea nu se întâlnesc numai scrisori individuale, ci și secvențele lor, de exemplu, combinații de "pr", "st" sau "<запятая><пробел>"Transcodarea unui fișier se oprește atunci când dimensiunea după optimizare încetează să scadă.

Firește, arhiverele vă permit să comprimați nu numai fișierele text. Deoarece textul este prezentat sub forma unui set de coduri, arhivatorul cu aceleași succese comprimă și fișiere non-text. De exemplu, în fișierele program, cum ar fi EXE sau DLL, unele coduri de comandă sunt mult mai comune decât altele. În plus, mulți linkeri implementează așa-numita aliniere. în care segmentele individuale ale programului sunt căptușite cu zerouri până când dimensiunea segmentului devine un multiplu de o anumită valoare, spun 8 sau 16 octeți. În consecință, fișierele de programe conțin, de asemenea, o mulțime de "apă", care pot fi "stoarse" de arhivator. În medie, fișierele de programe se micșorează undeva cu 40-50%.

Comprimarea este foarte avantajoasă pentru difuzarea informațiilor, deoarece vă permite să plasați-o pe un mediu mai mic fără pierderi și să reduceți în mod semnificativ timpul de descărcare în rețea. Dar, arhivele create de programe de compresie convenționale au un dezavantaj semnificativ: fișierele din ele nu sunt disponibile direct. Pentru utilizarea ulterioară, fișierele trebuie să fie extrase din arhivă (despachetată). De obicei, acest lucru se face prin același program care a fost utilizat pentru ambalarea lor. Desigur, există un astfel de lucru ca arhivele de auto-extragere, dar nu schimbă esența problemei. Pur și simplu, pentru a despacheta o astfel de arhivă, nu sunt necesare programe suplimentare, și asta e tot. Și fișierele din acesta pentru utilizare directă sunt încă indisponibile.

- Ce milă! - vei spune. Am multe programe minunate pe care le folosesc rar, dar păstrarea lor în arhivă este incomodă. Și dacă aș putea rula programul fără să îl despachetez? Asta ar fi grozav! Este posibil?

Poate. Nu numai tu te-ai gândit la asta. Programatorii au creat mult timp o întreagă clasă de programe în acest scop. Sunați-i pe agenți de ambalare. Cele mai renumite programe de acest gen sunt LZExe, PKLite, DIET pentru DOS și ASPack pentru Windows. Acestea vă permit să împachetați programul, obținând un fișier executabil de dimensiuni mai mici. Adică, un anumit program, prg.exe, a avut o dimensiune de 800 KB, iar după compresie a scăzut la 350 KB, dar încă viabil.







Nu există nici o ficțiune în acest sens. Lucrările ambalatorului sunt asemănătoare cu munca arhivarului. De fapt, ambalatorul este un arhivator specializat care creează fișiere de programe executabile. Rezultatul lucrării sale este o arhivă cu auto-extragere conținând programul. Când rulați programul însuși despachetează și apoi începe să funcționeze.

Acțiunile ambalatorului sunt după cum urmează. Codul principal al programului (EXE, DLL, CPL, BPL etc.) este segmentat printr-o metodă sau alta (LZW, ZIP, etc.). Apoi, la începutul programului, se adaugă procedura de despachetare înainte de execuție, iar fișierul modificat este scris pe disc. Ambalatorii de programe pentru Windows încă scot pictograma principală a aplicației din fișierul de resurse și o leagă în formă neambalată, astfel încât fișierul programului din "Explorer" să arate decent.

Opțiunile de împachetare și despachetare sunt diferite. Versiunea cea mai simplă: programul este despachetat la pornire. În unele cazuri sofisticate care vizează lupta împotriva hackerilor, secțiunile de program sunt despachetate numai pe măsură ce sunt accesate la acestea (reduc performanța). Majoritatea ambalatorilor lucrează prin metoda "de la memorie la memorie", adică programul este decomprimat într-un segment nou de memorie și apoi de acolo începe. DIETA (poate unele implementări) a fost despachetat într-un fișier temporar pe disc, ceea ce este foarte incomod și nu există protecție.

Ambalarea programului este, de asemenea, cel mai simplu mod de ao proteja de hacking de către un hacker-cracker neprofesionist. Unii oameni fac asta. În plus, programul comprimat este sigur protejat împotriva virușilor, deoarece codul său principal nu este disponibil pentru modificarea de către virusul fișierului.

Cel mai popular exemplu al unui program care a fost întotdeauna furnizat sub forma unui fișier împachetat este Dr. Antivirus. Web. Versiunea DOS a programului este ambalată DIET, iar versiunea pentru Windows - ASPack'om. La urma urmei, probabil că l-ați folosit de mai multe ori. Web'om, fără a bănui că este ambalat.

După examinarea detaliată a procesului de programare a ambalajelor, putem reveni la întrebarea adresată la începutul articolului: "Ce este această fiară - despachetător?"

Dacă există programe de împachetare, veți spune, deci trebuie să fie despachetarea programelor. Fiecare blocare are o cheie proprie. La urma urmei, așa cum am menționat mai sus, ambalajul programului îl protejează de hacking de către un amator. Dar pentru profesioniști reali, aceasta nu este o problemă?

Bine. Despachetatorii au de asemenea suficient. Acestea sunt AutoHack, Intruder, CUP, etc. - toate acestea pentru DOS. Eu personal nu am un pachet de programe Windows. Deși, nu, mint, a fost una - UnASpack. Adevărat, a trebuit să despacheteze fișierele ASPack numai în versiunile anterioare și, prin urmare, era inutil - nu aveam astfel de fișiere. A fost menționată și UCFCUP32. Judecând după nume, ar trebui să fie versiunea Windows a CUP numit anterior. Nu trebuia să-l testez și nu pot spune nimic mai specific despre asta.

Există două metode fundamentale diferite pentru despachetarea programelor ambalate: orientate spre un pachet specific și metoda de urmărire.

O altă metodă de despachetare, - trasarea, - este fundamental diferită. A fost inventat de hackeri. Tracker rulează programul pentru execuție și apoi intră în modul debugger și încearcă să "detecteze" momentul în care programul este dezarhivat și controlul este transferat la acesta. Dacă acest lucru este posibil, trasatorul găsește segmentele de programe, le compilează și le scrie pe disc. Ei spun, de asemenea, că "elimină instantaneul din program" (așa cum sa scris în documentația pentru unele programe, se pare că este AutoHack sau Intruder). Fișierul rezultat nu va fi octet în octet identic cu programul original, deoarece metodele de structură diferă probabil între trasor și linkerul original al programului. Pe de altă parte, pentru sistemul de operare, ordinea scrierii segmentelor în fișier nu are absolut nicio valoare dacă programul funcționează corect. Astfel, trasarea este un mod universal de despachetare a programelor.

Nu întotdeauna, însă, este posibil să "prindeți" momentul lansării programului despachetat. Există metode de deghizare îndreptate împotriva marcatorilor. Una dintre ele a fost deja menționată la revizuirea ambalării programelor - despachetarea părților programului, pe măsură ce se apropie de acestea. Dacă la runtime programul nu este niciodată complet decomprimat, atunci niciun trasor nu va ajuta. Deși ambele metode de protecție și metodele de hacking sunt în mod constant îmbunătățite.

În concluzie, permiteți-mi să citez un exemplu mai concret. În timpul testării, CUP pentru DOS, care lucra prin urmărire, a despachetat toate fișierele pe care i le-am dat. Inclusiv ambalate cu cele mai exotice programe, pe care dezvoltatorii CUP nu le puteau cunoaște. Toate acestea confirmă încă o dată ceea ce sa spus despre markere.

Dacă știți ceva nou despre agenți de împachetare sau de despachetare a programelor și, de asemenea, aveți întrebări pe această temă, scrieți. Voi fi foarte fericit.


[a apărut o eroare în timpul procesării acestei directive]

[a apărut o eroare în timpul procesării acestei directive]







Articole similare

Trimiteți-le prietenilor: