Eliminați parola din testele mytestx și easyquizzy

Eliminăm parola din testele MyTestX și easyQuizzy

Mai întâi, să examinăm cea mai trivială problemă: cum să extrageți un fișier de test din fișierul .exe cu testul .mtf (este MyTestX).
Luăm un fișier .exe care conține un test (am folosit o instanță din forum) și îl deschid în CFF Explorer. du-te imediat la secțiunea „Director de resurse“, în coloana din stânga, apoi, în lista din dreapta, în căutarea unui „Resource Directory Entry AKA :. RCData“, deschide lista drop-down și acolo în căutarea „Resource Directory Entry AKA :. MTA“.

Eliminați parola din testele mytestx și easyquizzy

Această resursă este de fapt un fișier .mtf de care suntem interesați. Acum trebuie să-l extragem. Pentru a face acest lucru, ne îndreptăm spre elementul copil al ultimei resurse menționate - "Intrare de date de resurse". Selectați-l și vedeți atributele sale în jumătatea inferioară a ferestrei, suntem interesați de câmpurile "OffsetToData" și "Size".

Rețineți valoarea câmpului "OffsetToData" și treceți la "Address Converter" din lista din stânga. Acum introduceți valoarea în câmpul RVA - avem o deplasare fizică a resursei care ne interesează despre începutul fișierului ("File Offset").

Eliminați parola din testele mytestx și easyquizzy

Eliminați parola din testele mytestx și easyquizzy

Eliminați parola din testele mytestx și easyquizzy

Apăsați Debug-> Run și reluați aplicația. Apoi, apăsați tasta din dreapta undeva în fereastra din stânga sus a programului de depanare. În meniul care apare, selectați Go to-> Expression (Explorare), în fereastra care apare, tastați ReadFile (numele funcției WinAPI, care este cel mai probabil să fie folosit pentru a citi conținutul fișierului de testare).

Eliminați parola din testele mytestx și easyquizzy

În lista din partea de jos, selectați kernel32.ReadFile și faceți clic pe "Urmați expresia". Suntem la începutul funcției ReadFile, acum trebuie să punem un breakpoint pentru a urmări apelul programului la această funcție. Am pus un breakpoint, pentru aceasta apăsați butonul din dreapta pe linia evidențiată a codului de asamblare și selectați Breakpoint-> Toggle. În general, înainte de a pune breakpoint, cel mai bun întâi în MyTestEditor cauza deschiderea dialogului de test, altfel veți pierde o mulțime de apeluri (F9) la ReadFile de nici un interes pentru noi, locuri, ele pot fi determinate de valoarea de pe partea de sus a cadrului de stivă (fereastra debugger dreapta jos, șir de caractere text "Întoarcere de la kernel32.ReadFile la."). Apelul care ne interesează va arăta astfel:

Eliminați parola din testele mytestx și easyquizzy

Odată ce am prins un tratament corect (se întâmplă atunci când suntem într-un test de deschidere a dialogului vom alege nostru de testare, protejat prin parolă și faceți clic pe „Open“), uita-te atent la fereastra debugger dreapta jos (în care vom vedea o urmă stivă), derulați în jos la căutarea unui șir, care este calea completă la fișierul cu testul (suntem interesați de acest cadru de stivă, deoarece cel mai probabil a fost format în funcția de interes).

Eliminați parola din testele mytestx și easyquizzy

Eliminați parola din testele mytestx și easyquizzy

Continuați executarea programului (F9 sau Debug-> Run). După un timp, programul se va opri încă o dată, punctul de pornire al hardware-ului proaspăt instalat va funcționa. La mine locul de operație părea cumva:

Eliminați parola din testele mytestx și easyquizzy

Amintind de unele funcții intermediare pentru a lucra cu fișierul, deci vom folosi de mai multe ori opțiunea Debug-> Executare până la retur (Ctrl + F9), dar ne aflăm într-un cod de „nivel înalt“, site-ul în cazul în care eșecul principal de logica de procesare a fișierelor la test.

Eliminați parola din testele mytestx și easyquizzy

Privim prin cod. Suntem interesați de toate tranzițiile condiționale posibile (je, jne, jz, jnz și așa mai departe), care sare peste fragmente mai mult sau mai puțin impresionante de cod, de la 5 instrucțiuni. Am pierdut imediat câteva site-uri, unde mi se părea că s-au făcut acțiuni neinteresante, ca de exemplu în acest fragment:

Eliminați parola din testele mytestx și easyquizzy

Reamintește verificarea versiunii testului. M-am gândit astfel încât o dată, dar poate fi văzut și experimentat prin punerea la punct de întrerupere instrucțiuni de ramură condiționată și modificarea valorii Z-pavilion în fereastra registru la dreapta, când execuția programului este întreruptă la acest site. Derulați puțin în jos și faceți poticnire asupra următorului grup de tranziții condiționate:

Eliminați parola din testele mytestx și easyquizzy

Să încercăm să schimbăm steagul Z pentru fiecare tranziție pe frunte. Adică MyTestStudent vom deschide un dialog de selecție fișier cu testul, am pus breakpoint pe una dintre tranzițiile, în dialogul pentru a alege un fișier de test care este parola caseta de martor protejat fapt care ia determinat introducerea parolei, introduceți la orice text, atunci ar trebui să funcționeze setat anterior punct de întrerupere, schimbați steagul Z și continuați executarea programului apăsând F9.
Vom vedea că, în cele de mai sus două pasaje, schimbarea programului Z-pavilion opreúte, apoi este lansat browser-ul, care a deschis un site cu un fragment de legislație: unele self-made „de protecție“ de la un jaf simplu. Cu toate acestea, atunci când modificați o logică ramură condițională, care este situat chiar mai jos, putem vedea că programul oferă de pre-test, dar după aceea, programul este încă finalizarea lucrărilor sale și se deschide un browser.

Eliminați parola din testele mytestx și easyquizzy

Pentru a deschide browserul, funcția WinAPI ShellExecute este cel mai probabil utilizată. Verificăm ipoteza noastră: din nou, faceți clic dreapta oriunde în fereastra de sus debugger stânga, meniul pop-up, selectați Du-te la-> Expression, în fereastra care apare, introduceți numele funcției noastre, du-te la începutul funcției și a pus-o breakpoint. Din nou, vom efectua modificarea logicii ultimului salt condițional de care suntem interesați și punctul nostru de întâlnire funcționează:

Eliminați parola din testele mytestx și easyquizzy

Noi folosim de mai multe ori Debug-> Executare până la retur (sau Ctrl + F9), pentru a reveni din adâncuri și în unitatea Shell32.dll MyTestEditor (urmați titlul ferestrei debugger, în cazul în care în acest moment este scris „[CPU - fir principal, shell32 modulul ] "). Aproape imediat ajungem într-un loc similar:

Eliminați parola din testele mytestx și easyquizzy

Aici vedem o altă tranziție condiționată, pe care trebuie să o rezolvăm (în zbor sau înlocuind saltul condițional cu jmp-ul necondiționat). Se pare că trebuie să optimizăm două tranziții condiționate pentru a putea deschide un test sigur introducând orice parolă. Vom înlocui și verifica:

Comutați la principalele executabil easyQuizzy modul depanator (View-> module executabilul, faceți dublu clic pe numele modulului, asigurați-vă că textul este prezent în titlul ferestrei: „Modul easyQuizzy“). Facem clic-dreapta în fereastra de depanare și găsim toate resursele de șir care sunt menționate în codul executabil.

Eliminați parola din testele mytestx și easyquizzy

Înainte de a obține o listă de rânduri într-o singură masă mare, vom găsi în ea linii cu un mesaj despre o parolă incorectă și vom pune puncte de întrerupere pe ele.

Eliminați parola din testele mytestx și easyquizzy

Încercăm să deschidem testul protejat și să prindem imediat punctul de întrerupere.

Eliminați parola din testele mytestx și easyquizzy

Am fost în interiorul funcției de divertisment, unde putem observa o trecere destul de mare fragment dintr-un cod de salt condiționat, în ratărilor de adiție, conține o trimitere la șirul „parola incorectă.“.

Eliminați parola din testele mytestx și easyquizzy

Dar cum intrăm deloc în fragmentul de cod? Derulați listarea puțin și vedeți un salt condițional mult mai interesant: vă permite să săriți chiar și un apel de funcție care ne afișează dialogul de introducere a parolei.

Eliminați parola din testele mytestx și easyquizzy

Încercăm să schimbăm logica funcționării sale (de exemplu, blocăm transferul condițional NOP'ami) - voila, testul protejat este deschis fără a cere o parolă.

Vă recomand, de asemenea, să citiți