Cum se utilizează programul ollydbg. Selectăm cele mai interesante pluginuri pentru OllyDbg

LA Cum să porniți o sesiune de depanare

Cel mai simplu mod este să lansați OllyDbg, selectați Fișier -> Deschideți și selectați programul pe care doriți să îl depanați. Dacă acest program necesită parametri de linie de comandă, introduceți-i în caseta din partea de jos a casetei de dialog sau selectați una dintre liniile de parametri pe care le-ați folosit în sesiunile anterioare.

OllyDbg poate face depanarea DLL-urilor independente. În acest caz, OllyDbg creează și rulează o mică aplicație care încarcă biblioteca și, la cererea dvs., apelează funcțiile exportate.
Dacă doriți să reporniți ultimul program pe care îl depanați, pur și simplu apăsați Ctrl+F2 (aceasta este tasta rapidă pentru repornirea programului) și OllyDbg îl va lansa cu aceiași parametri. Alternativ, selectați meniul Fișier și apoi programul din istoric. De asemenea, puteți trage un fișier executabil sau DLL din Windows Explorer și să plasați pictograma acestuia pe OllyDbg.

Desigur, puteți specifica numele programului care este depanat și parametrii acestuia pe linia de comandă la pornirea OllyDbg. De exemplu, puteți crea o comandă rapidă pe desktop care să indice către OllyDbg, să selectați Proprietăți, să mergeți la Comandă rapidă la program și să adăugați numele programului la linia de comandă. De fiecare dată când faceți dublu clic pe această comandă rapidă, OllyDbg va lansa automat programul dvs. Vă rugăm să rețineți că DLL-urile nu acceptă linia de comandă.

Puteți atașa OllyDbg unui proces care rulează. Selectați Fișier -> Atașați și selectați un proces din listă. Rețineți, totuși, că odată ce închideți OllyDbg, acest proces va ieși și el. Nu încercați niciodată să vă atașați la un proces de sistem; acest lucru poate duce la prăbușirea sistemului de operare. (Pentru a fi corect, în majoritatea cazurilor sistemul de operare nu vă va permite să vă atașați la un proces sensibil).

OllyDbg poate acționa ca un depanator JIT just-in-time. Acest lucru necesită înregistrarea în registrul de sistem. Selectați Opțiuni -> Depanare just-in-time, iar în caseta de dialog care apare, selectați „Make OllyDbg just-in-time debugger” ). Acum, ori de câte ori o aplicație se blochează, veți fi întrebat dacă doriți să depanați acea aplicație. Apoi sistemul de operare va lansa OllyDbg, care se va opri direct în punctul în care a avut loc defecțiunea. Sau, dacă ați ales să vă alăturați fără confirmare, OllyDbg se va lansa fără întrebări. Pentru a restabili depanatorul anterior „just-in-time”, faceți clic pe butonul corespunzător din dialogul menționat și gata.

Există, de asemenea, o altă opțiune pentru a adăuga OllyDbg la meniul contextual asociat cu executabilele din Windows Explorer. (Această idee îi aparține lui JochenGerster). Din meniul principal OllyDbg, selectați „Opțiuni|Adăugați la Explorer”, apoi faceți clic pe „Adăugați OllyDbg la meniul din Windows Explorer”. După aceea, puteți face clic dreapta pe fișierul executabil sau DLL și puteți selecta OllyDbg din meniu. Această opțiune creează 4 chei în registrul de sistem:

HKEY_CLASSES_ROOT\exefile\shell\Open cu OllyDbg
HKEY_CLASSES_ROOT\exefile\shell\Open cu OllyDbg\command
HKEY_CLASSES_ROOT\dllfile\shell\Open cu OllyDbg
HKEY_CLASSES_ROOT\dllfile\shell\Open cu OllyDbg\command

OllyDbg poate depana aplicațiile de consolă (pe bază de text).

OllyDbg nu poate depana aplicațiile .NET. Programele .NET constau din pseudocod pe care Windows îl interpretează sau îl asambla din mers în comenzi native „86.

Rețineți că, dacă utilizați Windows NT, 2000 sau XP, probabil că va trebui să aveți drepturi de administrator pentru a depana programe.

Puncte de întrerupere (puncte de control)

OllyDbg acceptă mai multe tipuri de puncte de întrerupere:

- Punct de întrerupere obișnuit, primul octet al comenzii la care doriți să vă opriți este înlocuit cu o comandă specială INT3 (Debugger Trap). Puteți seta acest punct de întrerupere selectând comanda necesară în panoul Dezasamblare și apăsând F2 sau din meniul contextual. Când apăsați F2 a doua oară, punctul de întrerupere va fi șters. Rețineți că programul se oprește înainte de a executa comanda cu punctul de întrerupere setat. Numărul de puncte de întrerupere INT3 pe care le puteți seta este nelimitat. Când închideți programul pe care îl depanați sau Debuggerul, OllyDbg salvează automat punctele de întrerupere pe disc. Nu încercați niciodată să setați acest tip de punct de întrerupere pe date sau în mijlocul unei comenzi! OllyDbg vă va avertiza dacă încercați să setați un punct de întrerupere în afara unei secțiuni de cod. Puteți dezactiva acest avertisment în Opțiunile de securitate. În unele cazuri, Debugger-ul poate introduce propriile puncte de întrerupere temporare INT3.

- Punct de întrerupere condiționat(Shift+F2) - un punct de întrerupere INT3 obișnuit cu o condiție asociată. Când Debuggerul întâlnește acest punct de întrerupere, evaluează condiția și dacă rezultatul este diferit de zero sau condiția este invalidă, oprește depanarea programului. Cu toate acestea, probabilitatea unui depășire cauzată de un punct de întrerupere condiționat incorect este foarte mare (în principal din cauza latenței sistemului de operare). Pe un PII 450 sub Windows NT, OllyDbg procesează până la 2500 de puncte de întrerupere condiționale false pe secundă. Un caz important al unui punct de întrerupere condiționat este oprirea la mesajele Windows (cum ar fi WM_PAINT). În acest scop, puteți utiliza pseudovariabila MSG împreună cu interpretarea corectă a parametrilor. Dacă fereastra este activă, consultați punctul de întrerupere a mesajului descris mai jos.

- Punct de întrerupere condiționat cu înregistrare(Shift+F4) - un punct de întrerupere condiționat cu capacitatea de a înregistra valoarea unor expresii sau parametri ai unei funcții cunoscute de fiecare dată când punctul de întrerupere este declanșat sau când este îndeplinită o condiție stabilită. De exemplu, puteți seta un punct de întrerupere de scriere pe o procedură de fereastră pentru a înregistra toate apelurile la această procedură (CALL), sau numai identificatorii mesajelor WM_COMMAND primite, sau îl puteți seta la apelul CreateFile și înregistrați numele fișierelor doar pentru citire, etc. Un punct de întrerupere de înregistrare este la fel de rapid ca un punct de întrerupere condiționat și, cu siguranță, este mult mai ușor să te uiți prin câteva sute de mesaje într-o fereastră de jurnal decât să apeși F9 de câteva sute de ori. Astfel, puteți alege o interpretare mai potrivită pentru starea dumneavoastră.

Puteți seta un contor de trecere - un contor care este diminuat de fiecare dată când este îndeplinită o condiție de oprire. Dacă numărul de treceri înainte de decrementare nu este zero, OllyDbg va continua execuția. Luați în considerare o buclă care rulează de 100 de ori (zecimală). Să punem punctul de întrerupere la mijloc și să setăm valoarea la 99. (Decimal). OllyDbg va anula la ultima iterație.

În plus, un punct de întrerupere de înregistrare condiționată vă permite să lansați una sau mai multe comenzi pentru pluginuri. De exemplu, aceasta ar putea fi o solicitare către pluginul de linie de comandă pentru a schimba conținutul registrului și a continua.

- Mesaje de breakpoint- la fel ca un punct de întrerupere cu o condiție de scriere, cu excepția faptului că OllyDbg generează automat o condiție care vă permite să întrerupeți un mesaj (cum ar fi WM_PAINT) la punctul de intrare în procedura ferestrei. Îl poți instala în caseta Windows.

- Urmăriți punctul de întrerupere(Trace breakpoint) - un caz critic de puncte de întrerupere INT3 stabilite pe fiecare comandă specificată. Dacă efectuați o urmărire a loviturilor, punctul de întrerupere va fi eliminat și adresa va fi marcată ca transmisă după ce comanda este atinsă. Dacă utilizați o urmărire de rulare, OllyDbg va adăuga o intrare în jurnalul de urmărire și punctul de întrerupere va rămâne activ .

- Punct de întrerupere pentru memorie. OllyDbg vă permite să setați un singur punct de întrerupere pe memorie. Selectați o porțiune de memorie în panourile Dezasamblare sau Dump din fereastra CPU și utilizați meniul contextual pentru a seta un punct de întrerupere a memoriei. Punctul de întrerupere a memoriei anterior, dacă a existat unul, va fi șters automat. Aveți două opțiuni disponibile: renunțați la accesul la memorie (citire, scriere sau executare în memorie) sau renunțați numai la scriere. Pentru a seta acest punct de întrerupere, OllyDbg modifică atributele blocurilor de memorie care conțin alocarea. Pe procesoarele compatibile cu 80x86, memoria este distribuită și protejată în blocuri de 4096 de octeți. Dacă selectați chiar și un singur octet, OllyDbg va trebui să protejeze întregul bloc. Acest lucru poate duce la multe alarme false cu depășire uriașă. Utilizați acest tip de punct de întrerupere cu precauție. Unele funcții de sistem (în special sub Windows 95/98) fac ca programul depanat să se blocheze în loc să genereze un eveniment de depanare la accesarea memoriei protejate.

- Punct de întrerupere hardware(disponibil numai sub Windows ME, NT, 2000 sau XP). Procesoarele compatibile cu 80x86 vă permit să setați 4 puncte de întrerupere hardware. Spre deosebire de un punct de întrerupere a memoriei, punctele de întrerupere hardware nu încetinesc viteza de execuție, ci acoperă doar până la 4 octeți. OllyDbg poate folosi puncte de întrerupere hardware în loc de INT3 atunci când execută sau scanează cod.

- Întreruperea accesului la memorie unică(Single-shot break on memory access) (disponibil numai sub Windows NT, 2000 și XP). Îl setați în fereastra Memorie pe un întreg bloc de memorie din meniul contextual sau apăsând F2. Acest punct de întrerupere este util în special dacă doriți să preluați un apel sau să vă întoarceți la un modul. Odată ce oprirea este efectuată, punctul de întrerupere este eliminat.

- Oprirea urmăririi normale(Run trace pause) (Ctrl+T) - setarea condițiilor care sunt verificate la fiecare pas al procesului de urmărire a rulării. Puteți opri o urmărire de rulare atunci când EIP intră sau părăsește un alt interval, sau când o condiție este adevărată, sau când o comandă se potrivește cu unul dintre modelele specificate, sau când o comandă este suspectă sau după ce un anumit număr de comenzi a fost urmărit . Vă rugăm să rețineți că această opțiune poate încetini semnificativ (până la 20) viteza de urmărire a rulării.

OllyDbg poate opri, de asemenea, execuția programului la anumite evenimente de depanare, cum ar fi încărcarea sau descărcarea unui DLL, pornirea sau oprirea unui fir sau când programul trimite un șir de depanare.

Dump

Fereastra Dump afișează conținutul memoriei sau al unui fișier. Puteți alege dintre mai multe formate specifice: octet, text, întreg, float, adresă, dezasamblare sau antet PE.

Toate ferestrele de descărcare acceptă funcții de backup, căutare și editare. Zona ferestrei Dump a ferestrei CPU vă permite să definiți marcaje, să setați puncte de întrerupere pe memorie, să găsiți referințe de date în codul de execuție și o imagine deschisă a memoriei selectate într-un fișier executabil (.exe sau .dll). Meniul Dump afișează doar un set relativ de comenzi disponibile.

Dacă backup-ul este disponibil, faceți clic pe Adresă/Backup în panou pentru a comuta modul de afișare între backup și vizualizare normală. Alte butoane de pe panou vă permit să schimbați modurile de descărcare.

La fel ca fereastra Dezasamblare, Dump stochează o istorie lungă a locațiilor de memorie vizitate. Puteți trece prin istoric apăsând butoanele „+” sau „-”.

Pentru a parcurge datele, țineți apăsată tasta Ctrl și apăsați săgețile Sus/Jos.

