Jump to content
Krisler12™

StrToIntA => EAX=0. De ce ? cmp ecx,eax ?! De ce ?

Recommended Posts

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.

o7mwrs.png

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-1278566677

Symantec 20101.1.0.89 2010.07.08 Suspicious.Emit

Nu 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 rar

PS: Eu nu vreau keygen, vreau doar sa imi explicati , care va pricepeti, chestia aia. Atat.

Multumesc !

Link to comment
Share on other sites

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?

Link to comment
Share on other sites

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) ;)

Link to comment
Share on other sites

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 !

Link to comment
Share on other sites

Incearca cu

name: SlicK

serial: 2582183832

Daca merge atunci asa trebuie sa arate serialul, daca nu atunci problema e din alta parte

PS: Serialul de la 0x0040329C trebuie reversuit pentru ca acolo e little-endian

Asta era problema :D ! 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 !

Link to comment
Share on other sites

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...