Exe Packer

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

Un pachet este un instrument care vă permite să faceți mai dificilă analiza unui fișier executabil sau, pur și simplu, reducerea dimensiunii acestuia. Ambalatorii sunt adesea utilizați în versiuni limitate de produse comerciale pentru a preveni sau cel puțin a descuraja crearea fisurilor . Folosesc tehnici anti-depanare și anti-demontare din ce în ce mai avansate care, dacă nu sunt interpretate în mod corect de către depanator / dezasamblator, fac ca crackerul (sau inversorul în general) să piardă mult timp.

Structura

Un pachet, odată procesat un fișier executabil, produce un nou fișier executabil (denumit în mod obișnuit „pachet”) a cărui structură constă dintr-un „încărcător” polimorf (cel puțin în pachetele recent dezvoltate) flancat de o versiune modificată, de exemplu de mijloace de algoritmi criptografici, ai codului original. Încărcătorul, odată executat, va efectua apoi operațiile necesare pentru a restabili codul original și a-i da control.

Tehnici utilizate de ambalatori

Tehnicile folosite de ambalatori sunt multe și, cel puțin cele mai cunoscute, sunt detectate și gestionate corect de cele mai comune dezasamblatoare. În special, dezasamblatorii precum IDA pro sunt capabili să recunoască prezența unui ambalator și să permită dezasamblarea selectivă a codului (utilizatorul decide ce să dezasambleze și ce nu). Tehnicile pot fi împărțite în 2 macro categorii: tehnici anti-depanare și tehnici anti-demontare (deși uneori distincția nu este atât de clară). Tehnicile anti-depanare sunt tehnici menite să împiedice depanarea aplicației încercând, de exemplu, să detecteze dacă un depanare este în desfășurare. Tehnicile anti-demontare sunt tehnici menite să facă dezasamblatorul să piardă alinierea pentru a masca instrucțiunile mașinii care decurg din acest proces de decodare.

Cod Junk

Codul nedorit este o tehnică care constă în amestecarea datelor și a codului împreună. Această tehnică are scopul de a face dezasamblatorul să piardă alinierea, care va încerca să decodeze datele (și, prin urmare, nu instrucțiunile). Tehnica utilizată de cei mai avansați dezasamblatori este de a considera drept „date” tot ceea ce, pe parcursul programului, nu va fi executat niciodată (chiar dacă adesea nu este foarte ușor să-l determinăm a priori din cauza predicatelor opace ). Codul junk este ușor de identificat chiar și de o ființă umană, deoarece decodificarea acestuia produce de obicei:

  • eroare, codul nu se potrivește cu niciun opcode. În acest caz, prezența codului junk este evidentă.
  • instrucțiuni privilegiate, foarte neobișnuite pentru un program la nivel de utilizator.
  • sare la porțiuni de cod care sunt vizibil în afara programului. Acest lucru se întâmplă dacă codul junk corespunde unei instrucțiuni de salt (condițional sau nu).

Codul nedorit poate fi folosit și în alte scopuri. De exemplu, luați în considerare această bucată de cod:

 apel func1
     DB ...
     jmp undeva
  
  ...
  
  func1:
     pop ebx
     inc ebx
     împinge ebx
     ret

În această bucată de cod func1 se numește func1 care mărește adresa de returnare a func1 pentru a vă asigura că „DB ...” nu este executat. Când analizați această bucată de cod cu un depanator, este ușor de văzut că trecerea funcției "func1" nu are efectul dorit: execuția continuă până la sfârșitul programului. Acest lucru se datorează faptului că cele mai frecvente instrumente de depanare, atunci când efectuează step-over-ul, stabilesc un punct de întrerupere imediat după apelul de funcție. În consecință, pentru un depanator, o funcție nu este terminată până când indicatorul de instrucțiuni nu indică instrucțiunea care urmează CALL (ceea ce nu se întâmplă niciodată când se utilizează această tehnică). În consecință, inversorul este forțat să intre în fiecare funcție.

Predicate opace