Module

Fereastra Running Modules (comandă rapidă de la tastatură: Alt+E) listează toate modulele încărcate în prezent de procesul care este depanat. Această fereastră afișează și informații utile, cum ar fi dimensiunea modulului, adresa de intrare, versiunea modulului sau calea executabilă. Unele informații, cum ar fi dimensiunea modulului zecimal, numele simbolic al punctului de intrare etc., sunt de obicei ascunse de sistem. Pentru a vedea aceste date, măriți lățimea coloanelor corespunzătoare. Meniul contextual acceptă următoarele opțiuni:

Actualizare - rescanează modulele și elimină evidențierea din modulele noi. De cele mai multe ori, OllyDbg are grijă de sine.

Vizualizare memorie - Deschide fereastra Memorie și derulează la primul bloc de memorie aparținând modulului afișat.

Vizualizare cod în CPU - deschide codul executabil al modulului în Dezasamblare.

Urmăriți intrarea - Urmează punctul de intrare al unui modul în Dezasamblare

Dump data in CPU - deschide secțiunea de date modul în CPU Dump.

Vizualizare nume (Ctrl+N) - Afișează un tabel care conține toate numele (export, import, bibliotecă, definite de utilizator) definite sau utilizate în modulul curent.

Marcați ca DLL de sistem
Marcare ca DLL non-sistem - marchează modulul selectat ca sistem sau non-sistem. Prin marcarea unui modul ca sistem, îl excludeți din Urmărire, accelerând semnificativ execuția acestuia. În mod implicit, modulele de sistem sunt module care se află permanent în directorul de sistem (de obicei c:\windows\system pe Windows 95/98, c:\winnt\system32 pe NT/2000/XP).

Actualizați fișierul .udd acum - scrie toate datele dependente de acest modul într-un fișier .udd. Fișierele .udd salvează punctele de întrerupere, marcajele, comentariile, observatorii, analizele și așa mai departe între sesiunile de depanare. OllyDbg creează automat un fișier .udd când modulul este descărcat.

Vizualizare fișier executabil - Afișează un dump al fișierului executabil.

Vizualizați toate resursele - Afișează o listă a tuturor resurselor definite în modul împreună cu informații scurte. OllyDbg nu acceptă resurse ca obiect separat; tot ce puteți face este să aruncați resursa și să o editați în formă binară.

Vizualizare șiruri de resurse - Afișează o listă de resurse de șir și ID-urile acestora.

View run trace profile - Calculează profilul pentru acest modul. Consultați și Run trace.

Analizați toate modulele - vă permite să analizați toate modulele simultan. Analiza extrage informații utile din codul încărcat; Depanarea este de obicei mai rapidă și mult mai fiabilă odată ce codul a fost analizat.
Făcând dublu clic pe o linie, veți accesa codul care rulează în modulul din panoul Dezasamblare.

Card de memorie

Fereastra Hartă memorie afișează toate blocurile de memorie utilizate de programul care este depanat. Nu există instrumente standard pentru a îndeplini această sarcină, așa că se poate întâmpla ca OllyDbg să combine mai multe bucăți de memorie distribuită într-un singur bloc de memorie mare. Cu toate acestea, în majoritatea cazurilor nu este nevoie de o rezoluție precisă. Pentru a obține o listă de blocuri de memorie solicitate de o aplicație prin apeluri la GlobalAlloc(), LocalAlloc(), etc., utilizați Heap list.

Dacă blocul de memorie este o secțiune a unui modul executabil, OllyDbg vă va spune ce fel de date conține blocul: cod, date, resurse etc.

Există unele diferențe între Windows 95/98 și Windows NT/2000. În Windows 95/98, OllyDbg nu poate afișa numele fișierelor afișate. De asemenea, Windows 95/98 limitează tipurile permise de acces la memorie: citire și scriere. Luați în considerare, de asemenea, că Windows NT/2000 are o gamă mult mai largă de capabilități, inclusiv acces la execuție, copiere la scriere și semnalizare de pază. OllyDbg ignoră atributul copy-on-write.

Dacă OllyDbg recunoaște că programul a alocat un bloc de memorie nou sau a realocat un bloc de memorie existent, atunci OllyDbg evidențiază intrarea corespunzătoare în fereastra hărții memoriei. Pentru a reseta toate evidențierile, selectați Actualizare din meniul contextual.

Puteți deschide fereastra Memorie apăsând Alt+M.

Sunt disponibile următoarele elemente din meniul contextual:

Actualize - Actualizează lista de memorie alocată și de-aloca noi blocuri de memorie.

Vizualizare în Dezasamblare - Deschide un bloc de memorie în Dezasamblator. Această opțiune este disponibilă numai atunci când blocul de memorie conține cod executabil sau un auto-extractor al unui modul.

Dump to CPU - Afișează conținutul unui bloc de memorie în zona ferestrei CPU Dump.

Dump - aruncă conținutul unui bloc de memorie într-o fereastră separată. Dacă tipul blocului de memorie este cunoscut, OllyDbg selectează automat formatul de descărcare.

Vizualizați toate resursele - Dacă blocul conține date despre resurse, o listă cu toate resursele și datele asociate. OllyDbg nu acceptă resurse ca obiect separat; tot ce puteți face cu resursele este să le aruncați și să le editați în format binar.

Vizualizați șirurile de resurse - Dacă blocul conține date despre resurse, atunci Ollie listează toate șirurile de resurse cu ID-urile lor.

Căutare - Vă permite să căutați prin toate blocurile de memorie, începând cu cel alocat, înainte de a întâlni un șir binar. Dacă șirul este găsit, OllyDbg arată un dump al blocului de memorie găsit. Harta memoriei și fereastra de descărcare au același model de căutare, astfel încât să puteți continua imediat căutarea până la următoarea apariție a depozitului care apare. Puteți închide fereastra de descărcare apăsând Esc.

Set break-on-access (F2; disponibil numai sub Windows NT/2000) - protejează un întreg bloc de memorie. După un punct de întrerupere, OllyDbg oprește depanarea programului și elimină punctul de întrerupere. Acest punct de întrerupere este util în special dacă doriți să preluați un apel sau să vă întoarceți la un modul.

Eliminare break-on-access (F2) - Elimină un break-on-access instalat dintr-un bloc de memorie.

Setați punctul de întrerupere a memoriei la acces(Set breakpoint on memory access) - setează un punct de întrerupere pentru accesul la memorie pe întregul bloc de memorie. Programul va fi întrerupt de fiecare dată când programul care este depanat accesează acest bloc de memorie. OllyDbg acceptă doar un punct de întrerupere per memorie. În Windows 95/98, programul care este depanat se poate bloca atunci când rutinele sistemului accesează blocuri de memorie care conțin un punct de întrerupere. Folosiți-l ca ultimă soluție.

Setați punctul de întrerupere a memoriei la scriere(Set breakpoint to write to memory) - setează un punct de întrerupere pe întregul bloc de memorie. Programul se va întrerupe de fiecare dată când scrie în acest bloc de memorie. În Windows 95/98, programul care este depanat se poate bloca atunci când rutinele sistemului accesează blocuri de memorie care conțin un punct de întrerupere. Folosiți-l ca ultimă soluție.

Eliminați punctul de întrerupere a memoriei SFX - oprește căutarea la punctul de intrare real în programul pachet (SFX). Această căutare folosește un tip special de punct de întrerupere a memoriei.

Setați accesul- setează atributul de protecție a memoriei dorit pentru întregul bloc de memorie.
Opțiuni posibile:

Fără acces
Numai citire
Citeste, scrie
A executa
Executați / citiți

Acces complet

Copiați în clipboard

Linie întreagă - copiează intrarea selectată în clipboard ca text pe mai multe rânduri cu explicații. Pentru a exclude o coloană de la copiere, reduceți lățimea la minim (restul coloanei va deveni gri).

Întregul tabel - copiează întregul card de memorie în clipboard ca text cu mai multe linii. Prima linie a acestui text conține titlul ferestrei („MemoryMap”), a doua linie conține titlurile coloanelor, iar toate rândurile ulterioare conțin înregistrări de date de memorie. Copia menține lățimea coloanelor. Pentru a exclude copierea unei coloane, reduceți lățimea la minim (restul coloanei va deveni gri).

Observatori și inspectori

Fereastra Observator conține mai multe expresii. Afișează valorile lor în a doua coloană. OllyDbg salvează expresiile în fișierul .udd al modulului principal, astfel încât acestea să fie disponibile data viitoare când depanați.

Inspectorul este o fereastră de sine stătătoare care poate afișa conținutul unei variabile, o matrice 1 sau 2-dimensională sau chiar elemente selectate ale unei matrice de structuri. Expresia este practic aceeași cu Observer, dar poate include doi parametri: %A și %B. Când instalați Inspector, puteți defini limite pentru acești parametri. OllyDbg calculează apoi toate combinațiile posibile de %A și %B într-o expresie începând de la 0 până la limită (fără includere) și afișează rezultatele într-un tabel. Limita pentru %B (număr de coloane) nu poate depăși 16.

Stack de apeluri

Fereastra Call Stack (Alt+K) încearcă să urmărească secvența apelurilor pe stiva firului selectat și o afișează, împreună cu parametrii cunoscuți sau sugerați ai funcțiilor apelate. Această sarcină este ușoară atunci când funcțiile numite creează cadre standard de stivă (PUSH EBP; MOV EBP,ESP). Compilatoarele moderne de optimizare nu se deranjează cu cadrele de stivă, așa că OllyDbg folosește diverse trucuri. De exemplu, OllyDbg încearcă să urmărească codul până la următoarea retur și calculează orice modificare push, pop sau ESP. Dacă acest lucru nu ajută, OllyDbg adoptă o abordare mai periculoasă și mai consumatoare de timp: OllyDbg scanează stiva, încercând să găsească toate adresele posibile de returnare și de testare la care funcția a fost apelată de instrucțiunea corespunzătoare, inclusiv comenzile analizate. Există și alte euristici destul de dubioase. Navigarea în stivă poate fi foarte lentă. OllyDbg îl produce numai dacă fereastra Call Stack este deschisă.

Fereastra Call Stack conține 5 coloane: Adresă, Stack, Procedure, Called from, Frame.

Coloana Adresă conține adresa de pe stivă, Stack afișează valoarea adresei de retur sau a parametrului corespunzător.

Procedură (sau Procedură / argumente) - afișează unde fereastra Call Stack plasează adresa funcției apelate pe stivă. În unele cazuri, OllyDbg nu este sigur dacă această adresă este corectă și adaugă unul dintre următorii marcatori:

Punctul de intrare găsit nu este de încredere

Poate că OllyDbg nu a putut găsi un punct de intrare de încredere, adresa găsită trebuie verificată folosind euristica

Include OllyDbg, nu a putut găsi punctul de intrare și știe doar că această procedură include adresa de afișare

Făcând clic pe un buton de pe panou sau selectând „Ascunde/Afișează argumente” din meniu, poți activa sau dezactiva parametrii funcției.

Apelat de la este adresa comenzii care este apelată prin această procedură.
Ultima coloană, Frame, este ascunsă implicit și afișează valoarea indicatorului de cadru (registrul EBP), dacă este cunoscută.

Este mai fiabil și mult mai rapid să scanezi stiva atunci când sunt analizate toate funcțiile apelate.

Sun tree

Arborele de apeluri (CALL) (tasta Ctrl+K în Dezasamblare) folosește rezultatele analizei pentru a pregăti o listă de funcții apelate printr-o procedură dată, direct sau indirect, și o listă a tuturor apelurilor cunoscute la acea funcție. Efect secundar - recunoaște dacă procedura selectată este explicit recursivă. „Explicit” înseamnă că nu poate urmări cererile cu o adresă necunoscută, cum ar fi CALL EAX. Dacă procedura efectuează apeluri necunoscute, Call Tree adaugă marcatori „Destinații necunoscute”.

Unele dintre funcțiile apelate sunt comentate cu unul dintre următoarele cuvinte:

Leaf Nu apelează nicio altă funcție
Pure Nu apelează nicio funcție, nu are efecte secundare
RETN Constă dintr-o singură comandă RETN
Funcția Sys într-un DLL de sistem. Prin definiție, un DLL de sistem este un DLL care se află permanent în directorul de sistem

