Krisler12™ Posted July 8, 2010 Report Posted July 8, 2010 Salut ! Tocmai vroiam sa fac un tutorial misto despre tehnici de cracking numai ca am ajuns de rasul curcilor blocandu-ma la final de o functie aparent simpla dar pe care nu o pot intelege. Pe cel care ma poate ajuta il rog sa nu expuna tot algoritmul de generare a serialului ptr. ca asta o sa faca parte din tutorialul meu (ii voi da credite bineinteles si lui). Despre ce este vorba ?Dupa cum vedeti la adresa 00401112 se ia serialul adevarat de la adresa 40324C ,din pointer, si se baga in EAX.La adresa urmatoare din imagine, 00401118, se ia serialul din EAX si se baga inapoi in pointer, dar la adresa 40329C. Urmeaza functia GetDlgItemTextA care nu face altceva decat sa verifice daca am scris un serial in textboxul ptr. serial.=>Deoarece am scris ceva in textboxul respectiv, vaom sari peste MessageBoxA care ne-ar arata mesajul de eroare cum ca trebuie sa scriem un serial. Ajungem astfel la adresa 00401148 (din imagine ca la voi se poate sa fie alta) unde se va incarca serialul bagat de noi.La adresa urmatoare , 0040114D, se va apela functia StrToIntA. AICI ESTE SI PROBLEMA:Ce dracu face StrToIntA ??? Am cautat peste tot si nu am gasit nici o descriere a ei. Dupa nume pare sa converteasca un string intr-un intreg (de care tip, nu stiu ...).In fine, asta nu e mare chestie, dar de ce dracu dupa apelarea acestei functii EAX se face 0 ???Eu am incercat si am scris atat la nume cat si la serial atat cifre cat si litere dar nu am reusit sa-i dau de capat...In fine, problema si mai mare care rezulta de aici este urmatoarea:EAX , dupa cum am zis, se face 0. La linia urmatoare, 00401152 , se va lua serialul adevarat din 40329C , din pointer, si se va baga in ECX. Apoi, la linia urmatoare urmeaza cmp ecx, eax , adica va compara serialul adevarat cu eax care tocmai am zis ca ESTE 0. De fiecare data, orice serial ai baga, se pare (mai incercati si voi) EAX va fi 0. Imediat dupa cmp ecx, eax urmeaza un jnz care ne trimite la meajul de eroare cum ca serialul nu este valid. Unde dracu este greseala ? E clar ca imi scapa ceva mie , din moment ce autorul a zis ca nu ar fi modificat el in asembler linia cmp eax, eax in cmp ecx, eax. Dupa cum am mai zis: Pe cel care ma poate ajuta il rog sa nu expuna tot algoritmul de generare a serialului ptr. ca asta o sa faca parte din tutorialul meu (ii voi da credite bineinteles si lui).Multumesc mult !Scanare VT:http://www.virustotal.com/ro/analisis/406506c3294fdd21e3c27c89811f5b1cc4176729f5458e02a19336eefd046d29-1278566677Symantec 20101.1.0.89 2010.07.08 Suspicious.EmitNu stiu de ce ca doar nu este virus... In fine , nu eu l-am facut si nu garantez nimic insa daca sunteti superstitiosi nu aveti decat sa il rulati in VMWare , Sandbox si ce mai vreti voi. Eu l-am rulat direct si nu vad nici un algoritm in el care sa iti fure parolele sau ceva de genu'.Fisierul:Easy Keygenme1 Copy rarPS: Eu nu vreau keygen, vreau doar sa imi explicati , care va pricepeti, chestia aia. Atat.Multumesc ! Quote
loki Posted July 8, 2010 Report Posted July 8, 2010 StrToInta = considera ca e vorba de StrToInt (nume intern) asa cum vad ca ai si MessageBoxA.Uhh am cam uitat.... EAX mi se pare ca poate contine coduri de eroare iar daca e 0 inseamna ca s-a executat cu succes cred. Serialele trebuie sa fie numerice de se foloseste strtoint?Da nu inteleg, tu ai programul si vrei sa il repari dezasamblandu-l? Sau lucrezi la program in asamblare? Vrei sa afli ce face? Stii sigur ca e gresit ceva in el? Quote
SlicK Posted July 8, 2010 Report Posted July 8, 2010 Programul nu are nimic doar ca nu probabil nu ai inteles cum trebuie sa arate serialul, StrToIntA converteste un numar din string in integer de exemplu "123" in 123. Daca stringul nu contine un numar atunci returneaza 0 bineinteles.La 00401118 ai serialul valid in EAX, convertit in decimal e serialul de care ai tu nevoie.Daca ai nevoie iti explic si algoritmul de key generation(ai grija la rol si ror) Quote
Krisler12™ Posted July 8, 2010 Author Report Posted July 8, 2010 Programul nu are nimic doar ca nu probabil nu ai inteles cum trebuie sa arate serialul, StrToIntA converteste un numar din string in integer de exemplu "123" in 123. Daca stringul nu contine un numar atunci returneaza 0 bineinteles.La 00401118 ai serialul valid in EAX, convertit in decimal e serialul de care ai tu nevoie.Daca ai nevoie iti explic si algoritmul de key generation(ai grija la rol si ror) Eu am bagat la serial chiar si numere si tot de geaba. Fii putin mai explicit daca poti. (dar fara sa explici tu algoritmul ca ala vreau eu sa il bag intr-un tutorial).Explica numai ce anume trebuie sa bag ca serial ca de exemplu eu am bagat serialul stocat in 40329C inainte de a trece prin StrToIntA.Am converit acei hexbytes in integers si apoi i-am bagat ca serial si tot de geaba.Ce anume trebuie scris ?Multumesc ! Quote
SlicK Posted July 8, 2010 Report Posted July 8, 2010 Incearca cuname: SlicKserial: 2582183832Daca merge atunci asa trebuie sa arate serialul, daca nu atunci problema e din alta partePS: Serialul de la 0x0040329C trebuie reversuit pentru ca acolo e little-endian Quote
Krisler12™ Posted July 8, 2010 Author Report Posted July 8, 2010 Incearca cuname: SlicKserial: 2582183832Daca merge atunci asa trebuie sa arate serialul, daca nu atunci problema e din alta partePS: Serialul de la 0x0040329C trebuie reversuit pentru ca acolo e little-endianAsta era problema ! Dar si aia ca eu foloseam calculatorul setat pe dword ptr ca ma gandeam ca daca baga mov dword ptr... ziceam ca trebuie dword si nu qword.Multumesc mult ! Quote