.:HoMe:.     .:CrackMe:.     .:My ProGGie:.     .:BuGs & ExpLoiTs:.     .:TOoLs:.     .:VaRiE:.

> CraCk Me n.2:SoLuTiOn <
Realizzato da NoRpiUs

ToOLz uTiLiZzATi:
- Debugger ( Olly Dbg )
- No Hex Editor + Disassembler (Vero?? :) )

SpiEgaZiOnE:
Eccoci di nuovo qua... il nostro crack me e' sempre piuttosto semplice pero' un pochino piu difficile dell'altra volta :)

Apriamo il nostro bel debugger, un bpx su GetDlgItemTextA e via:

LEA                ESI,DWORD PTR DS:[4030F8]  ; carica in esi il nome
MOV              AL,BYTE PTR DS:[ESI]              ; carica in al la prima lettera del nome
TEST              AL,AL                                          ; controlla se il nome e' finito
JE                   EsciCiclo                                       ; se sì, esce dal ciclo
ADD              ECX,EAX                                     ; somma eax a ecx
SUB               ECX,30                                        ; sottrae 30h (48 decimale) a ecx
XOR              ECX,11D7                                    ; xora ecx con 11D7 (4567 decimale)
ADD              ECX,20                                         ; adda a ecx 20h (32 decimale)
INC               ESI                                                ; passa alla lettera successiva del nome
JMP               InizioCiclo                                      ; e torna all' inizio del ciclo

Ok, poco cambia dal primo crack me, quindi proviamo a scriverci il nostro keygen fino a questo punto e dovrebbe venire una cosa del genere:

main() {
  char *nome;
  int lun, i, serial = 0;

  printf("Scrivi il nome: ");
  scanf("%s",nome);

  lun = strlen(nome);
  for ( i = 0; i < lun; i++) 
  { 
      serial += nome[i];
      serial -= 48;
      serial ^= 4567;
      serial += 32; 
  }

}


Bon, andiamo avanti con debugging :)

CALL         CrackMe2.004012A1            ; richiama qualcosa di oscuro e misterioso
CMP           EAX,EBX                              ; confronta eax con ebx (ovvero il seriale inserito)
JE               SerialeGiusto                           ; se sono uguali vai a "Seriale giusto!" 
JMP            SerialeSbagliato                       ; se no vai a "Seriale Sbagliato!"

Tutto come prima, posizioniamoci sulla calle premiamo F7 per andare a vedere cosa esegue il programma e arriviamo qua:

MOV EAX,ECX                           ; mette il seriale che si era calcolato prima in eax
ADD EAX,1B                               ; somma a eax 1B ( 27 decimale )
CALL Call2                                  ; chiama la Call2
RETN                                           ; esce dalla Call1 ( ma prima fa la Call2! :P )

Call2:
MOV ECX,4E                              ; mette in ecx 4E ( 78 decimale )
MUL ECX                                    ; moltiplica eax per 78
XOR EAX,4D2                            ; xora eax con 4D2 ( ovvero 1234) 
SUB EAX,17                               ; sottrae a eax 17 ( 23 decimale)
RETN                                           ; esce dalla Call2

Qua notiamo che il programma esegue 2 call in cui vi sono i soliti calcoletti del kazzo quindi continuiamo pure il nostro keygen per la sua versione finale che sara' così:

#include <stdio.h>
#include <string.h>

main() {
  char *nome;
  int lun, i, serial = 0;

  printf("Scrivi il nome: ");
  scanf("%s",nome);

  lun = strlen(nome);
  for ( i = 0; i < lun; i++) 
  { 
      serial += nome[i];
      serial -= 48;
      serial ^= 4567;
      serial += 32; 
  }

  serial += 27;
  serial *= 78;
  serial ^= 1234;
  serial -= 23;

  printf("Il seriale e': %d",serial);
}

Prima di salutarvi volevo allegarvi lo splendido keygen che mi ha fatto il grande kOrn[CsA] che trovate qua e la sua solizione che trovate qui. Anche per oggi e' tutto, cya.


Sito ottimizzato per:
Browser: I.E.
Risoluzione: 1024 x 768
.:ReVeRsiNg:.     .:CoNTaCt Me:.     .:LiNks:.     .:ThaNksTo:.     .:FuCkTo:.