Write-up pe tutorialele de reverse engineering ale lui Lena151 [1-5]

  • 4 minute de citit

Disponibil și în English

Pe această pagină

Am hotărât că vreau să fac ceva nou și am început să mă ocup de assembly și reverse engineering, sper să pot construi o carieră pe asta.

Am urmărit câteva videoclipuri de pe Pluralsight despre RE, care mi-au oferit o introducere frumoasă în subiect, dar, din păcate, nimic practic, iar conținutul nu era foarte detaliat.

Am încercat să citesc o carte despre RE, Practical Reverse Engineering, dar nu m-a ajutat: nu înțelegeam foarte bine assembly-ul și am ajuns să o abandonez… până la începutul lunii acesteia, când mi-am luat inima în dinți și am început cursul Intro to x86 de la Open Security Training, un curs destul de bun, pentru că m-a ajutat să înțeleg assembly-ul la un nivel de bază, lucru care mi-a dat curajul să merg mai departe cu RE. Am făcut provocarea binary bomb din curs, dar nu mi-a adus deloc satisfacție: nu am reușit să rulez binarul în debugger și a trebuit să folosesc dezasamblorul IDA ca să o rezolv, apoi să verific cu Google dacă soluțiile mele erau corecte. Totul a fost în regulă până la faza 6, unde am renunțat, pentru că assembly-ul era greu de înțeles. 😞

Totuși, am mers mai departe și m-am abonat la tutorialele lui Lena151, ce perle au fost! O colecție de videoclipuri SWF din 2006, adică au 12 ani! Nu știu cum se predă RE modern, dar tutorialele lui Lena151 te învață mai degrabă pe calea unui cracker, adică a celui care sparge software-ul.

Oricum, am scris mai jos experiența mea cu provocările; fiecare dintre ele vrea să te învețe ceva nou.

1. Olly + assembler + patching a basic reverseme
În acest scenariu, primești un executabil care afișează mesajul „License expired, please purchase”. Trebuie să găsești o cale de a ocoli acest lucru.

Provocarea este ușoară, are un videoclip SWF introductiv bun care te ghidează prin rezolvare și un document care explică limbajul assembly, pe scurt.

Ce vei învăța după ce termini această provocare este cum să folosești debuggerul Olly și cum să aplici patch-uri pe binar. Prin patch-uirea binarului vei ocoli verificarea licenței și vei sări direct la „goodboy”. Este cu siguranță un bun început în RE, pentru că primești explicații despre unele funcții ale debuggerului chiar de la început. Eu am folosit x64dbg pentru această provocare.

2. Keyfiling the reverseme + assembler

Aceasta este la fel ca prima, doar că aici vei învăța cum să ocolești cerințele de licență citind assembly-ul și înțelegându-l, ca să poți crea o licență personalizată. Dacă studiezi cu atenție ASM-ul, vei vedea că și această provocare este ușoară.

3. Basic nag removal + header problems

Această provocare este mai interesantă decât cele anterioare. Vei învăța despre header-ul PE al binarelor.

Secțiunile din header-ul PE sunt cele care sunt cu adevărat necesare pentru a executa un program. Restul din header există doar ca să ajute loader-ul win32 să-l găsească. Numele secțiunilor pot fi oricare. Punctul de intrare al programului se află în ultimii 4 bytes ai header-ului PE, iar punctul de intrare este stocat în mod little endian.

După ce am lucrat la executabil cu x64dbg, am descoperit că nu pot modifica ușor EntryPoint-ul… Am încercat totuși să-l modific cu editorul hexazecimal din CFF Explorer și a reușit, dar o soluție mai bună este să folosești PE Editor, pentru că tot ce trebuie să faci este să editezi un câmp de text.

4. Basic + aesthetic patching

Aici lucrurile devin interesante, pentru că reverse-ezi o aplicație reală. În acest tutorial vei învăța despre structured exception handlers și despre cum Olly nu le poate gestiona corect. Nu doar atât, ci pe măsură ce avansezi prin videoclip vei învăța cum să aplici patch-uri aplicației în timpul rulării, ca să elimini mai multe restricții de probă. Pentru un începător ca mine, a fost foarte impresionant de urmărit!

Am avut câteva erori la instalarea programului furnizat, dar programul a funcționat.

Un software extrem de frumos arătat! (dezvoltat în anii 2000.) Software-ul este limitat, pentru că îți permite să introduci doar 4 contacte.

Uneori programele pot ridica excepții și poate vrei ca debuggerul să le ignore. Funcția allow a range of exceptions din x64dbg se află în Settings > Preferences, ceea ce mi s-a părut puțin ciudat. Părerea mea: ar fi trebuit să fie în setările debuggerului.

În acest moment, am oprit videoclipul chiar înainte de adăugarea intrării RE și am început să lucrez singur la asta. Mi-a luat ceva timp până am înțeles cum să lucrez cu x64dbg, dar în cele din urmă am reușit! Trucul a fost să folosesc pasul „Run till return” pentru a trece peste apel până la funcția apelantă, să setez un breakpoint și să dau „Run”. În acest fel, când era apăsat butonul Add entry, breakpoint-ul era atins și puteai vedea exact ce cod declanșa mesajul care cerea înregistrarea.

Distractiv, distractiv, distractiv. Reiau acum videoclipul..

O regulă generală: folosește stringurile doar pentru confirmare, nu pentru a găsi lucruri. Următorul pas era să înlocuiesc stringurile neînregistrate; am avut ceva probleme cu asta în x64dbg și am renunțat.

5. Comparing on changes in cond jumps, animate over/in, breakpoints

În această provocare vei reverse-ezi o altă aplicație reală și vei învăța despre breakpoint-uri software, hardware și de memorie. Vei învăța, de asemenea, despre call stack și cum să folosești funcțiile animate over/trace ale debuggerului.

Această provocare a fost distractivă de făcut; m-a ajutat să mă familiarizez cu debuggerul (de exemplu, call stack-ul nu se reîmprospătează la pauză, trebuie să dai clic pe EIP sau ceva asemănător ca să se reîmprospăteze) și m-a ajutat să înțeleg că în cazul acesta nu am ce căuta în dll-uri. Când văd o funcție apelată în dll, pur și simplu trec peste ea.

Mulțumesc că ai citit! Îmi voi continua călătoria în reverse engineering cu tutorialele lui Lena și după aceea nu sunt sigur ce voi face. Plănuiesc să cumpăr câteva cărți pe subiect, sper că mă vor ajuta.

Resources: