Vai al contenuto

[CrackME] Keygenme [t4y][Solved by GunyaGunya]


Messaggi raccomandati

Crack pronta in 1 minuto :D

http://www.mediafire.com/?t79jegm61jrnbes

 

ora vediamo che combino col keygen sigh

 

EDIT: bene bene, tutto inizia a 7E3BA149 dove pusha EPB dico bene?

poi fino a 7E3BA2B4 fa una lunga serie di calcoli e a 7E3BA2B7 chiama 7E3BA2DF

quindi ho individuato il calcolo ma il problema e che non so leggerlo, se conoscessi asm sarebbe un libro aperto

Modificato da Melo_Wii
Link al commento
Condividi su altri siti

stavolta il source non te lo passo XD, l' unico problema che ho avuto è stato "portare in C" le funzioni ROL , ROR

 

EDIT : 7E3BA149 ?? sei fuori strada il programma finisce a 00401212A come fai ad aver trovare quell 'address lì ?

Modificato da BeTmAsTeR
Link al commento
Condividi su altri siti

Allora ho messo un BP su 7E3D07EA ora dovrei steppare fino a 7E3D0830 (RETRN10) che rimanda a 00401186 che dopo un po di step porta a 7E398734 dove credo che inizia il programma vero e proprio (invatti se metto PB non parte), questultimo porta a 7E398816 poi a 7E3A8EA0 dove inizia il calcolo sbaglio?

EDIT: by me sbaglio!