Pentru a naviga prin Arborele de apeluri, faceți dublu clic pe adresa din coloana Apelat de la sau în coloana Apeluri/Apeluri direct. Fereastra „Arborele apelurilor” salvează istoricul acțiunilor dvs. (tastele „-” și „+”).

Dacă programul pe care îl depanați este format din mai multe module, vă recomand să analizați toate aceste module. Call Tree nu încearcă să gestioneze funcțiile sistemului.

Fișiere autoextractabile (SFX).

Un fișier SFX constă dintr-un dispozitiv de despachetare și un program original ambalat. Când examinați fișierele comprimate, de obicei doriți să săriți peste pachetul și să vă opriți la punctul de intrare al programului („intrarea reală”). OllyDbg conține mai multe caracteristici care ușurează această sarcină.

De obicei, dispozitivul de despachetare este încărcat în adrese care se află în afara secțiunii originale a programului. În acest caz, OllyDbg recunoaște fișierul ca SFX.

Când opțiunea SFX necesită urmărirea intrării reale, OllyDbg setează un punct de întrerupere a memoriei pe întreaga secțiune de cod. De obicei, este gol sau conține date comprimate. Când un program încearcă să execute o comandă într-o zonă protejată care nu este nici RET, nici JMP, OllyDbg raportează intrarea reală. Acesta este modul în care funcționează extracția octet cu octet.

Această metodă este foarte lentă. Există o altă metodă, mai rapidă. De fiecare dată când apare o excepție în timpul citirii datelor, OllyDbg citește din acel bloc de memorie de 4K și dezactivează fereastra anterioară de citire. La fiecare excepție de scriere a datelor, permite scrierea în acest bloc și interzice scrierea în cel precedent. Când un program execută comenzi într-o zonă neprotejată, OllyDbg raportează intrarea reală. Cu toate acestea, dacă intrarea reală se află într-o fereastră de citire sau scriere, locația acesteia va fi raportată incorect.

Puteți corecta manual adresa de conectare. Selectați noua adresă de intrare și în meniul contextual al ferestrei Dezasamblare, selectați Punct de întrerupere-> Setați intrarea SFX reală aici. Dacă opțiunea SFX corespunzătoare este activată, OllyDbg va sări peste dispozitivul de despachetare rapid și fiabil data viitoare.

Parcurgeți programul pe care îl depanați apăsând F7 (pas cu intrare) sau F8 (pas cu bypass). Principala diferență dintre aceste metode este că, dacă comanda curentă Apelează o funcție, F7 va intra în funcție și se va opri la prima ei comandă, în timp ce F8 va încerca imediat să execute funcția. Dacă ocoliți o funcție, orice punct de întrerupere sau eveniment de depanare din cadrul funcției va întrerupe execuția programului principal, dar punctul de întrerupere temporară după apelul procedurii va rămâne activ și îl veți ajunge mai devreme sau mai târziu.

Dacă programul care este depanat se oprește la o excepție, puteți trece acea excepție unui handler instalat cu programul care este depanat. Doar apăsați Shift împreună cu orice comandă avansată.

În loc să apăsați F7 sau F8 de câteva sute de ori, puteți utiliza animația (Ctrl+F7 sau Ctrl+F8). În acest caz, OllyDbg repetă automat F7 sau F8 după ce pasul anterior este finalizat și toate ferestrele sunt modificate. Procesul se oprește atunci când:

  • Apăsați Esc sau rulați orice altă comandă avansată sau
  • OllyDbg va întâlni un punct de întrerupere setat anterior sau
  • Programul care este depanat va arunca o excepție.

Folosind tastele „+” și „-”, puteți derula înapoi istoricul execuțiilor.

Rețineți că OllyDbg desenează majoritatea ferestrelor ori de câte ori execuția este întreruptă. Dacă animația pare a fi foarte lentă, încercați să închideți sau cel puțin să minimizați toate ferestrele neutilizate.

Un alt mod mai rapid de a urmări execuția programului este Run trace. În acest caz, OllyDbg creează un jurnal de execuție și vă spune când și de câte ori a fost executată această comandă.

Urmărirea pas cu pas

Urmărirea pas cu pas vă oferă posibilitatea de a nota ce părți ale codului au fost executate și care nu. Metoda implementată în OllyDbg este destul de simplă. Setează un punct de întrerupere INT3 pentru fiecare echipă din zona specificată. Când se execută un punct de întrerupere, OllyDbg îl elimină și marchează comanda ca fiind transmisă. Deoarece fiecare punct de întrerupere a urmăririi este executat o singură dată, această metodă este foarte rapidă.

Când utilizați urmărirea incrementală, trebuie să aveți grijă să nu setați un punct de întrerupere a datelor, deoarece acest lucru va face ca aplicația să facă o eroare. Din acest motiv, trebuie să analizați codul pentru a activa opțiunile de meniu adecvate. Vă recomand să alegeți recunoașterea procedurilor stricte sau euristice. Opțiunea fuzzy este prea tolerantă la erori și adesea găsește proceduri inexistente.

Când setați un punct de întrerupere de urmărire, chiar și la o singură comandă dintr-un modul, OllyDbg setează un buffer de urmărire de două ori mai mare decât secțiunea de cod.

Rețineți că atunci când ștergeți datele de urmărire a pasului, ștergeți și urmărirea forțată.

Urmărirea directă

Urmărirea directă este o modalitate de a inversa execuția programului, care este necesară în unele cazuri. De asemenea, puteți utiliza urmărirea directă pentru crearea simplă a profilului. Practic, OllyDbg execută programul depanat pas cu pas, ca o animație, dar nu schimbă ferestrele și - cel mai important - stochează adrese, înregistrează conținuturi, mesaje și operanzi cunoscuți într-un buffer de urmărire. Dacă codul pe care îl depanați se auto-modifică, puteți păstra comenzile originale. Începeți o urmărire înainte apăsând Ctrl+F11 (urma de intrare) sau Ctrl+F12 (urma de ocolire). Opriți urmărirea - tastele F12 sau Esc.

Puteți defini un set de condiții care sunt verificate la fiecare pas al execuției urmăririi înainte (tasta rapidă: Ctrl+T). Urmărirea înainte se oprește atunci când întâlnește o condiție. Termenii includ:

Desigur, urmărirea directă necesită multă memorie, cu o medie de 16 până la 35 de octeți per instrucțiune, în funcție de mod, și este foarte lentă. Pe un procesor de 500 MHz care rulează Windows NT, acest proces poate urmări până la 5000 de instrucțiuni pe secundă. Sub Windows 95 este mai lent: doar 2200 de comenzi pe secundă. Dar în multe cazuri, de exemplu atunci când un program sare la o adresă inexistentă, aceasta este singura modalitate de a găsi o soluție la problemă. Puteți exclude secvențele de instrucțiuni cvasi-liniare (cu o singură ieșire la sfârșitul secvenței) din procesul de urmărire înainte. Când OllyDbg întâlnește o secvență exclusă, OllyDbg setează un punct de întrerupere temporar pe comanda care urmează imediat blocul exclus și îl execută imediat. Desigur, orice întoarcere sau salt la codul extern face imposibilă revizuirea corectă, așa că OllyDbg verifică partea din cod pe care doriți să o excludeți și, în cazurile dificile, vă solicită confirmarea.

În majoritatea cazurilor, nu este nevoie să urmăriți codul API al sistemului. Opțiunea „Urmăriți întotdeauna DLL-urile de sistem” vă permite să urmăriți fără a introduce API-uri funcționale atunci când urmăriți și animați cu intrare. OllyDbg presupune că modulul este sistem dacă este localizat permanent în folderul de sistem. În fereastra Module, puteți marca orice bibliotecă ca sistem sau non-sistem.

Pentru a face execuția mai rapidă, puteți limita procedura de urmărire directă la comenzile selectate sau părți de cod, setând puncte de întrerupere pentru a începe urmărirea și rularea programului. Eu numesc asta „urme de rulare forțată”. Practic, punctele de întrerupere de rutare sunt puncte de întrerupere de urmărire a pasului neamovibile. Dacă ștergeți o urmă de pas, ștergeți și urma de înainte.

Comenzile de urmărire menționate la începutul acestei secțiuni deschid automat tamponul de urmărire. Puteți defini dimensiunea acestuia (până la 64 MB) în Opțiuni. Acest buffer este circular și când este plin, cele mai vechi intrări sunt suprascrise.

Puteți deschide sau șterge bufferul de urmărire a rulării selectând Debug -> Deschidere sau ștergeți urmărirea rulării din meniul principal OllyDbg. Odată ce bufferul de urmărire este deschis, OllyDbg va înregistra toate pauzele în execuție, chiar și cele care nu au fost cauzate de o urmărire directă. De exemplu, puteți parcurge programul apăsând F7 sau F8 și apoi puteți reveni înapoi prin cod folosind tastele Plus și Minus. Rețineți că aceste taste vizualizează istoricul când bufferul de urmărire este închis. Dacă urmăriți un program, zonele Registers and Information ale ferestrei devin gri, subliniind faptul că datele din registru pe care le afișează nu sunt date reale. Bufferul de urmărire nu stochează partea de sus a stivei sau conținutul de memorie folosit de registre. Registrele, informațiile și stiva folosesc starea actuală a memoriei pentru a interpreta registrele din bufferul de urmărire.

OllyDbg poate număra de câte ori apare fiecare comandă în bufferul de urmărire înainte. În fereastra Dezasamblare, selectați „Vizualizare -> Date profil”. Această comandă înlocuiește coloana Comentarii cu coloana Profil. Sau, dacă este afișat un panou, faceți clic pe acesta de mai multe ori până când se afișează informații despre profil. Rețineți că contorul afișat este dinamic și nu contorizează comenzile vechi eliminate din bufferul de urmărire. De asemenea, puteți vizualiza datele de profil pentru un modul întreg, sortate cu câteva clicuri, într-o fereastră separată de profil

O comandă specială din fereastra Dezasamblare „Runtrace -> Adăugați intrări pentru toate procedurile” vă permite să verificați cât de des este apelată fiecare procedură recunoscută. O altă comandă, Runtrace -> Adăugați ramuri în procedură, forțează urmărirea tuturor destinațiilor ramurilor recunoscute în cadrul procedurii. În acest caz, profilul vă permite să găsiți cele mai frecvente tranziții executate și să le optimizați pentru a crește viteza.

Opțiunea „Search for -> Last record in run trace” din meniul contextual al ferestrei Dezasamblare găsește când a fost executată comanda marcată și dacă a fost executată pentru ultima dată.
Fereastra de urmărire live afișează conținutul buffer-ului de urmărire. Pentru fiecare comandă, există anumite conținuturi de registru care au fost modificate de comandă (mai precis, schimbate între intrarea din sursă și cea actualizată). Dacă faceți dublu clic pe o comandă, o fereastră pop-up va selecta toate referințele la acea comandă în buffer-ul de urmărire și le puteți vizualiza rapid apăsând tastele Plus sau Minus. Dacă opțiunea „Trace -> Synchronize CPUandRuntrace” este bifată, Dezasamblatorul va merge la fereastra de urmărire înainte.

Rețineți că atunci când ștergeți o urmă de pas, ștergeți și o urmărire înainte forțată.

Cutie cu nisip

Jucator nou 7 ianuarie 2016 la 13:36

Elementele de bază ale lucrului cu OllyDebug, folosind exemplul de „vindecare” unui arhivator

  • Asamblator

Astăzi vă voi arăta cum puteți folosi „Olka” pentru a „vindeca” un arhivator faimos. Pentru aceasta avem nevoie de: OllyDBG, pluginul „CommandBar”.

Instalăm arhivatorul, după 40 de zile vedem poza:


Primul lucru care vă vine în minte este să schimbați verificarea licenței sau verificarea pentru durata de utilizare a programului. Să luăm calea ușoară - căutați o funcție WinAPI care primește GetLocalTime curent. În meniul contextual selectați

Căutați -> Nume (etichetă) în modulul curent.


Căutăm funcții legate de timp, o, iată, aproape că am ratat-o.

Acum trebuie să setați un punct de întrerupere pentru această funcție. În fereastra pluginului CommandBar, introduceți

iar acum, când apelăm această funcție, depanatorul nostru se va opri în locul de care avem nevoie.

Începem depanarea, tasta F9. Punctul nostru de întrerupere a fost executat cu succes și ne-am găsit la începutul funcției GetLocalTime, să ajungem la punctul de ieșire din această funcție (Ctr+F9), să facem un pas (F7). Aici vedem că după primirea orei se apelează funcția de la adresa 004B8C00, vă sugerez să intrați în ea și să vedeți ce ar putea fi interesant acolo, folosim pasul cu intrare (F7).

