00401221 | BB 69214000 | mov ebx,uno.402169 | ebx:"jyyj", 402169:"jyyj" sposto in ebx la pass che ho inserito
00401226 | 8BD0 | mov edx,eax |
00401228 | 33C9 | xor ecx,ecx |azzero ecx
0040122A | 8A81 65214000 | mov al,byte ptr ds:[ecx+402165] |sposto in al la prima lettera del nome nel mio caso "A" 41 in hex
00401230 | 04 12 | add al,12 |aggiungo 12 41+12=53
00401232 | 32C1 | xor al,cl |xor con cl che in questo momento vale 0 quindi non cambia nulla
00401234 | 04 15 | add al,15 |aggiungo 15 ad al 53+15=68
00401236 | 04 02 | add al,2 |aggiungo 2 ad al 68+2=6A
00401238 | BB 69214000 | mov ebx,uno.402169 | ebx:"jyyj", 402169:"jyyj" metto la pass in ebx
0040123D | 8A240B | mov ah,byte ptr ds:[ebx+ecx] |sposto in ah il primo carattere della pass nel mio caso "j" 6A in hex
00401240 | 3AC4 | cmp al,ah |vedo se sono uguali,nel mio caso si,infatti al=6A ah=6A
00401242 | 0F85 C9000000 | jne uno.401311 |se sono diversi mostro il messaggio di errore
00401248 | 41 | inc ecx |incrementa ecx che prima era 0
00401249 | 40 | inc eax |incrementa eax prima era 0
0040124A | 83F9 03 | cmp ecx,3 |ecx viene incrementanto fino a 3 quindi testa le prime 3 lettere
del nome,le mie sono state scelte dopo varie prove casuali,ho scelto caratteri che dopo queste operazioni mi facciano ottenere hex che possono essere convertiti in ascii se cosi non fosse io non saprei che scrivere nel riquadro pass,e da qui sorge il mio dubbio,perchè nonostante questi caratteri siano stati scelti apposta
non mi permettono comunque di completare l'intero programma,infatti nella generazione della 2 parte del seriale ottengo hex non convertibili
0040124D | 75 DB | jne uno.40122A |codice spazzattura
0040124F | 83F9 03 | cmp ecx,3 |
00401252 | 75 D6 | jne uno.40122A |
00401254 | 83F9 03 | cmp ecx,3 |
00401257 | 75 D1 | jne uno.40122A |
00401259 | 83F9 03 | cmp ecx,3 |
0040125C | 75 CC | jne uno.40122A |
0040125E | 83F9 03 | cmp ecx,3 |
00401261 | 75 C7 | jne uno.40122A |
00401263 | 83F9 03 | cmp ecx,3 |
00401266 | 75 C2 | jne uno.40122A |
00401268 | 83F9 03 | cmp ecx,3 |
0040126B | 75 BD | jne uno.40122A |
0040126D | 83F9 03 | cmp ecx,3 |
00401270 | 75 B8 | jne uno.40122A |
00401272 | 83F9 03 | cmp ecx,3 |
00401275 | 75 B3 | jne uno.40122A |
00401277 | 83F9 03 | cmp ecx,3 |
0040127A | 75 AE | jne uno.40122A |
0040127C | 83F9 03 | cmp ecx,3 |
0040127F | 75 A9 | jne uno.40122A |
00401281 | 83F9 03 | cmp ecx,3 |
00401284 | 75 A4 | jne uno.40122A |
00401286 | 83F9 03 | cmp ecx,3 |
00401289 | 75 9F | jne uno.40122A |
0040128B | 83F9 03 | cmp ecx,3 |
0040128E | 75 9A | jne uno.40122A |
00401290 | 83F9 03 | cmp ecx,3 |
00401293 | 75 95 | jne uno.40122A |
00401295 | 83F9 03 | cmp ecx,3 |
00401298 | 75 90 | jne uno.40122A |
0040129A | 83F9 03 | cmp ecx,3 |
0040129D | 75 8B | jne uno.40122A |
0040129F | 83F9 03 | cmp ecx,3 |
004012A2 | 75 86 | jne uno.40122A |
004012A4 | 83F9 03 | cmp ecx,3 |
004012A7 | 75 81 | jne uno.40122A |
004012A9 | 8A81 65214000 | mov al,byte ptr ds:[ecx+402165] |prendo il quarto carattere del nome nel mio caso 7 in hex 37 e lo metto in al
004012AF | 34 16 | xor al,16 |xor con 16 37^16=21
004012B1 | 04 45 | add al,45 |aggiungo 45 21+45=66
004012B3 | 02C1 | add al,cl |aggiungo cl che al momento vale 3(sarebbe il contatore di prima) 66+3=69
004012B5 | 32C1 | xor al,cl |xor con cl(sempre 3) 69^3=6A
004012B7 | 8A99 69214000 | mov bl,byte ptr ds:[ecx+402169] |sposto in bl il quarto carattere della pass nel mio caso "j" che è proprio 6A
004012BD | 3AC3 | cmp al,bl |vedo se sono uguali al e bl
004012BF | 75 50 | jne uno.401311 |se non sono uguali mostro il messaggio serial sbagliato
004012C1 | 41 | inc ecx |incremento ecx
Ora come dicevo prima la mia scelta non è stata casuale,però qua sorge un problema,anzi due,il programma prende solo i primi 4 caratteri del nome(anche per questo non ne ho inseriti di piu) i successivi controlli li fa sulla pass che deve essere di 7 caratteri anche se il contatore si incrementa fino ad 8(credo sia uno scherzone di chi ha fatto il programma,quindi in realtà anche scrivendo il keygen non penso che il programma possa essere lasciato intatto al 100%,ma lasciamo perdere il mio problema sorge molto prima adesso ve lo vado ad illustare).
Eravamo rimasti all'incremento di ecx,come ho detto prima dal nome vengono presi solo 4 caratteri,ora i prossimi confronti prendono i caratteri dalla campo password infatti adesso vediamo che sposta in al la "j" in hex 6A,xor con 16 6A^16=7C
poi aggiunge 45 7C+45=C1,aggiunge cl che vale 4 C1+4=C5,xor di nuovo con cl C5^4=C1,ora sposta in bl il quinto carattere delle pass,se ricordate io ne ho inseriti solo 4 qundi ovviamente non trova niente e ci sposta 0.
Facciamo però finta che io lo voglio calcolare,so che deve essere uguale a C1,ora C1 corrisponde ad Á,già inserendo questo valore(copiandolo e incollandolo),il programma già non va perchè questa Á me la conta come C3, ma lasciando stare questo il problema ho cambiato il valore dello stack manualmente e ho fatto finta fossero uguali,e procediamo al prossimo carattere;prendo la "y"(secondo char della pass) in hex vale 79.
Ripetiamo il ciclo xor con 16 79^16=6F,aggiungo 45 6F+45=B4,aggiungo cl che vale 5 B4+5=B9,xor con cl B9^5=BC.
Ed eccoci al mio fatidico problema,ora come sappiamo abbiamo un cmp al,bl se sono uguali il ciclo continua,bl deve essere un carattere della password,ma per far si che sia uguale ad "al" deve bl essere BC che in ascii non corrisponde a niente.
Ora questo problema si è presentato solo ora,ma stamattina avevo provato a mettere come mio username "sasi" e non riuscivo a superare nemmeno il primo ciclo,perchè quando andavo a calcolare la pass,mi uscivano solamente valori hex che non potevano essere tradotti in ascii,valori insomma che io non potevo inserire da tastiera.
004012C2 | 83F9 08 | cmp ecx,8 |codice spazzattura
004012C5 | 75 E2 | jne uno.4012A9 |
004012C7 | 83F9 08 | cmp ecx,8 |
004012CA | 75 DD | jne uno.4012A9 |
004012CC | 83F9 08 | cmp ecx,8 |
004012CF | 75 D8 | jne uno.4012A9 |
004012D1 | 83F9 08 | cmp ecx,8 |
004012D4 | 75 D3 | jne uno.4012A9 |
004012D6 | 83F9 08 | cmp ecx,8 |
004012D9 | 75 CE | jne uno.4012A9 |
004012DB | 83F9 08 | cmp ecx,8 |
004012DE | 75 C9 | jne uno.4012A9 |
004012E0 | 83F9 08 | cmp ecx,8 |
004012E3 | 75 C4 | jne uno.4012A9 |
004012E5 | 83F9 08 | cmp ecx,8 |
004012E8 | 75 BF | jne uno.4012A9 |
004012EA | 83F9 08 | cmp ecx,8 |
004012ED | 75 BA | jne uno.4012A9 |
004012EF | 83F9 08 | cmp ecx,8 |
004012F2 | 75 B5 | jne uno.4012A9 |
004012F4 | 83F9 08 | cmp ecx,8 |
004012F7 | 75 B0 | jne uno.4012A9 |
004012F9 | 83F9 08 | cmp ecx,8 |
004012FC | 75 AB | jne uno.4012A9 |
004012FE | 83F9 08 | cmp ecx,8 |
00401301 | 75 A6 | jne uno.4012A9 |
00401303 | 83F9 08 | cmp ecx,8 |
00401306 | 75 A1 | jne uno.4012A9 |
00401308 | E8 44000000 | call <uno.sub_401351> |
0040130D | 3C 01 | cmp al,1 |
0040130F | 74 27 | je uno.401338 |
00401311 | B8 65214000 | mov eax,uno.402165 | 402165:"AQN7jyyj"
00401316 | 83C0 2D | add eax,2D |
00401319 | 83F0 0F | xor eax,F |
0040131C | 8BD8 | mov ebx,eax | ebx:"jyyj"
0040131E | 33C0 | xor eax,eax |
00401320 | 6A 10 | push 10 | UINT uType = MB_OK | MB_ICONSTOP
00401322 | 68 8C204000 | push uno.40208C | LPCTSTR lpCaption = "Erroreeeeeeee!!!!"
00401327 | 68 00204000 | push uno.402000 | LPCTSTR lpText = "Serial errato, ritenta!!!"
0040132C | 6A 00 | push 0 | HWND hWnd = NULL
0040132E | E8 C3000000 | call <JMP.&MessageBoxA> | MessageBoxA
00401333 | E9 24FEFFFF | jmp <uno.sub_40115C> |
00401338 | 6A 20 | push 20 | UINT uType = MB_OK | MB_ICONQUESTION
0040133A | 68 E1204000 | push uno.4020E1 | LPCTSTR lpCaption = "Crackato!!!"
0040133F | 68 66204000 | push uno.402066 | LPCTSTR lpText = "Serial esatto....Bravo!!!"
00401344 | 6A 00 | push 0 | HWND hWnd = NULL
00401346 | E8 AB000000 | call <JMP.&MessageBoxA> | MessageBoxA
0040134B | E9 0CFEFFFF | jmp <uno.sub_40115C> |
00401350 | C3 | ret |
00401351 | BB 69214000 | mov ebx,uno.402169 | ebx:"jyyj", 402169:"jyyj"
00401356 | 8BD0 | mov edx,eax |
00401358 | 33C9 | xor ecx,ecx |
0040135A | 8A81 65214000 | mov al,byte ptr ds:[ecx+402165] |
00401360 | 04 12 | add al,12 |
00401362 | 32C1 | xor al,cl |
00401364 | 04 15 | add al,15 |
00401366 | 04 02 | add al,2 |
00401368 | 8AA1 69214000 | mov ah,byte ptr ds:[ecx+402169] |
0040136E | 3AC4 | cmp al,ah |
00401370 | 75 9F | jne uno.401311 |
00401372 | 41 | inc ecx |
00401373 | 40 | inc eax |
00401374 | 83F9 03 | cmp ecx,3 |
00401377 | 75 E1 | jne uno.40135A |
00401379 | 8A81 65214000 | mov al,byte ptr ds:[ecx+402165] |
0040137F | 34 16 | xor al,16 |
00401381 | 04 44 | add al,44 |
00401383 | 02C1 | add al,cl |
00401385 | 32C1 | xor al,cl |
00401387 | 8AA1 69214000 | mov ah,byte ptr ds:[ecx+402169] |
0040138D | 3AC4 | cmp al,ah |
0040138F | 75 0A | jne uno.40139B |
00401391 | 41 | inc ecx |
00401392 | 83F9 08 | cmp ecx,8 |
00401395 | 75 E2 | jne uno.401379 |
00401397 | B0 01 | mov al,1 |
00401399 | EB 04 | jmp uno.40139F |
0040139B | B0 00 | mov al,0 |
0040139D | EB 00 | jmp uno.40139F |
0040139F | 33DB | xor ebx,ebx | ebx:"jyyj"
004013A1 | C3 | ret |