cifratorul Posted May 8, 2011 Report Posted May 8, 2011 In cele ce urmeaza vom rezolva testul propus aici:http://rstcenter.com/forum/31088-keygen-me-foarte-usor-si-dragut.rstAvem nevoie de 2 fisiere : Ollydbg.exe si executabilul ce poate fi gasit aici :zuper mario.rarDupa 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: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: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,0BABE00401D5C INC EAX00401D5D 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: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: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:Acum executabilul nostru va genera parola in functie de nume.Sper ca nu am uitat nimic. Multumesc pentru atentie, la revedere! 2 Quote
Flubber Posted May 8, 2011 Report Posted May 8, 2011 Multumesc, frumos tutorialul!Versiunea PDF (cu anumite schimbari, daca mi se permite; daca nu, spune cifratorul si voi sterge); download links:1] MassMirror.com - zm_cifratorul.tar.gz2] http://www.sendspace.com/file/ggwldzMirror: iwjfiojqej.sx33.net/zm_cifratorul.tar.gzThx 2 cifratorul.Daca sunt greseli nu va sfiiti sa spuneti. Quote
sulea Posted May 8, 2011 Report Posted May 8, 2011 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 Quote