Vai al contenuto

GunyaGunya

Utente
  • Iscritto

  • Ultima visita

  1. GunyaGunya ha pubblicato un messaggio nella discussione in Elettronica e programmazione
    Voglio vedere quanto è difficile da decifrare questo algoritmo di generazione del seriale che ho inventato in 5 minuti di noia così ho messo insieme questo programmino asd. Dovrebbe essere relativamente semplice come crackme anche se non ho provato personalmente a crackarlo dato che so già come funziona. http://www.mediafire.com/?9dbbakzbk7kgfsh Dovrete postare sia l'exe patchato che un keygen, e se volete anche un self-keygen
  2. Risolto anch'io (anche se era gia stato risolto), ecco qua. - exe patchato che accetta qualsiasi nome + serial - self-keygen che quando inserisci un nome + serial sbagliati ti dice il serial giusto per quel nome - keygen http://localhostr.com/file/ZxdBSz9/Ice9.rar source del keygen: #include <iostream> using namespace std; void GenerateSerial(char *name, char *dst) { size_t len = strlen(name); int sum = 0; for (size_t i=0; i<len-1; i++) { sum += name[i]; if (name[i] <= 'Z' && name[i] >= 'A') sum += 0x2C; } sum += 666; sum *= 12345; sum -= 23; sum *= 9; _itoa(sum, dst, 10); sprintf(dst, "%s%s", dst, &name[3]); } int main() { char name[64] = {0}; char serial[64] = {0}; cout << "Keygen by GunyaGunya\n"; while (strlen(name) <= 3) { cout << "Name: "; fflush(stdin); gets(name); } GenerateSerial(name, serial); cout << "Serial: " << serial << endl << endl; system("pause"); return EXIT_SUCCESS; } L'unica cosa è che non capisco perché il keygenme inverte la stringa alla fine per poi non farci niente e usare quella non invertita. Magari è stato un errore di chi l'ha programmato. EDIT: Ah, invertire la stringa serve quando converte a stringa il numero facendo il resto della divisione per 10 perché altrimenti verrebbe al contrario
  3. 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; }