Jump to content
0_o

Cum sa unpack-uiti un program pack-uit cu AsPack 2.xx

Recommended Posts

In acest tutorial va voi explica cum sa unpack-uiti un program pack-uit cu AsPack 2.xx, pentru a-l aduce in forma originala, daca vreti sa modificati ceva, sau vizualiza string-uri sau bitmap-uri din executabilul respectiv cu un program gen Resource Hacker sau orice altceva doriti sa faceti.

Utilitare folosite: OllyDbg (debugger & dissasembler) si Import Reconstructor (va fi nevoie sa re refaca / corecteze Import Table-u [Tabela cu importuri], deoarece majoritatea pack-erelor fac Import Table-ul inutilizabil [se poate face si manual insa este mult mai mult de lucru])

Deschidem fisierul pack-uit cu OllyDbg (Un mesaj ne va avertiza ca executabilul este pack-uit).

Vom vedea ca prima intrusctiune este PUSHAD. Ce face PUSHAD asta? Well... `salveaza`/baga in stack (locul unde se tin numere/adrese/parametrii temporar) toti registrii (EAX, EBX, ECX, EDX, etc). De ce face asta? Pentru ca acum urmeaza secventa de cod (oarecum mare wink.png ) care unpack-uieste programul, iar valorile continute de unii registrii vor fi necesare la rularea propriu-zisa a programului, si deci, trebuie salvate, pentru ca mai tarziu sa ia din nou valorile care le-au avut la inceput, adica in momentul apelarii functiei PUSHAD.

Insa apelarea functiei PUSHAD modifica implicit si registrul ESP - Extended Stack Pointer - Point-eaza/arata catre varful stack-ului (in cazul nostru arata exact locul unde au fost salvati registrii EAX, EBX, ECX, etc).

Sa continuam. Deci prima comanda este PUSHAD. Facem un Step Over (Fb) si ajungem la a 2-a instructiune, si anume un CALL XXXXXXXX. In momentul acesta ne uitam la registrul ESP si vedem ca este scris cu rosu, deci s-a modificat, deci ce am spus mai inainte s-a adeverit. Acum facem click dreapta pe el (mai exact pe valoarea lui) si dam pe Follow in dump.

Acum, in `sectiunea` de sub dissasembler, adica DUMP, ne este aratat locul a carui adresa este valoarea lui ESP (deoarece am dat Follow in dump, adica sa ne duca la adresa respectiva).

Selectam primul caracter / Click dreapta / Breakpoint / Hardware, on access / Byte. Si am pus un breakpoint aici.

Ce inseamna asta? Ca atunci cand se va accesa `partea` aceasta, se va opri rularea programului.

Insa de ce breakpoint aici? Pentru ca atunci cand secventa de unpack-uit se termina, ea se incheie cu un POPAD. Ce face POPAD? Ia ultimele valori din stack si le baga inapoi in registrii EAX, EBX..etc. In cazul nostru se vor baga valorile initiale, deoarece tot ce s-a stocat in stack pe parcursul secventei de unpack-uire, s-a scos/folosit si deci avem valorile initiale ale registrelor, si acum le bagam inapoi in registrii.

Insa ce legatura are POPAD-ul asta cu breakpoint-ul nostru? Pai... atunci cand se cheama POPAD se citestc valori din stack, si printre astea se citeste si valoarea la care am pus noi breakpoint, si se opreste executia programului exact la sfarsitul secventei de unpack-uire.

Acum suntem la un JNZ XXXXXXXX (Jump Not Equal / Jump Not Zero), facem Step Over sa trecem la urmatoarea instructiune care este un PUSH. PUSH-ul acesta stocheaza o valoare in stack. Insa nu orice valoare, ci OEP (Originally Entry Point), adica locul exact de unde incepe programul adevarat/unpackuit.

Apoi se cheama un RETN folosit pentru a iesi din secventa de unpack-uire si intoarcerea la adresa care tocmai a fost PUSH-uita/stocata in stack, mai exact locul de unde incepe programul adevarat/unpackuit.

Ok, suntem la locul unde incepe programul unpack-uit. Uitati-va la offestul/adresa la care sunteti acum [ex: 454060], care reprezinta OEP (Original Entry Point).

Acum, dati ALT + M, si la coloana Owner cautati numele programului pe care il unpack-uiti. Veti vedea ca e de mai multe ori, pentru fiecare sectiune in parte. Dublu Click pe sectiunea PE Header. Va aparea o fereastra, in care dati putin in jos, pana unde incepe alte scris-uri, si cautati Imagebase = xxxxxxxx. De obicei xxxxxx-ul ala e 400.000.

Acum.. avand OEP-ul scris pe o foaie sau altundeva, deschideti aplicatia Calculator si efectuati urmatoarea diferenta (in modul HEX): OEP - Imagebase. In cazul meu: 454060 - 400000 si o sa obtineti OEP-ul fara Imagebase (o sa ne trebuiasca la reconstruirea tabelei de import-uri). Notati rezultatul asta undeva. La mine este 54060.

Acum trebuie sa salvam asta intr-un fisier nou si avem programul unpack-uit. Cum facem asta? Pai OllyDbg normal are un Plugin care face asta, si anume OllyDump (meniu: Plugins / OllyDump / Dump debugged process). Lasati totul asa cum e si dati DUMP si alegeti un nume noului fisier/executabil creat.

Acum, mai mult ca sigur ca nu va merge sa rulati programul nou salvat, veti primi o eroare de genul: The procedure entry point xxxxxxx could not be located in the dynamic link library xxxxxxx.dll. Eroarea asta apare deoarece, cum ziceam la inceput, packer-ul a facut Import Table-ul inutilizabil.

Ca sa il refacem folosim Import Reconstructor

Deschidem Import Reconstructor (NU inchideti OllyDbg) si selectati Attach to an Active Process, iar din lista selectati programul pe care il unpack-uiti. (El ruleaza deja, deoarece OllyDbg l-a creat pentru ca il executa pas cu pas).

Acum, uitati-va acolo unde scrie IAT Infos Needed, la OEP si introduceti ultimul rezultat care l-ati notat pe foaie sau nush unde si il scrieti aici, apoi apasati pe butonul IAT AutoSearch, ar trebui sa va apara o casuta cu Found something la titlu si nush ce mesaj.

Acum apasati pe butonul Get Imports, apoi pe Auto Trace, iar in final: Fix Dump, si dati pe programul pe care l-ati salvat mai inainte cu OllyDump.

Si ... voila. Merge programul unpack-uit.

by Schoker

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...