Domanda Reversing Curiosità su keygen

Cad81

Utente Silver
6 Febbraio 2013
80
30
2
96
Mi è venuto in mente un dubbio. Le licenze vengono generate da alcune operazioni su determinati valori, codici ecc o generati pseudo-random, giusto?
Di conseguenza, per fare un keygen, devo scoprire quali valori prende in esame (mac address ecc) e quali operazioni di "mescolamento" vengono fatte.

Se invece una licenza fosse generata casualmente da un umano? Penso sarebbe impossibile scrivere un keygen, oppure no? Anche perchè potrebbe essere variabile sia in lunghezza che in suddivisione lettere/caratteri speciali/numeri

Praticamente arriverebbe la richiesta di licenza, l'addetto inventa il suo codice (che verrà confrontato con il database e, se ovviamente esiste già, dovrà essere cambiato) e lo invia al cliente.

Tralasciamo ostacoli "reali" come:
- tempi di attivazione più lunghi e non istantanei come quelli automatici
- bypassare il check online da parte del software
- altre che al momento mi sfuggono
 
L'attivazione online e' piuttosto diffusa. Non c'e' bisogno che qualcuno lo generi "a mano", i numeri seriali possono essere generati in automatico dal backend con l'acquisto, e ad esempio inviati via mail. Quando ci si trova in questa situazione non si parla piu' di keygen, ma di crack. Va patchato in qualche modo l'eseguibile o aggirato il controllo in altra maniera. Alcuni programmi invece implementano la logica della validazione del seriale ed in piu' eseguono il check online. In questi casi si vedono spesso dei keygen che oltre a generare seriali patchano anche l'eseguibile in modo da non contattare il server remoto di licenza e fare solo il controllo locale.
 
L'attivazione online e' piuttosto diffusa. Non c'e' bisogno che qualcuno lo generi "a mano", i numeri seriali possono essere generati in automatico dal backend con l'acquisto, e ad esempio inviati via mail. Quando ci si trova in questa situazione non si parla piu' di keygen, ma di crack. Va patchato in qualche modo l'eseguibile o aggirato il controllo in altra maniera. Alcuni programmi invece implementano la logica della validazione del seriale ed in piu' eseguono il check online. In questi casi si vedono spesso dei keygen che oltre a generare seriali patchano anche l'eseguibile in modo da non contattare il server remoto di licenza e fare solo il controllo locale.
Sisi, questo lo so, ma intendevo una cosa diversa, probabile mi son spiegato male.
La mia curiosità riguardava il fatto se fosse possibile impedire la realizzazione di keygen (solo keygen, senza patch e bypass vari), introducendo un elemento molto variabile (la casualità dell'uomo che si inventa il codice) al posto di elementi prestabiliti (che so, il mac address, convertito in xyz, manipolato, ecc) dai quali è possibile ricavare le operazioni effettuate.

In caso ci fosse una persona a scegliere il codice, il cracker non può sapere come risalire a quel codice, perchè non ci sono elementi prestabiliti da manipolare.

Ovviamente esistono altri sistemi per aggirare la cosa, come hai detto tu, quindi patchare l'exe che fa il controllo ecc, ma li volevo escludere idealmente, giusto per capire se la mia curiosità è corretta (cioè che un codice inventato da una persona non può avere un keygen).
 
Si, una generazione casuale server-side ha le stesse caratteristiche di un uomo che lo inventa a piacere se non ancora piu' sicura. Esistono altri modi per rendere impossibili i keygen senza patch, uno di questi l'ho pubblicato nelle release di inforge e prevede l'uso di RSA: Sistema Licenze RSA C#. Con questo sistema tra l'altro e' possibile anche fare il controllo solo in locale senza internet ed un keygen e' comunque impossibile senza la chiave privata RSA. Richiede necessariamente una patch per essere bypassato, che il controllo sia online o offline. Non e' una cosa che mi sono inventato, alcuni software professionali usano questo sistema, ho semplicemente pubblicato una mia implementazione per via della scarsita' di sorgenti open data la delicatezza dell'argomento.
 
  • Mi piace
Reazioni: Cad81
Esatto: attualmente si utilizza i sistemi di cifratura asimmetrici (RSA è il più conosciuto, ma ce ne sono altri).
Di base si utilizza il concetto della "firma digitale" con il quale è possibile creare un "codice" che non può essere riprodotto se non conoscendo la chiave privata (che è segreta per l'appunto) e che viene vertificato dalla chiave pubblica presente nell'eseguibile.

Ovviamente si può superare il problema modificando l'eseguibile per ignorare la verifica della firma o per "cambiare" la coppia chiave privata/chiave pubblica.