Lecții pe cracare
Introducere în Cracare de la zero, folosind OllyDbg - Capitolul 25 [Ricardo Narvaha, trans. aquila]
În acest capitol vom considera excepție, stivuitoare care sunt de obicei bloc de poticnire pentru incepatori, dar într-adevăr nu este supusă prea complicat, dacă un pic în ea pentru a merge mai adânc.
Excepția este creat programul atunci când procesorul efectuează o operație incorectă. Vom vedea diferite exemple de modul în care se întâmplă acest lucru în OllyDbg, de ce krekmi deschis CrueHead „o.
Ne sunt situate la punctul de intrare și prima linie se va scrie instrucțiuni diferite de asamblare care dau naștere la excepții. Vom folosi tutorialul excepțiile dl Silver'a și ilustrează exemple concrete din trecut.
Nu există acces la memorie. Aceasta se produce atunci când un fir încearcă să acceseze memoria nu este în modul la care are drepturi. Acest tip de excepție, cum ar fi s-ar putea întâmpla în cazul în care fluxul va încerca să scrie ceva în celula de memorie având doar dreptul de a citi.
OllyDbg scrie în linia următoare.
Fiecare secțiune are setările inițiale de acces stocate în antet, înainte de programul nu îndeplinește nici o funcție de API, de exemplu VirtualProtect. care permite de a schimba setările de acces definite inițial, în timpul rulării.
OllyDbg unde putem vedea setările inițiale de acces pentru fiecare secțiune și modificare, dacă este necesar?
Pentru a face acest lucru, faceți clic pe lângă butonul M.
A se vedea secțiunea respectivă, adică începând cu 400.000 Prima, care este poziția PE (fișier executabil), are o dimensiune mică de 1000 de bytes, în care sunt stocate secțiuni de date, nume, dimensiune, în general, toate informațiile necesare despre fișierul rulat.
Bucurându-se de o lovitură de cap prin DUMP.
În OllyDbg există o opțiune pentru interpretarea majorității parametrilor de antet. Fiind într-un DUMP. click pe butonul din dreapta al mouse-ului.
Vedem că OllyDbg afișată varietatea informațiilor conținute în antet.
Dacă începe să meargă în jos, primul lucru pe care îl vom întâlni - este PE SEMNĂTURĂ. este valoarea care ne spune în cazul în care este într-adevăr informații de antet. Vedem că aceasta conține 100 astfel încât trebuie să adăugați acest număr la 400000 și 400100. ajunge acolo jos.
După cum vedeți, nici o greșeală - este de aici că informațiile importante despre program.
Să ne explicăm mai în detaliu ceea ce se înțelege de unii dintre acești parametri.
Bine, ține merge în jos titlul.
secțiuni de date începe aici, vom vedea că secțiunea începe la poziția 1000. adică, 401000. și caracteristicile sale sunt codul. EXECUTE și CITEȘTE.
Dacă vrem să avem această secțiune a avut permisiunea de a înregistra, trebuie să modificați valoarea acestui câmp pentru a 60000020 E0000020. Acest număr specifică dreptul de dreptul de a tot ceea ce, hehe, încercăm.
Bine, acum salva valorile utilizând procedura normală.
Schimbarea numelui la CRACKME 3. să știe că aceasta este o versiune modificată a noi.
Acum deschide acest crackme 3 OllyDbg.
Rambursați normală DUMP modul de afișare „a.
Acum, să instrucțiunea care a cauzat o eroare în timpul înregistrării.
O altă excepție este tipul:
Divizia de 0 este chemat atunci când încearcă să împartă un număr de 0.
De exemplu, scrie în OllyDbg:
Aici există o diviziune în ECX EAX. iar în cazul în care acesta din urmă este zero, excepția va fi aruncat.
nu Ollydbg oferă întotdeauna informații clare, în acest caz, ea nu a spus că există o împărțire la zero. Noi sari prin excepție.
instrucțiune nevalid a încercat să ruleze instrucțiuni privilegiate. Aceasta se produce atunci când procesorul încearcă să execute o instrucțiune, care nu au legătură cu setul, acesta susține, de exemplu, atunci când întâlnirea o operațiune necunoscută.
Acest caz, nu putem încerca, așa cum OllyDbg ne tot întreabă instrucțiunile nu sunt acolo, dar programator poate seta astfel încât procesorul nu va sprijini, iar apoi se va afișa eroarea corespunzătoare.
De asemenea, este foarte cunoscut INT 3. care generează o excepție, și este utilizat de către debugger atunci când un set BPX normal. pentru a opri programul și să transfere administrarea sa în cazul în care INT 3 a fost numit.
De asemenea, unele programe cauzează INT 3 direct, această excludere este una dintre cele mai potențial.
Există multe alte excepții, și nu vom lua în considerare. Aici este un exemplu simplu.
Acum știm că programul poate genera excepții, dar dacă se întâmplă acest lucru? Luați în considerare următoarea diagramă:
Pe această diagramă, pe care am scos din SILVER'a tutorial, descris ca o excepție, cu condiția ca procesul este în curs de depanare.
În cazul în care programul este sub depanare de control primește un depanator care (așa cum se arată în imagine, pare pentru a vedea dacă el poate controla o excepție sau nu, este aproape întotdeauna răspunsul este da, și apoi, dacă opțiunea este activată în Debugging OPTIUNI-EXCEPTIONS pentru sărind peste peste această tipul de excepție, controlul este returnat înapoi la program, în cazul în care nu sunt incluse, aceasta trebuie să apăsați SHIFT + F9. adică pe diagramă, care spune controla lA Excepcion-SI nu există nicio imagine în care procesul de luare a deciziilor, pentru a opri sau a continua executarea de aproximativ grame, în funcție de opțiunile de mai sus. A se vedea schema următoare.
Aici vedem întregul proces complet - a adăugat săgeata roșie. După determinarea CONTROLAR LA Excepcion se face dacă opțiunea corespunzătoare, în cazul în care există o stație, așteptăm cu nerăbdare să apăsați SHIFT + F9 dacă să oprească sau să continue executarea programului este necesar, în funcție de faptul dacă ați activat.
În continuare, vom vedea că, atunci când ne întoarcem de la OllyDbg, se verifică dacă Seh instalat. Dacă da, atunci du-te la ea, dacă nu, utilizați Seh implicit. Poate părea complicat, dar, de fapt, nu este. Permiteți-mi să explic mai detaliat.
SEH sau structurate Excepție de manipulare - este handler, care este folosit pentru a se asigura că programul a fost capabil de a recupera de eroare, care este, dacă nu setați propriul -obrabotchik SEH, atunci când apare o eroare, sistemul se execută handler care afișează un mesaj pentru a ne despre eroarea în aplicație, programul se închide, și adieu. Prin instalarea -obrabotchik personalizat SEH, putem prinde eroarea, procesul acesta, și a reveni la programul de control, care, în loc să se închidă și enervant mesaje din sistemul va continua să funcționeze.
De asemenea, chiar dacă nu am considerat serios fir, care este o definiție minimă a termenului: acesta este „fire“ ale programului, sau părți, care pot rula simultan, respectiv, fiecare fir are propriul handler excepție, care este, în cazul în care comerțul instalat, atunci acesta din urmă va fi efectuate numai în ea, dar nu și în altele.
Cum se setează o excepție de tratare
Ok, deschide din nou CRUEHEAD'a krekmi și a vedea stivă.
Acesta este sistemul instalat-SEH implicit de gestionare, și va funcționa pe orice eroare atât de mult timp până când este înlocuit cu propria noastră, dând un mesaj de eroare de rău augur. Să vedem, în cazul în care sunt pointerii la sistemul SEH-handler.
După cum putem vedea, în FS: [0] este un pointer la handler excepție curent poate merge aici, în groapa de gunoi.
Și dacă să se deplaseze pe LANT VIEW-SEH:
Deoarece krekmi CRUEHEAD'a stivuitoare seturi nu sobtsvennyh excepție, vom folosi programul de exemplu, numit Smartmouse. care este atașat la acest capitol.
Încărcați-l în OllyDbg.
Ottrassiruem pașii și explicați fiecare dintre ele.
Linia următoare se mută valoarea reală a fs: [0] biți de EAX. Să vedem ce este egal cu FS: [0] prin DUMP.
Vedem că fs: [0] este 12ffe0. Putem vedea ce fel de informații sunt furnizate în această privință OllyDbg.
Acum am transporta această linie.
Mutați această valoare în biți de EAX.
Acum, face push cu această valoare.
SEH LANT înseamnă că este un lanț. Valoarea stocată indică handler anterior, care este activ în prezent.
Ultima linie schimbă conținutul fs: [0]. care a plasat conținutul ESP. indicând în cazul în care noua structură.
După finalizarea liniei:
Adică, asta este ceea ce se întâmplă atunci când există o excepție:
Dacă ne uităm SEH LANT. acum vedem:
Vedem că există sunt prezente ca handler activ, setați noi, iar sistemul care nu este în prezent operațională.
Creșterea excepții în program.
Schimbați această linie pentru a:
Acesta arată o eroare și programul se încheie.
Acum, programul ar trebui să prodozhit de execuție cu SEH-handler, încearcă să recupereze de eroare.
După cum puteți vedea, OllyDbg ne spune întotdeauna totul, hehe, apăsați SHIFT + F9. pentru a continua programul.
După cum puteți vedea, ne oprim la handler. Știm ce făcea, și dacă el poate recupera dintr-o eroare gravă ca schimbarea codului de program.
Noi vedem că nu putem continua și du-te la procesorul de sistem.
Acest lucru sa întâmplat pentru că eroarea este foarte gravă faptul că programul nu a fost capabil să depășească sistemul și trece controlul sistemului de gestionare, care a arătat caseta de mesaj de rău augur și închideți aplicația.
Evident, handler excepție, setați programul se așteaptă ca un alt tip de excepție, nu cel care este cauzată din cauza modificărilor codului, dar pentru a vedea ce se întâmplă în cazul în care există o excepție necontrolată.
Pentru a lua în considerare un alt caz în care excepția este tratată cu succes, a se vedea SDUE krekmi. care este atașat la acest capitol.
Deschideți-l în OllyDbg depanator și un mesaj care indică faptul că aplicația poate samomodifitsirovatsya etc. etc. Ea ne spune că krekmi ambalate.
Eliminați toate marcajele de verificare cu excepția primei opțiuni din Debugging EXCEPTIONS.
Ne oprim asupra excluderii.
În cazul în care este handler:
Setați aici BP.
Setați aici BPX.
Nu mai merge la procesor, care, în cazul în care nu există modificări ciudate ar trebui să fie din nou pe linia următoare celei care a cauzat o excepție, atunci programul continuă.
BP se va instala pe următoarea linie după cea în care este aruncată o excepție, și faceți clic pe lângă RUN.
Vedem că eroarea a fost procesată, iar programul continuă să funcționeze fără nici un mesaj de eroare.
Este evident că, dacă vrem să rămână în acest moment, atunci când programul stabilește un handler excepție, atunci este mai bine pentru a crea BPX HARDWARE on write la FS: [0]. În multe cazuri, DLL și manipulanții stabilite, atunci acestea sunt eliminate și returnate la program sunt cei care au fost mai înainte, și de mai sus este posibil să se controleze montarea și demontarea în timpul rulării.
Bine, cred că am considerat informații utile, care ne va permite să se mute în continuare în cracarea. În viitor, ne vom uita la exemple detaliate cu privire la acest subiect.
[C] Ricardo Narvaha, Acad. Aquila