OT sto cercando di mettere in prtaica quello che dice un sito attendibile (http://quequero.org/Lezione_7_Keygening (spam?)), quindi se trovo dove genera la key fare un keygenninko in ASM è un gioco?

Modificato da Melo_Wii
Link al commento
Condividi su altri siti

Eh e la è il problema non capisco come trovare il punto dove mettere il BP

Forse ci sono

 

 

004010FB |> /8A06 /MOV AL,BYTE PTR [ESI]

004010FD |. |0FAFC2 |IMUL EAX,EDX

00401100 |. |03C2 |ADD EAX,EDX

00401102 |. |C1C0 04 |ROL EAX,4

00401105 |. |83F0 14 |XOR EAX,14

00401108 |. |C1C8 04 |ROR EAX,4

0040110B |. |8807 |MOV BYTE PTR [EDI],AL

0040110D |. |46 |INC ESI

0040110E |. |47 |INC EDI

0040110F |. |49 |DEC ECX

00401110 |.^\75 E9 \JNZ SHORT Easy_Key.004010FB

 

sopra cè un 004010E5 |. BE FC314000 MOV ESI,Easy_Key.004031FC ; ASCII "7%.434/2-"

 

e anche un ascii del mio nome

 

Sii è questa sicuro, cè pure il rol di cui parlavi

Modificato da Melo_Wii
Link al commento
Condividi su altri siti

Bene, bene ora persiste un problemino

MOOV credo che vuol dire sposta?

IMUL non lo so!

ADD credo aggiungi?

ROL non ho idea!

ROR non ho idea!

INC rorse incrementa?

DEC decimale?

XOR non ho idea!

JNZ chiama un altra istruzione?

 

Mi serve un buon manuale di asm se voglio capire cosa faccio, cosa mi consigli?

Link al commento
Condividi su altri siti

Ho commentato un poco, vedi se va bene

 

l' unico problema e che ancora non capisco dove sta il nome, in ESI?

 

004010D6 |> /8A06 /MOV AL,BYTE PTR [ESI] ; Mette i dati di AL in ESI

004010D8 |. |33C2 |XOR EAX,EDX ; calcola il vettore XOR di EAX e EDX

004010DA |. |8807 |MOV BYTE PTR [EDI],AL ; Muove PTR in EDI e AL

004010DC |. |46 |INC ESI ; ESI = ESI + 1

004010DD |. |47 |INC EDI ; EDI = EDI - 1

004010DE |. |49 |DEC ECX ; ECX = ECX - 1

004010DF |.^\75 F5 \JNZ SHORT Easy_Key.004010D6 ; Jump not zero

004010E1 |. 33D2 XOR EDX,EDX ; Azzera EDX

004010E3 |. 33C0 XOR EAX,EAX ; Azzera EAX

004010E5 |. BE FC314000 MOV ESI,Easy_Key.004031FC ; ?

004010EA |. BF 4C324000 MOV EDI,Easy_Key.0040324C ; ?

004010EF |. 8B0D 8C314000 MOV ECX,DWORD PTR [40318C] ; ?

004010F5 |. 8A15 AC314000 MOV DL,BYTE PTR [4031AC] ; Muove DL su 4031AC

004010FB |> 8A06 /MOV AL,BYTE PTR [ESI] ; Muove AL su ESI

004010FD |. 0FAFC2 |IMUL EAX,EDX ; Moltiplica AEX * EDX

00401100 |. 03C2 |ADD EAX,EDX ; Somma EAX e EDX

00401102 |. C1C0 04 |ROL EAX,4 ; Ruota le prime 4 cifre da

00401105 |. 83F0 14 |XOR EAX,14 ; Calcola EAX (XOR) 14

00401108 |. C1C8 04 |ROR EAX,4 ; ruota le prime 4 cifre da

0040110B |. 8807 |MOV BYTE PTR [EDI],AL ; Sposta EDI in AL

0040110D |. 46 |INC ESI ; ESI = ESI + 1

0040110E |. 47 |INC EDI ; EDI = EDI + 1

0040110F |. 49 |DEC ECX ; ECX = ECX - 1

Link al commento
Condividi su altri siti

http://img508.imageshack.us/img508/2745/reversev.png

 

 

hai sbagliato un paio di cose

 

MOV AL,BYTE PTR [ESI]

BYTE PRT stà per Byte Pointer, ed ESI è il puntatore quindi

Muovi in AL quello che stà puntando ESI

 

XOR EAX,EDX non calcola nessun vettore, è solo un operazione

 

MOV ESI,Easy_Key.004031FC Copia in ESI quello che è contenuto in 004031FC

 

MOV ECX,DWORD PTR [40318C]

DWORD PTR, Double word pointer, come ti ho spiegato prima ma spostando una DWORD

Link al commento
Condividi su altri siti

  • 2 settimane dopo...

Mi sto avvicinando da poco al reversing anche se sapevo già programmare, ecco la mia soluzione

Exe Patchato che accetta qualsiasi serial + Keygen che genera serial per il nome desiderato ---> Download

 

Niente self-keygen perché non so come si chiama itoa da asm e non credo che il programma in se importi la libreria che contiene itoa.

 

Codice sorgente del keygen (c++):

#include <iostream>
using namespace std;

// Conta quanti byte è lunga una variabile
#define VALUE_CB(v) (8*sizeof(v))

// Implementazione C++ di ROR e ROL
#define ROL(v, n) ((v<<n)|(v>>(VALUE_CB(v)-n)))
#define ROR(v, n) ((v>>n)|(v<<(VALUE_CB(v)-n)))

void encrypt1(char *src, char *dst, size_t size)
{
size_t i;
for (i=0; i<size; i++)
	dst[i] = src[i]^0x40;
dst[i] = '\0';
}

void encrypt2(char *src, char *dst, size_t size, char key, unsigned long &resultingKey)
{
// ResultingKey è un valore usato per generare il serial alla fine
// facendo lo xor coi primi 4 byte della stringa del nome criptata
resultingKey = 0;

size_t i;
for (i=0; i<size; i++) {
	*reinterpret_cast<unsigned char *>(&resultingKey) = src[i];
	resultingKey = (int)resultingKey*(int)key;
	resultingKey += key;
	resultingKey = ROL(resultingKey, 4);
	resultingKey ^= 0x14;
	resultingKey = ROR(resultingKey, 4);
	dst[i] = *reinterpret_cast<unsigned char *>(&resultingKey);
}
}

unsigned long generateSerial(char *encrypted, unsigned long key)
{
return (key ^ *reinterpret_cast<unsigned long *>(encrypted));
}

int main()
{
size_t nameLength;
char name[64] = {0};
char encrypt[64] = {0};
unsigned long serial = 0, key = 0;

cout << "Keygen by GunyaGunya\n";
cout << "Name: ";
while (strlen(name) <= 0)
{
	fflush(stdin);
	gets(name);
}

nameLength = strlen(name);
encrypt1(name, encrypt, nameLength);
encrypt2(encrypt, encrypt, nameLength, name[0], key);
serial = generateSerial(encrypt, key);
cout << "Serial: " << serial << endl << endl;

system("pause");
return EXIT_SUCCESS;
}

Modificato da GunyaGunya
Link al commento
Condividi su altri siti

Crea un account o accedi per lasciare un commento

Devi essere un membro per lasciare un commento

Crea un account

Iscriviti per un nuovo account nella nostra community. È facile!

Registra un nuovo account

Accedi

Sei già registrato? Accedi qui.

Accedi Ora

Giochi in Uscita



×
×
  • Crea Nuovo...