Vedem semne favorabile.

Urmărim programul prin F8, înainte de a verifica la adresa 004B8C26, observăm TEST AL,AL.

Permiteți-mi să vă reamintesc că AL este registrul scăzut al EAX, îl avem acum gol. Comanda TEST AL,AL verifică dacă registrul AL este egal cu zero, dacă este egal, atunci flag-ul ZF va fi pornit Următoarea comandă JE SHORT 004B8C44, trimite la adresa 004B8C44, dacă flag ZF este pornit. Ei bine, propun să elimin această verificare de tranziție. Apăsați bara de spațiu și introduceți nop, apăsați Assemble de mai multe ori până când aceste două comenzi sunt uzate.

Începem depanarea (F9) și vedem că ne-am oprit din nou la punctul nostru de întrerupere, să-l eliminăm (F2) și să continuăm depanarea din nou (F9). Acum vedem că nimic nu ne împiedică să lucrăm și în câmpul de înregistrare este o inscripție care spune că programul este înregistrat.

Etichete: Inginerie inversă, Asamblator, OllyDebug

Acest articol nu este supus comentariilor, deoarece autorul său nu este încă un membru cu drepturi depline al comunității. Veți putea contacta autorul numai după ce acesta va primi

Scopul acestei „Introduceri în Cracking from Scratch Using OllyDbg” este de a oferi celor care abia încep să stăpânească arta crackingului o cunoaștere de bază și, în același timp, să facă acest lucru într-un mod în care aceste cunoștințe să le permită să citească mai târziu. și înțelegeți tutoriale mai avansate, cum ar fi , care pot fi găsite în „Cursul nou de la CracksLatinos”, care, desigur, rămâne deschis la noi completări și completări.

Ideea cursului s-a născut din faptul că multe dintre tutorialele din cursul New CracksLations au fost prea dificile pentru începători, iar cei care nu au reușit să atingă nivelul cerut s-au simțit frustrați și, în multe cazuri, au refuzat să continue. Prin urmare, scopul acestei „Introduceri...” nu este acela de a repeta excelentele tutoriale din „Cursul Nou...”, al cărui număr a depășit deja 500, ci de a pune bazele pentru ca cei care parcurg acest curs va putea citi tutoriale mai complexe. Acest lucru, la fel ca tot în meșteșugurile noastre, necesită un efort considerabil, iar scopul principal este reducerea acestei sume, oferind cunoștințe de bază și permițând înțelegerea ulterioară a unui material mai complex.

De ce OLLYDBG?

Nu vom vorbi aici despre eterna confruntare dintre Soft-Ice și OllyDbg; cred că până și fanaticii Soft-Ice recunosc că este mai ușor să începi cu OllyDbg, deoarece există multe informații despre el și este mai ușor de studiat. Trebuie să intrăm în lumea cracking-ului prin ușa numită „OllyDbg”, și abia atunci cine are nevoie poate trece la orice alt depanator care este necesar, deoarece doar metodele lor de utilizare se schimbă, dar esența rămâne aceeași.

Începe de la capăt

Mai întâi trebuie să vă înarmați cu instrumentul pe care îl vom folosi în principal, pentru care faceți clic și descărcați-l.

Deoarece începem de la zero, mai întâi trebuie să despachetăm arhiva descărcată într-un folder de pe hard disk, care poate fi ușor accesibil. O idee bună ar fi să creați un folder pe unitatea C:/. Deși va funcționa în orice altă locație, voi presupune că unitatea C:/ este selectată.

După ce fișierul a fost despachetat, mergeți la folderul creat și vedeți:

Conține fișierul executabil OLLYDBG.exe, pe care trebuie să-l rulăm și pentru care am făcut o comandă rapidă pe desktop pentru comoditate.

Ok, totul este gata de lansare. Faceți clic pe OllyDbg:

Vedem un mesaj că DLL-ul aflat în bibliotecă este mai vechi decât același DLL de sistem, iar dacă selectăm „Da”, atunci vechiul DLL va fi șters din folder, iar cel de sistem va fi folosit. Deși nu văd mare diferență între cele două, o prefer totuși pe cea care vine odată cu distribuția, așa că dau mereu clic pe „Nu”.

Acesta este OllyDbg pur, iar primul program pe care îl vom deschide doar pentru a ne familiariza cu OllyDbg va fi faimosul CrackMe al lui CrueHead, care este atașat acestui tutorial.

Pentru a deschide un fișier în OllyDbg, accesați Fișier -> Deschide sau faceți clic pe pictograma:

Se va deschide o fereastră cu care puteți găsi fișierul dorit, în acest caz este crackme-ul lui CrueHead.

Crackme-ul menționat mai sus se va deschide și, în acest moment, nu contează că este complet neclar ce înseamnă vizualizarea care ni se deschide - deocamdată vom trece doar prin diferitele părți și funcții ale OllyDbg și unele setări, astfel încât când în tutorialele ulterioare scrie, să spunem, „mergi la DUMP”, cel puțin știai unde este această opțiune.

Aici ne vom uita la cele patru părți ale ferestrei principale OllyDbg:

1) Cod dezasamblat

Denumit și listare. Aici Ollie ne arată codul dezasamblat al programului pe care urmează să-l depanăm; În mod implicit, Ollie este configurat să analizeze programul atunci când este deschis. Acest lucru poate fi modificat în Opțiuni -> OPȚIUNI DE DEBUGARE.

Adică, dacă caseta de selectare „AUTO START ANALISIS OF MAIN MODULE” este bifată, OllyDbg va analiza programul și va afișa informații suplimentare despre acesta.

Acesta este începutul listei de crack analizate de la CrueHead și, dacă o deschidem fără analiza, putem vedea diferența.

Fereastra de analiză conține o mulțime de informații, care, în ciuda faptului că nu ne sunt încă foarte clare, par foarte interesante. În același timp, este plăcut să știți că îl puteți elimina oricând dacă analiza se dovedește a nu fi foarte precisă sau dacă s-a strecurat o eroare în ea.

Adesea, OllyDbg afișează incorect unele părți ale programului, deoarece interpretează în mod eronat codul executabil ca date, apoi afișează ceva de genul:

În acest caz, puteți elimina manual analiza făcând clic dreapta pe listă și selectând „ANALIZĂ -> Ștergeți ANALIZA DIN MODUL”.

Și apoi lista va fi afișată corect.

O altă opțiune pe care o puteți folosi pentru a face lucrurile mai ușoare și care personal nu-mi place foarte mult (dar gusturile variază) este evidențierea sărituri și apeluri - faceți clic dreapta pe listă și selectați „ASPECT -> EVIDENȚIAT -> Sărituri și apeluri”.

Veți obține următoarele:

Aici vedem că apelurile sunt evidențiate în azur, iar tranzițiile sunt evidențiate în galben.

Lista este acum mai lizibilă, dar nu avem încă idee ce înseamnă asta, dar este bine să avem instrumentul pregătit pentru utilizare ulterioară.

2) Registre

A doua fereastră importantă este fereastra de înregistrare.

Amintiți-vă că fereastra de înregistrare se află în partea dreaptă a OllyDbg și există o cantitate semnificativă de informații afișate acolo.

Există mult mai multe informații pe care nu le vedem, dar puteți seta modul de afișare la trei stări („VIEW FPU REGISTERS” – afișați registrele FPU, „VIEW 3D NOW REGISTERS” – afișați registrele „3D NOW” și „VIEW DEBUG REGISTRERS” ” – afișează registrele de depanare). În mod implicit, primele sunt afișate.

3) Stivă sau grămadă

Acum să trecem la „stiva sau grămada”. Nu există prea multe opțiuni de configurare aici, în afară de capacitatea de a afișa informații despre registrele ESP și EBP.

În mod implicit, modul de afișare a informațiilor legate de ESP (și este, de asemenea, cel mai util), dar poate fi schimbat în modul de afișare a informațiilor legate de EBP, pentru care trebuie să faceți clic dreapta în această fereastră și să selectați „ GO TO EBP” și utilizarea ulterioară a elementului „GO TO ESP” ne va readuce la modul anterior.

Voi explica funcționalitatea stivei mai detaliat în capitolele ulterioare, dar deocamdată vom acoperi doar ceea ce poate fi schimbat prin configurare.

4) Dump

Fereastra de descărcare are multe moduri de afișare care pot fi modificate făcând clic dreapta în fereastra de descărcare și selectând pe cel de care aveți nevoie. Modul implicit este 8-byte Hex/ASCII.

Modul implicit este și cel mai des folosit, dar, în același timp, avem posibilitatea de a-l schimba pentru a afișa codul dezasamblat (DISASSEMBLE), text (TEXT) și alte formate (SHORT, LONG, FLOAT).

Și în sfârșit, opțiunea SPECIAL -> PE HEADER, care, după cum vom vedea în capitolele următoare, poate fi foarte utilă.

Acum cunoaștem părțile principale ale ferestrei principale OllyDbg, dar există și ferestre care nu sunt direct accesibile, dar pot fi apelate fie prin meniu, fie prin butoanele de pe panoul de control.

Să ne uităm la fiecare dintre ele.

Butonul L sau VIEW->LOG ne arată ce scrie OllyDbg în fereastra de jurnal. Poate fi configurat să afișeze diverse tipuri de informații, iar în mod implicit fereastra de jurnal stochează toate informațiile de pornire, precum și informații legate de JURNALELE CONDIȚIONALE BREAKPOINTS. Pe acesta din urmă îl vom întâlni mult mai târziu, dar deocamdată să ne uităm la informații despre procesul de rulare (în cazul nostru, acesta este crack-ul lui CrueHead) și bibliotecile pe care le încarcă.

Una dintre cele mai importante opțiuni din această fereastră este înregistrarea într-un fișier în cazul în care dorim să salvăm informații într-un fișier text. Pentru a activa această opțiune, faceți clic dreapta și selectați „LOG ÎN FIȘIER”.

Butonul E sau VIEW->EXECUTABLES ne arată o listă de module pe care le folosește programul: exe, dll, ocx și altele.

Și aici, butonul drept al mouse-ului afișează multe opțiuni pe care nu le vom analiza deocamdată, dar pe care le-am văzut deja când am explorat fereastra principală OllyDbg.

Butonul M sau VIEW->MEMORY afișează memoria ocupată de programul nostru. Aici vedem secțiuni ale aplicației, biblioteci utilizate de proces, stiva și diverse secțiuni ocupate de sistem, iar de multe ori programele ocupă noi secțiuni de memorie în timpul execuției.

Făcând clic dreapta, putem face o CĂUTARE în memorie pentru a găsi șiruri de diferite tipuri (text, hexazecimal, unicode), există și posibilitatea de a evidenția punctele de întrerupere în secțiuni, precum și posibilitatea de a schimba drepturile de acces la acestea din urmă ( selectați SETARE ACCES).

Butonul T sau VIEW->THREADS ne arată o listă de fire (threads) ale programului.

Deși acum nu știm ce este, și vom afla doar în capitolele următoare, nu va fi de prisos să vă familiarizați cu fiecare dintre ferestre. Vom învăța cum să le folosim mai târziu.

Butonul W sau VIEW->WINDOWS afișează ferestrele programului, dar deoarece nu rulează încă, lista ferestrelor rămâne goală.

Butonul H sau VIEW->HANDLES afișează mânere, mai târziu voi explica ce fac.

Butonul C sau VIEW->CPU ne întoarce la fereastra principală OllyDbg.

Butonul / sau VIEW->PATCHES arată o listă de corecții aplicate dacă programul a fost modificat. Deoarece încă nu au fost făcute modificări, fereastra rămâne goală pentru moment.

Butonul K sau VIEW->CALL STACK afișează „call stack”, o listă de apeluri pe care le-am întâlnit până în punctul în care programul s-a oprit.

Butonul B sau VIEW->BREAKPOINTS afișează o listă de puncte de întrerupere normale situate în program. Nu există puncte de întrerupere hardware sau puncte de întrerupere a memoriei, doar cele obișnuite.

Butonul R sau VIEW->REFERENCES arată o fereastră cu link-uri primite de noi ca urmare a căutării link-urilor în Ollie

Butonul „…” sau VIEW->RUN TRACE afișează rezultatul comenzii RUN TRACE. Aici putem selecta și opțiunea LOG TO FILE pentru a salva rezultatele urmăririi într-un fișier text.