„Predicatele opace” sunt porțiuni de cod care returnează o valoare booleană predeterminată care, dintr-un anumit motiv, trebuie calculată în timpul rulării. Luați în considerare acest exemplu:

 mov eax, 1
  ...
  cmp eax, 1
  je func1
  jne undeva

Instrucțiunea „cmp eax, 1” va reveni întotdeauna adevărat, dar totuși valoarea sa trebuie calculată din când în când în timpul rulării. Această tehnică, coroborată cu cea a codului junk, poate fi suficientă pentru a confunda cei mai simpli dezasamblatori făcându-i să-și piardă alinierea (dezasamblatorul nu este capabil să prezică care „ramură” va fi executată și care nu).

Mașină virtuală

Această tehnică este cu siguranță una dintre cele mai dificil de gestionat. Acesta constă în simularea unui microprocesor (cu un set de instrucțiuni personalizat). Prin urmare, toate opcodurile prezente în program trebuie decodate de procesorul virtual și, la rândul său, de cel real. Deoarece este ușor de ghicit, această tehnică introduce o ușoară cheltuială (minimizată prin utilizarea instrucțiunilor de virtualizare, acolo unde există).

Entropie

Entropia poate fi utilizată pentru a determina dacă un fișier a fost supus unui proces de „împachetare”. Această abordare se bazează pe faptul că fișierele executabile în mod normal neambalate au o anumită natură sistematică a instrucțiunilor lor, în timp ce un fișier ambalat este prezentat în mod obișnuit ca un set de date aleatorii. Având în vedere acest lucru, este posibil să spunem că cu cât entropia unui fișier este mai aproape de zero, cu atât este mai probabil ca fișierul să nu fie ambalat. În acest fel este posibil să se stabilească a priori, înainte de orice comparație a așa-numitei „semnături” a fișierului, dacă acesta este ambalat.

Lista ambalatorilor

Pentru executabile în format Portable Executable (Windows):

  • ASPack
  • ASPR (ASProtect)
  • Armadillo Packer
  • AxProtector
  • BeRoEXEPacker
  • CExe
  • exe32pack
  • Pachet EXE
  • EXECryptor
  • EXE Stealth
  • eXPressor
  • Enigma Protector Win32 / Win64
  • Enigma Virtual BOX Freeware
  • MPRESS - Freeware
  • FSG (Fast Small Good)
  • Plic HASP
  • kkrunchy - Freeware
  • MEW - dezvoltarea sa oprit
  • NeoLite
  • Obsidium
  • PECompact
  • PEPack
  • PKLite32
  • PELock
  • PESpin
  • Minion
  • Privilege Shell
  • RLPack
  • Sentinel CodeCover (Sentinel Shell)
  • Shrinker32
  • Smart Packer Pro
  • SmartKey GSS
  • tElock
  • Themida
  • UniKey Enveloper
  • Upack (software) - Freeware
  • UPX - software gratuit
  • VMProtect
  • WWPack
  • PackedApp Packer
  • XComp / XPack - Freeware

Pentru un nou executabil (Windows):

  • PackWin
  • WinLite
  • PKLite 2.01

Pentru executabile OS / 2 :

  • NeLite
  • LxLite

Pentru executabile DOS :

  • 32LiTE
  • 624
  • AINEXE
  • un pachet
  • DIETĂ
  • Plic HASP
  • LGLZ
  • LZEXE - Primul compresor executabil utilizat pe scară largă pentru microcomputere.
  • PKLite
  • PMWLITE
  • UCEXE
  • UPX
  • WDOSX
  • WWpack
  • XE

Pentru executabile ELF :

  • gzexe
  • Plic HASP
  • UPX

Pentru executabilele asamblării .NET :

  • .NETZ
  • NsPack
  • Mpress
  • Plic HASP
  • .reducere
  • dotBundle
  • DotProtect : protector comercial / ambalator pentru.net și mono. Dispune de verificări on-line și „criptare standard din industrie”.

Pentru executabile Mach-o (Apple Mac OS X):

Pentru executabilele Java JAR :

  • Plic HASP
  • pachet200

Pentru executabilele Java WAR :

  • Plic HASP

linkuri externe

Securitate IT Portal de securitate IT : accesați intrările Wikipedia care se ocupă cu securitatea IT