Jump to content
cifratorul

zuper mario - solved

Recommended Posts

Posted

In cele ce urmeaza vom rezolva testul propus aici:

http://rstcenter.com/forum/31088-keygen-me-foarte-usor-si-dragut.rst

Avem nevoie de 2 fisiere : Ollydbg.exe si executabilul ce poate fi gasit aici :

zuper mario.rar

Dupa ce incarcam executabilul in Olly vedem ca fereastra principala e creata cu DialogBoxParam iar pentru miscarea lui Mario se foloseste GetAsyncKeyState. Pe noi ne intereseaza cazul cand apasam sageata sus pentru a intra pe usa:

screen1nh.jpg

Dupa cum se vede noul dialog box care ne cere numele si parola are procedura de fereastra la adresa 401c86. Mergem la aceasta adresa si daca ne uitam un pic gasim o portiune interesanta:

screen2kr.jpg

Banuiala ca numele e citit cu GetDlgItemText iar parola cu GetDlgItemInt se confirma rapid daca punem un breakpoint si vedem ca numele e la adresa 406162 folosita de GetDlgItemText iar codul e in EAX dupa apelul GetDlgItemInt.

Dupa se citeste parola care este un numar , se face XOR cu 0x0BABE si se aduna 1 dupa care se compara cu o valoare salvata pe stiva:

00401D57 XOR EAX,0BABE

00401D5C INC EAX

00401D5D CMP EAX,DWORD PTR SS:[EBP-4]

La aceasta locatie gasim de fapt o valoare ce depinde de numele introdus. Sa luam fiecare instructiune in parte:

screen3w.jpg

Cum suma de pe stiva depinde de valoarea sa initiala la care se aduna numarul de caractere din nume, fiecare caracter in parte si diferenta dintre primul si ultimul caracter, vom crea un keygen din acest executabil ca sa scapam de aceasta problema.

Vom scrie noi parola corecta in functie de nume in campul unde ar fi trebuit introdusa. Adica in loc sa citim cu GetDlgItemInt vom scrie cu SetDlgItemInt. Si pentru a nu hardcoda adresa functiei SetDlgItemInt care e in user32.dll vom modifica exe-ul sa importe SetDlgItemInt in loc de GetDlgItemInt.

Acest lucru se poate face cu LordPE (sau CFF explorer) : PE Editor-> Directories->Import Table->user32.dll->GetDlgItemInt modificat in SetDlgItemInt.

Practic ce avem de facut este sa lasam codul initial sa calculeze suma pe stiva, o luam scadem 1 facem XOR cu 0xBABE (pentru ca XOR aplicat de 2 ori nu modifica valoarea initiala) si il afisam. Codul modificat e selectat in poza urmatoare:

screen4v.jpg

De asemenea vrem ca dialogboxul sa nu se inchida asa ca stergem (suprascriem cu NOP) portiunea care trimite cu SendMessage mesajul VM_CLOSE, iar imediat dupa aceea mai avem de trecut de un hop.

Modificam urmatorul CMP sa compare cu valoarea 90 (NOP-ul scris de noi) ce e la adresa 401d60 . Codul modificat:

screen5r.jpg

Acum executabilul nostru va genera parola in functie de nume.

Sper ca nu am uitat nimic.

Multumesc pentru atentie, la revedere!

  • Upvote 2
Posted

foarte frumos domnilor, pregatiti-va pt partea a doua (cu un grad de dificultate asemanator dar mult mai interesanta ;) ) - sper ca timpul sa fie de partea mea

Join the conversation

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

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

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

×   Your previous content has been restored.   Clear editor

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



×
×
  • Create New...