Am acoperit panoul cu cele mai importante butoane, astfel încât să vă familiarizați cu capabilitățile pe care le oferă, pe măsură ce începem să le aprofundăm în capitolele ulterioare.

Cum să configurați OllyDbg să devină JIT (JUST IN TIME DEBUGGER)

Desigur, nu vom folosi JIT tot timpul, ci doar în cazuri speciale, deoarece dacă apare o eroare la orice program care rulează pe mașina noastră, atunci nu avem nevoie deloc de folosit Ollie (în mod implicit, dr.watson este folosit ca JIT).

Pentru a face OllyDbg un depanator JIT, trebuie să mergeți la OPȚIUNI->DEPAZARE LA TIMP

Și apăsați butoanele MAKE OLLYDBG JUST IN TIME DEBUGGER și DONE în secvență

Pentru a elimina această funcție, trebuie să faceți clic pe RESTORE JUST IN TIME DEBUGGER și DONE în același loc.

Conectarea pluginurilor în OllyDbg

OllyDbg vă permite să conectați pluginuri care pot fi utile pentru rezolvarea unei anumite probleme. Deocamdată, ne vom limita la conectarea pluginului COMMAND BAR pentru a afla cum să facem acest lucru.

După aceea, despachetați pluginul și uitați-vă la conținutul folderului în care s-a făcut acest lucru:

În primul rând, trebuie să creați un folder pentru pluginuri. Îl voi crea în C:/ și îl voi numi PLUGINS.

Desigur, pluginurile pot fi localizate oriunde, dar îmi place să găzduiesc totul în C. Oricum, acum trebuie să configuram OllyDbg astfel încât să recunoască acest folder ca locație a tuturor pluginurilor.

Pentru a face acest lucru, accesați OPȚIUNI->ASPECT.

Și în fereastra care se deschide, deschide fila DIRECTORIE.

Vedem că calea către pluginuri este directorul în care se află însuși OllyDbg.exe și am putea pune pluginurile acolo, dar îmi place să le țin separate, apoi faceți clic pe PLAGIN PATH->BROWSE pentru a găsi folderul creat de noi. .

Selectați folderul PLUGINS și salvați modificările.

Adică, trebuie să reporniți Ollie, astfel încât să recunoască noul folder cu pluginuri, dar mai întâi trebuie să copiați ultimul plugin descărcat în el.

Copiați întregul conținut al arhivei în folderul PLUGINS.

Acum toate fișierele pluginului „Command Bar” se află în folderul PLUGINS, iar restul ar trebui să fie și ele plasate (deseori nu puteți copia toate fișierele din arhivă, ci doar dll-ul).

Acum închideți OllyDbg, dacă era încă închis și lansați-l din nou. Vedem că COMMAND BAR și opțiunile sale au apărut în meniul PLUGINS.

În partea de jos a OllyDbg vedem BARA DE COMANDĂ instalată.

Acesta este un câmp de text pentru introducerea comenzilor care ne poate fi de folos în multe cazuri, iar mai târziu vom vedea utilizarea lor, dar deocamdată este important să învățăm cum să conectăm plugin-uri.

Pentru a dezinstala PLUGIN, pur și simplu ștergeți dll-ul corespunzător din folderul PLUGINS și reporniți OllyDbg, iar pluginul va dispărea. Cu toate acestea, este prudent să păstrați întotdeauna BARA DE COMANDĂ activată.

Să deschidem din nou crack-ul lui CrueHead în OllyDbg.

Cele mai utile chei din OllyDbg sunt:

F7: Execută o linie de cod (dacă suntem pe CALL, atunci intrați în secțiunea de cod apelată)

F8: Execută o linie de cod (dacă suntem într-un CALL, pur și simplu execută apelul fără a intra și trece la următoarea linie după CALL).

Aceste două tipuri de urmărire manuală sunt foarte diferite și în ce cazuri să folosim fiecare dintre ele vom lua în considerare mai târziu.

F2: Setează un punct de întrerupere normal pe linia marcată. Pentru a elimina acest punct de întrerupere, apăsați din nou F2.

De exemplu:

Dorim să setăm punctul de instalare la poziția 40101A, așa că marchem această linie cu mouse-ul.

Cu un singur clic de mouse este marcat și devine gri ca în imagine. Apoi apăsați F2.

Vedem că poziția corespunzătoare din prima coloană devine roșie, ceea ce indică faptul că aici există un punct de întrerupere. Apăsând din nou F2, îl puteți elimina.

F9: rulează un program care va rula până când atinge un punct de întrerupere, aruncă o excepție sau pur și simplu încetează să ruleze dintr-un motiv oarecare. Când programul rulează, cuvântul RUNNING este afișat în colțul din dreapta jos al OllyDbg.

Lansând crackme de la CrueHead, vom vedea următoarele:

Pentru a opri temporar rularea programului, apăsați F12 sau DEBUG->PAUSE.

Vedem că OllyDbg afișează cuvântul PAUSED. Puteți continua să rulați programul apăsând F9 sau DEBUG->RUN.

Pentru a închide programul care este depanat, selectați DEBUG->CLOSE.

Aceasta a fost o privire de ansamblu rapidă a OllyDbg și vom continua să explorăm numeroasele sale opțiuni și capabilități mai detaliat în capitolele următoare. Principalul lucru este că descărcați programul, îl configurați, priviți din nou tot ce s-a discutat în acest tutorial, conectați și pluginul, porniți și opriți crack-ul lui CrueHead, încercați să setați puncte de întrerupere, astfel încât în ​​capitolul următor toate aceste lucruri să nu fie cauza probleme.tu ezitare si indoiala.


Acest articol este oferit doar în scop informativ. Echipa de proiect DAXA nu poartă nicio responsabilitate.


„Lecție de cracking cu OllyDbg”
Cred că mulți oameni sunt interesați de modul în care se rup programele?, cum puteți ocoli înregistrarea sau cum să ocoliți limitarea unui program? În acest articol voi da un exemplu simplu de ocolire a înregistrării, voi încerca să explic totul foarte simplu, astfel încât toată lumea să poată înțelege. Este recomandabil să aveți cel puțin o idee aproximativă despre ce este asamblatorul, dar dacă nu aveți aceste cunoștințe, nu vă faceți griji, cred că după această experiență, veți învăța cu siguranță elementele de bază ale asamblatorului.

După ce ați descărcat tot software-ul necesar, instalați-l oriunde doriți. Toate programele nu necesită instalare. În primul rând, lansăm depanatorul nostru OllyDbg, când lansați prima dată acesta vă va cere să specificați căile către UDD și Plugin-uri, să-l ajutăm mergând la Opțiuni->Aspect->Directoare și înregistrând ambele căi (doar să specificați folderul în care se află OllyDbg). Nu vă lăsați intimidați de numeroasele ferestre, avem nevoie doar de 3 pentru a funcționa.

1.CPU
2. Puncte de întrerupere
3.Petice

Recomand să închideți toate celelalte ferestre pentru a nu ne deranja. Acum voi explica sarcina noastră, trebuie fie să facem ca programul să accepte orice cheie, fie să nu afișăm deloc un mesaj de înregistrare și să uităm de el pentru totdeauna :). Deci, să începem, voi încerca să descriu totul pas cu pas.

1.Deschideți programul nostru în depanator. Pentru a face acest lucru, deschideți meniul Fișier->Deschideți și selectați programul nostru de testare. După încărcare, vom vedea această imagine în fereastra CPU.

Acesta este codul de asamblare al programului nostru.
Acum hai să explic câteva rânduri:
PUSH EBP ; Începutul unei alte funcții
Apelați TestP.00405С60; Apelarea unei funcții
Acest lucru va fi suficient pentru noi deocamdată.
2.Acum trebuie să găsim o funcție care să afișeze o fereastră care vă cere să introduceți o cheie. Pentru a face acest lucru, executați programul pas cu pas apăsând tasta F8 până când apare o fereastră care solicită introducerea. După câteva clicuri, apare o fereastră de introducere.

Acum știm că undeva în această funcție (TestP.004523B8) va fi afișată fereastra noastră. Trebuie să ajungem la partea de jos a funcției care afișează fereastra; pentru aceasta trebuie să intrăm în această funcție. Acum, înainte de această linie CALL TestP.004523B8 trebuie să punem un punct de întrerupere.Pentru a face acest lucru, selectați linia din fața ei și apăsați F2 și vedeți că această linie a fost adăugată în fereastra Puncte de întrerupere.

Apoi, faceți clic pe acest buton pentru a descărca din nou programul nostru. Acum trebuie să ajungem la punctul de întrerupere, pentru a face acest lucru facem clic pentru a executa programul nostru și vedem că execuția s-a oprit la punctul nostru de întrerupere. Pentru a intra în funcție, apăsați tasta F7. Cred că înțelegi diferența dintre F8 și F7, primul urmărește programul fără a intra în funcții, al doilea cu introducerea de funcții. Vedem această poză.

Trebuie să continuăm până găsim o funcție care afișează o fereastră și procesează apăsând butonul OK și stabilește dacă am introdus cheia corect sau nu. Să continuăm, apăsați și F8 până când apare fereastra.

Din nou am stabilit un punct de pauză în fața lui.

Apăsăm și din nou, vedem că execuția s-a oprit la primul nostru punct de întrerupere, dar trebuie să mergem la al doilea, pentru a face acest lucru apăsăm din nou, execuția va ajunge la al doilea punct de întrerupere. Intrăm în funcție cu tasta F7, vedem următoarele.

Din nou, setăm un punct de întrerupere și revenim aici, intrați în funcție, cred că înțelegeți deja cum se face acest lucru. După ce intră în funcție vedem următoarele.

Continuăm căutarea apăsând F8. Când apăsăm F8, vedem că funcțiile API încep să apară,

Deci deja suntem aproape. Apăsați încet și urmăriți când apare fereastra. Acesta este ceea ce s-a întâmplat, în timp ce urmărim programul, fereastra noastră a apărut în bara de activități,

A ieșit pe această linie,

Dar când dai clic pe ea cu mouse-ul, fereastra nu apare, ceea ce înseamnă că suntem acolo unde avem nevoie de ea, această funcție este cea care desenează fereastra și undeva aici se bifează cheia pe care am introdus-o. Continuăm să urmărim programul mai departe (F8!) și vedem asta în acest loc

Un fel de ciclu care se repetă în mod constant, deja ne doare degetul să ținem F8 , dar pur și simplu nu se va termina, pentru a face asta setăm un punct de întrerupere pe prima linie după ciclu (MOV DWORD PTR SS:,EAX)

Și apăsăm butonul și vedem că fereastra s-a desenat complet, așteaptă intrare de la noi, programul s-a oprit aici, în buclă. Apoi, introduceți orice cheie și faceți clic pe OK.

Fereastra sa închis și ne-am întors la fereastra de depanare, execuția s-a oprit la punctul nostru de întrerupere. Acum trebuie să găsim o funcție care afișează o fereastră cu o notificare că cheia a fost introdusă incorect. Pentru a face acest lucru, urmăriți (F8) programul nostru până când apare o fereastră de notificare.

Aici ne vom da seama ce este. Prima linie care vă atrage atenția este aceasta este cheia noastră corectă, dar nu vă așteptați să o găsiți atât de ușor în alte programe, de obicei cheile nu se află doar în memorie, așa că sarcina noastră va fi să ne asigurăm că programul acceptă orice cheie! Acum să analizăm codul înainte de a apela funcția (CALL TestP.00427294) care afișează o fereastră cu o notificare de eroare. În primul rând, ne uităm la fereastra de registre, care se află în fereastră

Și vedem că registrul EAX conține adresa cheii pe care am introdus-o în memorie și, în consecință, ce am introdus (eu am introdus 23). Aici totul este puțin mai complicat și trebuie să aveți măcar puține cunoștințe despre operatorii de bază ai asamblatorului. Credem că programul trebuie să compare cheia noastră cu alta sau să verifice corectitudinea ei în orice alt mod, dar pentru aceasta trebuie să apeleze o funcție care va face toate acestea. Deci căutăm aproximativ următoarea structură

MOV EAX, ...  //scrie adresa liniei noastre în EAX
...................
APEL...          //apelarea unei funcții care va verifica corectitudinea funcției noastre
JNZ(sau JE) ...// salt condiționat (citiți despre ele!)

Câteva despre saltul condiționat, folosind acest operator puteți merge la o anumită linie de cod, adresa este indicată după operator. Aceasta înseamnă că după apelarea funcției, dacă cheia a fost introdusă corect după apelarea acestui operator, aceasta va merge la linia după care va începe programul nostru. Dacă nu, atunci codul după acesta va fi executat. Deci căutăm, acest cod ne atrage imediat atenția

MOV EAX, DWORD PTR SS:
MOV EDX,TestP.00453BA4
APEL TestP.00404258
JE SCURT TestP.00453B4A

Acum re-execută această bucată de cod pas cu pas și vei vedea că acest operator
JE SCURT TestP.00453B4A este omis și nu ne aruncă nicăieri, ceea ce înseamnă că aceasta este funcția noastră care ne-a verificat codul și s-a dovedit a fi incorect, motiv pentru care operatorul JE nu ne-a aruncat nicăieri. Vă voi explica cum verifică acest operator corectitudinea, facem totul „rigid” până la urmă :). Asta inseamna ca daca se introduce codul, acest operator ne va trimite pe adresa 00453B4A si totul va fi ok :). Inlocuim acest operator cu un salt neconditionat (JMP), care in orice caz ne va transfera la aceasta adresa. Uitați-vă unde se află această adresă (linia evidențiată în albastru).

Vedem că se omite apelul la funcția care afișează o notificare că tasta este incorectă.
Pentru a înlocui o linie, selectați-o și apăsați Space și înlocuiți-o
pe aceasta.
Vedem că linia JE SCURT TestP.00453B4Cînlocuit în fereastră Petice linie adăugată.

Acum verificăm dacă funcționează. Apăsați butonul, în fereastra Breakpoints, faceți clic dreapta și selectați Disable All din meniu. Apoi, în fereastra Patch-uri, faceți clic dreapta pe linia noastră și selectați Apply Patch din meniu. După aceea, apăsați butonul, va apărea o fereastră în care vă cere o cheie, introduceți orice cheie, apăsați ok și programul nostru este înregistrat. Acest program special va cere întotdeauna cheia, deoarece acesta este doar un test, iar un program real ar înregistra pentru sine că ați introdus cheia corect.

Notă! Aici am putut găsi imediat fragmentul de cod de care aveam nevoie, dar totul nu va fi întotdeauna atât de simplu. Uneori va trebui să încercați pe rând toate structurile de acest tip.

3. Ultimul pas este încorporarea patch-ului în program, pentru aceasta avem nevoie de un editor Hex. Așa că îl deschidem și selectăm programul nostru, se va deschide un nor de cifre hexazecimale. Trebuie să găsim șirul JE SHORT TestP.00453B4A în hexazecimal și să îl marcam cu al nostru. Cred că ați observat că în fereastra CPU(OllyDbg), forma sa hexazecimală este scrisă vizavi de fiecare linie. Pentru a găsi cu exactitate această linie, căutăm astfel, nu introduceți doar căutare 74 2B, și luați linia anterioară de cod și căutați astfel E8 3B 07 FB FF 74 2B

În fișierul exe, codul merge în lanț, motiv pentru care luăm linia anterioară. De ce facem asta? Doar că o linie atât de mică precum 74 2B poate fi repetată de mai multe ori, așa că luăm linia anterioară pentru a găsi exact ceea ce avem nevoie. Apoi ne uităm la cum arată șirul nostru modificat JMP SHORT TestP.00453B4A în codul hexazecimal, arată ca acest EB 2B așa că înlocuim șirul găsit cu al nostru, pentru a face acest lucru apăsăm butonul și înlocuim șirurile astfel

Salvați modificările și închideți editorul. Asta e tot, acest program va accepta orice cheie, care este ceea ce era necesar. Vă sugerez să încercați să vă asigurați că programul nu vă solicită deloc să introduceți cheia.

IMPORTANT!! Înainte de a începe să manipulați programe, trebuie să verificați dacă fișierul *.exe a fost împachetat. Pentru a face acest lucru, veți avea nevoie de utilitarul PEiD. Cum se face toate acestea este subiectul unui articol separat, vă sugerez să vă dați seama singur.

Salutare tuturor. Astăzi voi descrie OllyDebugger. OllyDebugger (denumit în continuare Olly) este un depanator superb (ring-3). Popularitatea acestui depanator este in crestere cu pasituri :). Pentru începători, acest depanator este exact lucrul; pentru profesioniștii care știu să-l folosească foarte bine, este un instrument indispensabil. Acest articol va descrie tot ce pot face în Olly.

1. Ce este Olly Debugger

Preluat din referință: Olly este un depanator la nivel de asamblare pe 32 de biți, cu o interfață intuitivă. Deosebit de util dacă codul sursă nu este disponibil sau când întâmpinați probleme cu compilatorul.

Procesoare acceptate. Olly acceptă toate 80x86, Pentium, MMX, 3DNow!, inclusiv extensiile Athlon, comenzile SSE și formatele de date aferente.

Formate de date. Ferestrele de descărcare afișează date în toate formatele comune: hexazecimal, ASCII, Unicode, numere întregi semnate/nesemnate/hexazecimale pe 16 și 32 de biți, dezasamblatoare (MASM, IDEAL sau HLA).

Lansa. Puteți defini un executabil pe linia de comandă, selectați dintr-un meniu, trageți un fișier în Olly, reporniți ultimul program pe care îl depanați sau atașați la un proces care rulează deja. Nu necesită instalare, puteți rula Olly de pe o dischetă!

Depanarea DLL-urilor. Cu Olly, puteți depana biblioteci de legături dinamice (DLL) autonome. Olly lansează automat un mic executabil care încarcă biblioteca și vă permite să apelați funcțiile exportate.

Analiză. Analizorul este una dintre cele mai importante părți ale lui Olly. Recunoaște proceduri, bucle, tabele, constante și șiruri încorporate în cod, construcții complicate, solicitări de funcție API, numere de parametri ai funcției, secțiuni de import și așa mai departe. Analiza face codul dublu mult mai lizibil, face depanarea mai ușoară și reduce probabilitatea de blocări. Analizorul nu este orientat spre compilator și funcționează la fel de bine cu toate programele Windows.

Scanner de obiecte. Olly scanează fișiere obiect sau biblioteci (formate OMF ȘI COFF), extrage cod din ele, le segmentează și le localizează în programul depanat.

Suport complet Unicode. Aproape toate operațiunile disponibile pentru șirurile ASCII sunt disponibile și pentru șirurile Unicode și invers.

2. Taste rapide

Cu „tastele rapide” vreau să încep povestea, pentru că... Fără ele, va trebui să petreci mult timp târându-te prin meniu și depanatorul își va pierde imediat confortul. Să începem cu panoul de control:

Primul buton este de a deschide fișierul (tasta orizontală F3)
Al doilea buton este să reporniți fișierul (tasta orizontală Ctrl+F2)
Al treilea buton este de a închide fișierul (tasta orizontală Alt+F2)
Al patrulea buton este de a porni programul (tasta orizontală F9)
Al cincilea buton este de a întrerupe lansarea (tasta orizontală F12)
Al șaselea buton este de a urmări cu intrarea în subrutine (tasta orizontală F7)
Al șaptelea buton este de a urmări fără a introduce subrutine (tasta orizontală F8)
Al optulea buton este să porniți urmărirea automată prin introducerea subrutinelor (tasta orizontală Ctrl+F11)
Al nouălea buton este de a începe urmărirea automată fără a introduce subrutine (tasta orizontală Ctrl+F12)
Al zecelea buton este de a executa programul înainte de a ieși din subrutină (tasta orizontală Ctrl+F9)
Al unsprezecelea buton - mergeți la adresa (tasta orizontală Ctrl+G)

Toate celelalte butoane de pe panoul de control vor fi discutate mai târziu.

Comenzi necesare:
Ctrl+A – analizează codul
Ctrl+C – copiați datele
Ctrl+F7 – activați modul în care codul va fi executat ca și cum ați apăsa și nu ați eliberat butonul F7
Ctrl+F8 – activați modul în care codul va fi executat ca și cum ați apăsa și nu ați eliberat butonul F8
Shift+F8 – continuă urmărirea programului chiar dacă apare o excepție
Shift+F9 – continuați să rulați programul chiar dacă apare o excepție
Ctrl+T – setări de urmărire automată
Ctrl+F11 – Începeți urmărirea automată cu introducerea subrutinelor
Ctrl+F12 – Porniți urmărirea automată fără a introduce subrutine
F2 – Plasați un punct de întrerupere pe linia selectată

3. Pluginuri

Probabil că ai început să fii indignat de motivul pentru care vorbesc despre tot, dar nu despre depanator în sine. Ca răspuns, voi spune: „Voi vedea cum depanați programul, cel puțin fără pluginul CommandBar.” Da, este adevărat că este mult mai dificil să depanezi un program fără pluginuri. Acum voi da o listă cu plugin-urile pe care le-am instalat și pe parcurs voi explica ce este:

1. IsDebuggerPresent – ​​ascunde depanatorul de la detectare folosind funcția IsDebuggerPresent.
2. Hide Debugger – Ascunde depanatorul de detectare folosind funcția IsDebuggerPresent.
3. Olly Script – vă permite să scrieți scripturi pentru a ajuta la depanare. Nu folosesc acest plugin pentru că... Nu cred că este necesar să automatizăm depanarea.
4. Olly Dump – vă permite să descărcați procesul de depanare și să restabilească imediat importul acestuia. Super plugin. sfătuiesc pe toată lumea.
5. Bara de comandă – vă permite să faceți minuni. În depanator apare o linie în care puteți introduce comenzi foarte inteligente. IMHO, fără acest plugin, depanarea nu este posibilă :). Am tradus certificatul din plagie și îl voi furniza în plus Nr.1.

4. Prima cunoștință

După cum am spus, depanatorul este foarte ușor de lucrat. Iată o vedere standard a ferestrei principale cu programul încărcat pentru depanare:

Am zis că e o fereastră standard, am mințit, am schimbat culorile :). Acum totul este în ordine. În ordinea descrierii: Fereastra principală, Fereastra Înregistrare, Panoul Stivă, Panoul Meniu.

Fereastra principală: Această fereastră este locul unde are loc depanarea efectivă. Toate instrucțiunile sunt furnizate în formă dezasamblată. Puteți muta linia index folosind cursorul. Folosind linia de index, puteți alege ce date să copiați (totul este mult mai simplu aici decât în ​​SoftIce. Selectat. Ctrl+C, a mers la locul potrivit Ctrl+V), ce comandă să schimbați, unde să puneți un punct de întrerupere etc. . Adresa care ar trebui executată în continuare este evidențiată în lateral. Între coloana de adrese și coloana de listare dezasamblată există o coloană cu instrucțiuni pentru codul mașinii. Ultima coloană conține comentarii.

Fereastra Register: Fereastra Register afișează toate registrele pe 32 de biți, registrele de semnalizare și diverse alte registre. Pentru a schimba un registru, trebuie să faceți clic pe valoarea acestuia de 2 ori și să introduceți o nouă valoare. Puteți inversa registrul unui steag făcând dublu clic pe unul dintre ele.

Panoul de stivă: în panoul de stivă, puteți modifica octeții de care aveți nevoie în memorie, puteți seta puncte de întrerupere și puteți căuta regulile corecte. coduri etc.

Bara de meniuri: bara de meniuri va fi acoperită într-un capitol mai mare deoarece... acest subiect este foarte important.

5. Cunoașterea meniului principal

Să începem cu un meniu numit Fișier. Acest meniu are file: Deschidere, Atașare, Ieșire. Deschidere – deschideți un fișier pentru depanare, Atașați – alăturați-vă unui proces care rulează deja pentru depanare, Ieșire – ieșiți.

Vedere
Jurnal – Vizualizați jurnalul despre descărcarea fișierelor etc. (tasta rapidă: Alt+L)
Module executabile – Vizualizați toate modulele pe care le utilizează aplicația care este depanată. (tasta rapidă: Alt+E)
Memorie – Vizualizați cardul de memorie. Iată aspectul său aproximativ:

Prima coloană este adresa unde sunt încărcate diverse secțiuni ale fișierului, biblioteci DLL. A doua coloană este dimensiunea în memorie a secțiunii. A treia coloană este de obicei numele modulului. A patra coloană este numele secțiunilor. A cincea coloană este ceea ce este conținut în secțiune. Toate celelalte coloane nu sunt importante, pentru că ele reflectă atributele secțiunilor din memorie. (tasta rapidă: Alt+M)

Fire – Vizualizați toate firele de execuție ale programului, înghețați-le, p`glnpnghr| ei, schimbați-le prioritatea, ucideți-i.
Windows – Vizualizați până la x.. informații despre ferestre, cursuri etc. folosit de program.
Mânere – Vizualizare Mânere.
CPU – Deschide fereastra principală. (tasta rapidă: Alt+C)
SEH Chain – Uite, pune un punct de pauză pe toate Seh’s anunțate.
Patch-uri – Vizualizați o listă cu toate modificările pe care le-ați făcut programului, anulați toate modificările etc. (tasta rapidă: Ctrl+P)
Stack de apeluri – Vizualizați toate apelurile care rulează codul din stivă. (tasta rapidă: Alt+K)
Puncte de întrerupere – Vizualizați toate punctele de întrerupere, dezactivați-le și ștergeți-le. (tasta rapidă: Alt+B)
Run Trace – Vizualizați jurnalul de urmărire.
Fișier – Editor de fișiere hexazecimal.

Depanați
Run – Lansați aplicația.
Pauză – Întrerupeți execuția aplicației.
Restart – Reporniți programul depanat.
Închidere – Închiderea programului depanat.
Intră în – Echivalent cu F7.
Pas peste - Echivalent cu F8.
Animați în – Echivalent cu apăsarea constantă a F7.
Animați peste – Echivalent cu apăsarea constantă a F8.
Execute till return – Execută programul înainte de a ieși din subrutină.
Trace into – Urmărire automată cu intrare în subrutine.
Trace over – Urmărire automată fără a intra în subrutine.
Setare condiție – Atribuiți o condiție pentru urmărirea automată.
Închideți urmărirea rulării – Opriți urmărirea automată.
Puncte de întrerupere hardware – Vizualizați punctele de întrerupere hardware.

Orice altceva din acest meniu nu este important.

Opțiuni
Aspect – Setările interfeței depanatorului. Nu mă voi opri asupra acestor setări, pentru că... Nu sunt obligatorii și le puteți da seama singur.
Opțiuni de depanare (tasta orizontală – Alt+O) – Setări de depanare. Acesta este cel mai interesant lucru; voi dedica capitolul următor acestui element de meniu.
Depanare just-in-time – În aceste setări, puteți atribui Olly ca depanator care va fi lansat atunci când o aplicație provoacă o eroare gravă.
Adăugați la Explorer – adăugați un element pentru depanarea programului în meniul contextual Explorer.

6. Setările programului principal

Voi explica doar cele mai importante opțiuni.

Securitate
Avertizați când punctul de întrerupere se află în afara secțiunii de cod – Raportați dacă doriți să plasați un punct de întrerupere în afara secțiunii de cod. Desigur, această opțiune nu trebuie selectată.
Avertizați la terminarea procesului activ – Întrebați: „Chiar doriți să încheiați procesul?” Această opțiune trebuie selectată.
Avertizați dacă nu este administrator – Pentru a vă deranja dacă nu sunteți administrator. Această opțiune este pentru sadomasochism :)

Depanați
Setați prioritate înaltă la urmărirea procesului depanat – Setați prioritatea b(qnjhi) pentru aplicație la urmărire Această opțiune ar trebui să fie selectată „după gust” (am selectat-o).

Evenimente
Faceți prima pauză la – Faceți prima oprire la. În acest caz, sunt oferite trei opțiuni: Punct de întrerupere a sistemului, Punct de intrare în modulul principal, Fereastra principală. Din nou, toți trebuie să alegeți cea mai bună opțiune. Am selectat punctul de intrare în modulul principal.
Întreruperea noului DLL de modul – opriți-vă la fiecare nouă bibliotecă încărcată.
Pauza la descărcarea modulelor – Opriți când descărcați bibliotecile DLL din memorie.
Întreruperea unui fir nou – Opriți-vă când creați un fir nou.
Rupere la capătul firului – Opriți când firul se termină.

Excepții
Ignorați încălcările de acces la memorie în KERNEL32 – Ignorați erorile de memorie în Kernel32.
Int3 breaks - Nu te opri la comenzile int3. Această opțiune este FOARTE utilă la despachetarea unor dispozitive de protecție. Citiți articolul meu despre unboxing pentru mai multe detalii.

Urmă
Dimensiunea tamponului de urmărire de rulare – Dimensiunea tamponului de urmărire. Este mai bine să setați valoarea maximă.
Comenzi de jurnal – Păstrați un jurnal al operațiunii trasorului. Această opțiune încetinește ușor urmărirea, așa că ar trebui să fie setată atunci când este nevoie.
Urmăriți întotdeauna DLL-urile de sistem – Urmăriți întotdeauna bibliotecile de sistem din trecut. Această opțiune trebuie selectată pentru toată lumea.
După execuție până la RET, treceți peste RET – Această opțiune vă permite să vă opriți când apăsați Ctrl+F9 nu pe RET, ci după ce este executat. Mi se pare foarte convenabilă această opțiune, așa că vă sfătuiesc să o selectați.

SFX
Când modulul principal este auto-extractabil - Aici ni se cere să alegem una dintre cele trei opțiuni: Oprire la începutul codului de despachetare, Urmărire la OEP în blocuri, Urmărire la OEP pe octeți. Ei bine, ce să spun, opțiuni pentru freeloaders. Căutare automată OER! Adevărat, uneori Olly nu stabilește corect dacă programul este ambalat sau nu.

Siruri de caractere
Ei bine, totul este clar aici. Decodificarea diferitelor caractere.

Adrese
Aceste opțiuni nu sunt importante, pentru că ele determină modul în care vor fi afișate adresele.

Comenzi
Aceste opțiuni sunt necesare doar pentru persoanele care iubesc cu adevărat listele ASM foarte frumoase.

Dezam
Setări pentru dezasamblare. Puteți face clic pe toate opțiunile și puteți vedea cum va arăta lista asm. Toate celelalte setări nu sunt importante în opinia mea.

7. Prima depanare

Vom depana Fant0m crackme 4. Îl puteți descărca de aici: http://fant0m.cjb.net/. Din acest crackme vom încerca să obținem regul corect. număr pentru numele tău. Încărcați crackme sub depanator și apăsați F9 pentru a rula. Introduceți numele persoanei pentru care dorim să înregistrăm acest crackme. Introdu orice parolă. Deci, acum trebuie să setăm un punct de întrerupere pentru a citi numele și parola. Comutați la Olly și în comanda qrpnje scrieți bpx GetDlgItemTextA . Faceți clic pe Verificare. Ne-am găsit imediat în Olly în acest loc:

00401217 E8 62010000 Apelați 0040121C 68 00010000 IMPINGERE 100 00401221 68 84314000 IMPINGERE 00403184 00401226 68 E9030000 IMPINGERE 3E9 ; |ControlID = 3E9 (1001.) 0040122B FF75 08 PUSH DWORD PTR SS: ; |hWnd 0040122E E8 4B010000 Apel 00401233 FF75 08 PUSH DWORD PTR SS: 00401236 E8 BE000000 CALL 004012F9 0040123B 83F8 00 CMP EAX, 0 0040123E 74 150123E 74 15 604 040 004004001504004040 IMPINGERE 40 00401242 68 29304000 IMPINGERE 00403029 ; |Titlu = "Verifică serialul" 00401247 68 60304000 PUSH 00403060 ; |Text = "You got it! Congrats! :)" 0040124C 6A 00 PUSH 0 ; |hOwner = NULL 0040124E E8 49010000 CALL !} >

Este imediat clar că în procedura de la adresa 004012F9 se efectuează o verificare de înregistrare. Ajungem la apelul său folosind F8 și îl introducem folosind F7. Ce vedem:

004012F9 55 PUSH EBP 004012FA 8BEC MOV EBP, ESP 004012FC 56 PUSH ESI 004012FD 57 PUSH EDI 004012FE 8D3584304000 LEA ESI, DWORD 4040404 004012FD 57 PUSH EDI 004012FE 000 LEA EDI, DWORD PTR DS: 0040130A 33C0 XOR EAX, EAX 0040130C 33C9 XOR ECX, ECX 0040130E B31A MOV BL, 1A 00401310 803E00 CMP BYTE PTR DS:, 0 00401313 7415 JE SHORT 0040132A 00401315 8A06 MOV AL, BYTE PTR DS: DS: 11304040404040401304 9 32C 1 XOR AL, CL 0040131B F6F3 DIV BL 0040131D 66C1E808 SHR AX, 8 00401321 0441 ADD AL, 41 00401323 8807 MOV BYTE PTR DS:, AL 00401325 47 INC EDI 00401326 46 INC ESI 00401327 41 INC ECX 0401327 41 INC ECX 0401320 080401 080404 040132A C 60700 MOV BYTE PTR DS:, 0 0040132D 33C0 XOR EAX, EAX 0040132F 83F900 CMP ECX , 0 00401332 741A JE SCURT 0040134E 00401334 6884324000 PUSH 00403284 ; /String2 = "" 00401339 6884314000 PUSH 00403184 ; |String1 = „qwerty” 0040133E E8A1000000 CALL 00401343 83F800 CMP EAX, 0 00401346 7404 JE SHORT 0040134C 00401348 33C0 XOR EAX, EAX 0040134A EB02 JMP SHORT 00401341 EAX 00401348 00401348 040134E 5F POP EDI 0040134F 5E POP ESI 00401350 C9 LEAVE 00401351 C20400 RETN 4
Din acest cod reiese clar ca la adresa 0040133E codul tau este comparat cu cel corect. Plasați un punct de întrerupere la această adresă și apăsați F9. Comentariul String2 = "" se va schimba în ceva de genul acesta String2 = "ODMZAMHN". Deci, pentru locul ODMZAMHN veți avea reg. cod pentru numele dvs. Apăsați F9, introduceți codul corect, apăsați Verificare, eliminați toate punctele de întrerupere, apăsați F9 și bucurați-vă.

Anexa nr. 1

Ajutor cu bara de comandă. Explicația comenzilor din bara de comandă. Toate comenzile pe care le-am considerat inutile au fost eliminate din această listă.

Expresii
CALC [expresie] - Calculați valoarea unei expresii

Dezasamblator
AT [expresie] - Accesați adresa în dezasamblare
FOLLOW [prin expresie] - Mergeți la adresa din dezasamblator
ORIG - Accesați adresa curentă (EIP)
* - Accesați adresa curentă (EIP)

Deversați și stivuiți
D [expresie] - Mergeți la adresa din gunoi
DUMP [expresie] - Mergeți la adresa din dump
DA [expresie] - Dump în format de asamblare
DB [expresie] - Dump în hexazecimal
DC [expresie] - Dump în codificare ASCII
DD [expresie] - Dump ca adrese (format stivă)
DU [expresie] - Dump în codificare UNICODE
DW [expresie] - Dump în format de cuvânt hexazecimal
STK [expresie] - Accesați adresa pe stivă

Difuzare
A [expresie] [, comandă] - Dezasamblați adresa

Etichete și comentarii
Expresie L, etichetă - Asociază o etichetă simbolică cu o adresă
Expresie C, comentariu - Setează un comentariu pentru o adresă

Puncte de întrerupere
BP [expresie] [,condiție] - Setează punctul de întrerupere
BPX [nume funcție] - Setați puncte de întrerupere pentru toate instrucțiunile din modul care apelează [numele funcției]
BC [adresă] - Ștergeți un punct de control la adresa
MR expression1 [,expression2] - Setați un punct de întrerupere în memorie pentru accesul la o anumită zonă
MBT expression1 [, expression2] - Setați un punct de întrerupere în memorie pentru a scrie într-o anumită zonă
MD - Ștergeți punctul de întrerupere din memorie
HR [adresă] - Setați punctul de întrerupere hardware la un octet per acces la adresă
HW [adresă] - Setați punctul de întrerupere hardware la un octet per scriere la adresă
HE [adresă] - Setați punctul de întrerupere hardware pentru a executa comanda la adresa
HD [breakpoint number] - Ștergeți numărul punctului de întrerupere hardware

Comenzi de urmărire
STOP - Întrerupeți urma
PAUZĂ - Întrerupeți urmărirea
RUN - Rulați programul
G [adresă] - Execută la adresa
GE - Execut la adresa
S - Echivalent cu F7
SI - Echivalent cu F7
SO - Echivalent cu F8
TR - Executați programul până la ieșirea din subrutină

ferestre OllyDbg
LOG - Fereastra de vizualizare a jurnalului
MOD - Vizualizați modulele executabile
MEM - Deschide fereastra cardului de memorie
CPU - Deschideți fereastra principală a programului
BRK - Deschideți fereastra de vizualizare a punctului de întrerupere
OPT - Setări

Echipe diverse
EXIT - Ieșire Olly
RENUNȚĂ - Renunță la Olly
OPEN [nume fișier] - Deschide fișierul pentru depanare
CLOSE - Închide programul depanat
RST - Reporniți programul depanat
AJUTOR - arată ajutor (acest text, dar netradus)
AJUTOR - Olly arată-i lui Oll ajutor
HELP APIfunction - ajutor pentru funcțiile API

Anexa nr. 2

Puncte de întrerupere. Olly acceptă mai multe tipuri de puncte de întrerupere:
- Punct de întrerupere obișnuit, unde primul octet al comenzii pe care doriți să o întrerupeți este înlocuit cu INT3 (Capcană pentru depanare). Puteți plasa un punct de întrerupere selectând o comandă în dezasamblator și apăsând F2 sau prin meniul pop-up. Când apăsați F2 a doua oară când un punct de întrerupere este deja setat, acesta va fi eliminat. Numărul de puncte de întrerupere INT3 este nelimitat. Când închideți programul pe care îl depanați sau depanatorul, Olly salvează automat punctele de întrerupere. Nu încercați niciodată să setați un punct de întrerupere pe date sau în mijlocul unei comenzi! Olly vă va avertiza dacă încercați să setați un punct de întrerupere în afara unei secțiuni de cod. Puteți dezactiva acest avertisment în setările de protecție. În unele cazuri, Debugger-ul poate introduce propriile puncte de întrerupere temporare INT3.

Punct de întrerupere condiționat (tasta orizontală Shift+F2) - un punct de întrerupere INT3 obișnuit cu o condiție. De fiecare dată când depanatorul întâlnește un astfel de punct de întrerupere, își evaluează expresia și, dacă rezultatul este diferit de zero sau expresia este invalidă, oprește depanarea programului.

Punct de întrerupere condiționat cu înregistrare (tasta orizontală Shift+F4) - un punct de întrerupere condiționat cu înregistrare pentru a înregistra valoarea unei expresii sau a parametrilor unei funcții cunoscute de fiecare dată când punctul de întrerupere este executat.

Punct de întrerupere pentru memorie. Olly vă permite să setați un singur punct de întrerupere în memorie la un moment dat. Selectați o porțiune de memorie din dezasamblator sau dump CPU și folosiți meniul pop-up pentru a seta punctul de întrerupere la o`lr|. Punctul de întrerupere a memoriei anterior, dacă există, va fi șters automat. Aveți două opțiuni: opriți accesul la memorie (citește, scrieți sau executați) și numai scrieți. Pentru a seta un punct de întrerupere, Olly modifică atributele blocurilor de memorie care conțin datele.

Punct de întrerupere hardware (disponibil numai când utilizați un depanator sub Windows ME, NT, 2000 sau XP). Procesoarele compatibile cu 80x86 vă permit să setați 4 puncte de întrerupere hardware. Spre deosebire de un punct de întrerupere a memoriei, punctele de întrerupere hardware nu încetinesc viteza de execuție, ci acoperă doar până la 4 octeți.

O singură oprire pentru accesul la memorie (disponibil numai sub Windows NT, 2000 și XP). Îl puteți seta în fereastra Memorie la un întreg bloc de memorie prin meniul pop-up sau apăsând F2. Acest punct de întrerupere este util în special dacă doriți să interceptați cereri către un anumit modul.

Autotrace – Trebuie să specificați o condiție (tasta orizontală Ctrl+T) în care depanatorul va opri programul. Vă rugăm să rețineți că această opțiune poate încetini semnificativ (până la 20%) viteza de execuție a programului.

OllyDbg poate opri, de asemenea, execuția programului la anumite evenimente, cum ar fi atunci când un DLL este încărcat sau descărcat, sau un fir este generat sau terminat.

Anexa nr. 3

Setările mele de depanare.
Dacă doriți să utilizați setările mele, înlocuiți toate datele cu acest text în fișierul ollydbg.ini, care se află în același folder în care este instalat depanatorul.

Verificați versiunile DLL=0 Afișați bara de instrumente=1 Stare în bara de instrumente=0 Folosiți punctele de întrerupere hardware pentru a pas=1 Restaurați ferestrele=104191 Derulați MDI=1 Derulare orizontală=0 Fereastra cea mai de sus=0 Indexul fontului implicit=1 Indexul culorilor implicite=0 Index evidențierea sintaxei implicite=0 Dimensiunea bufferului de jurnal index=0 Rulați dimensiunea bufferului de urmărire index=7 Grupați comenzile adiacente în profil=1 Registru de urmărire evidențiat=-1 Mod de dezasamblare IDEAL=0 Dezasamblați cu litere mici=0 Separați argumentele cu TAB=0 Spațiu suplimentar între argumente=1 Afișează segmentele implicite=1 NEAR modificatori de salt=0 Utilizați forma scurtă de comenzi șir=0 Mnemonice sensibile la dimensiune=1 Mod de decodare dimensiune SSE=0 Partea de sus a stivei FPU=1 Afișați întotdeauna dimensiunea memoriei=1 Decodificați registrele pentru orice IP =0 Afișează adresele simbolice=1 Afișează numele modulelor locale=0 Date gri folosite ca umplere=1 Afișează direcția de săritură=0 Afișează calea de salt=0 Afișează calea de salt=0 Afișează calea dacă nu este efectuată salt=0 Subliniați remedieri=1 Centrul Urmăriți comandă=0 Afișează cadrele stivei=1 Afișează numele locale în stivă=1 Urmărirea stivei extinsă=0 Sincronizează sursa cu CPU=1 Include extractor SFX în cod=1 Mod de urmărire SFX=0 Utilizați intrarea SFX reală din rularea anterioară=1 Ignorați excepțiile SFX =1 Prima pauză=1 Oprire la noul DLL=0 Oprire la descărcarea DLL=0 Oprire la un fir nou=0 Oprire la sfârșitul firului=0 Oprire la șirul de depanare=0 Decodificați registrele SSE=0 Activați ultima eroare=1 Ignorați încălcările de acces în KERNEL32=1 Ignorați INT3=1 Ignorați TRAP=0 Ignorați încălcările de acces=0 Pasul în comenzi necunoscute=1 Ignorați împărțirea cu 0=0 Ignorați instrucțiunile ilegale=0 Ignorați toate excepțiile FPU=0 Avertizați când întreruperi frecvente=0 Avertizați când nu există pauze cod=0 Autoreturn=1 Salvați comanda inițială în trace=1 Afișați ESP urmărit=1 Animați peste DLL-uri de sistem=1 Urmăriți comenzile șir=1 Sincronizați CPU și rulați trace=0 Ignorați excepțiile personalizate=1 Actualizare inteligentă=1 Setați prioritate mare= 1 Adăugați argumente=1 Folosiți ExitProcess=1 Permiteți injecție să obțină WinProc=0 Sortare WM_XXX după nume=0 Tipul ultimului punct de întrerupere WinProc=0 Desen fără zăpadă=1 Demangle nume simbolice=0 Păstrați ordinal în nume=1 Numai ASCII imprimabil în dump=0 Permite simboluri diacritice=1 Decodare șiruri=0 Avertizați dacă nu administrator=0 Avertizați la terminarea procesului=1 Aliniați dialogurile=1 Folosiți fontul ferestrei de apelare=0 Fontul de dialog specificat=0 Restaurați pozițiile ferestrei=1 Restaurați lățimea coloanelor= 0 Evidențiați coloana sortată=0 Comprimați datele de analiză=1 Copiere de rezervă fișiere UDD=1 Completați restul comenzii cu NOPs=1 Mod de căutare de referință=0 Căutare globală=0 Căutare aliniată=0 Permiteți marja de eroare=0 Păstrați dimensiunea selecției editării hexadecimale=0 Modificați eticheta registrului FPU=1 Limite inspector hexadecimal=1 Mod de afișare MMX=0 Ultimele opțiuni selectate card=15 Ultima apariție selectată card=6 Ignorați majuscule în căutarea text=1 Tasta cu litere în Dezasamblare=1 Analiza codului slăbit=1 Decodați pascal strings=1 Ghiciți numărul de argumente=1 Acceptați apeluri departe și returnări=0 Acceptați modificările directe ale segmentului=0 Decodificați apelurile VxD=0 Acceptați comenzile privilegiate=0 Acceptați comenzile I/O=0 Acceptați NOP-urile=1 Acceptați schimburile în afara intervalului=0 Acceptați prefixe superflue=0 Acceptați prefixele LOCK=0 Acceptați operațiuni de stivă nealiniate=1 Acceptați formulare de comandă non-standard=1 Afișați ARG și LOCAL în proceduri=0 Salvați analiza în fișier=1 Analizați automat modulul principal=1 Analizați structura codului=1 Decodați ifs as switches=0 Salvați urma în fișier=0 Urmăriți conținutul registrelor=1 Funcțiile păstrează registrele=0 Decodați trucuri=0 Selectați automat tipul de registru=1 Afișați argumentele decodate=1 Afișați argumentele decodate în stivă=1 Afișați argumentele în stiva de apeluri= 1 Afișați apeluri induse=1 Mod de afișare a etichetei=0 Eticheta include numele modulului=0 Evidențiați etichetele simbolice=0 Evidențiați RETURNS în stivă=1 Ignorați calea în fișierul de date utilizator=1 Ignorați marcajul de timp în fișierul de date utilizator=1 Ignorați CRC în fișierul de date utilizator =1 Mod de sortare implicit în Nume=1 Tabulați coloanele în fișierul jurnal=0 Adăugați date la fișierul jurnal existent=0 Curățați datele adunate în fișierul jurnal=0 Omiteți spațiile în comentariile sursă=1 Ascundeți fișierele sursă inexistente=1 Oprire de tabulare= 8 Modul grafic de fișiere=2 Afișează numele de mâner intern=0 Ascunde mânerele irelevante=0 Utilizați RET în loc de RETN=0 Afișați semnalizatoarele urmărite=1 Numărul de linii care urmează EIP=0 Salvați datele utilizatorului din afara modulului=0 CPU=194.324.812.360 ,3 sub-ferestre CPU=327,798,321,798,537,771,479,909 OllyTest=0,0,1024,746,1 Referințe=256,420,256,210,1 Puncte de întrerupere=75,248,621,6,8,621,6,3,3,4,3,4,4,4,4,4,4 1 Patch-uri= 0,210,256,210,1 Module executabile=263,41,636,175,1 Harta memorie=357 ,41,519,274,1 Marcaje=110,145,624,175,1 Profil=132,174,624,182,1 Windows=132,177,614,179,1 Subiecte=155,204,492,124,124,182,12,12,12,182,179,179 2 10.256.210,1 Handle=196.325.647.175,1 Fișiere sursă=205.268.473.168,1 Apel stack=0,420,256,210 ,1 Call tree=132,132,791,175,1 SEH chain=0,0,256,210,1 Watch expressions=256,0,256,210,1 CPU Schema=0 CPU Dezassembler=7,0,0,0,0,0 CPU, Dump=7,0 1,0 ,4353.0 CPU Stack=7,0,0,0 CPU Info=7,0,0,0 CPU Registers=7,0,0,0 Referințe=7,0,1,0,0 Breakpoints=1, 0 ,1,0,0 Run trace=1,0,1,0,0 Patch-uri=1

Completare

Acesta este sfârșitul cunoștinței tale cu minunatul depanator OllyDebugger. Desigur, este imposibil să descriu toate capacitățile acestui depanator în articol, dar am încercat și sper că a funcționat. Unele posibilități depășesc scopul acestui articol, dar sunt sigur că veți descoperi singuri aceste oportunități. L-am predat pe Olly absolut fără articole și veți putea continua să vă familiarizați cu depanatorul fără ajutorul nimănui. Dacă aveți întrebări, sugestii, blestem etc. trimite-le pe toate la [email protected].

P.S. Asigurați-vă că citiți articolul meu despre unboxing folosind Olly.

Buna ziua

Salutare tuturor celor de la cracklab, și în special lui MozgC și Bad_guy, ALEX, Kerghan, Mario555, Hex și tuturor celor care citesc acest articol.