Messaggi: 1,021
Discussioni: 28
Thanks Received:
0 in 0 posts
Thanks Given: 0
Thanks Received:
0 in 0 posts
Thanks Given: 0
Registrato: May 2010
Reputazione:
9
Ammettiamo che si voglia creare un software shareware, se lo si vuole mantenere tale è necessario progettare un sistema di autenticazione efficace.
Presumibilmente (a livello teorico) qualsiasi protezione può essere bypassata, ma cosa si può fare per mettere in difficoltà i reverser?
Penso che una verifica su un database online (per quanto scomoda) sia obbligatoria, visto che bisogna evitare serial univoci. Quindi penso che il problema keygen/serial si possa evitare.
Il problema più grosso penso che siano le patch: come si può rendere difficoltoso patchare un programma?
Penso che un contatto continuo ad un server per lo scambio di dati di piccoli byte potrebbe creare problemi.
Messaggi: 23
Discussioni: 0
Thanks Received:
0 in 0 posts
Thanks Given: 0
Thanks Received:
0 in 0 posts
Thanks Given: 0
Registrato: Jul 2011
Reputazione:
0
17-07-2011, 05:32 PM
(Questo messaggio è stato modificato l'ultima volta il: 17-07-2011, 05:36 PM da Predator.)
Escludendo le dongle (chiavi hardware), per ovvi motivi di costi, occorre prima di tutto implementare tecniche antidebugging, e naturalmente gestire protezioni a livello di memoria, per esempio con l'utilizzo di protector commerciali che bloccano il reverser medio. Di contro piu' la protezione commerciale è conosciuta, piu' sara' conosciuto il metodo di cracking. Scrivere protezioni proprie allunga la vita del software.
diciamo che la protezione creata da un programmatore è proporzionalmente valida alla conoscenza del reversing che esso ha.
Se conosci le armi di un nemico sai come difenderti, se non lo conosci ne sei vittima.
Scontato ribadire che nulla è incracckabile, in quanto se un programma si puo' runnare allora si puo' anche reversare. Spesso importanti softwarehouse (es. microsoft, autedesk, adobe ecc...) non perdono piu' tempo in complesse tecniche di protezione, ma si limitano al buon senso.
I linguaggi .Net sono i meno portati per le protezioni, a causa della loro natura di linguaggio IL.
Predator
Messaggi: 1,021
Discussioni: 28
Thanks Received:
0 in 0 posts
Thanks Given: 0
Thanks Received:
0 in 0 posts
Thanks Given: 0
Registrato: May 2010
Reputazione:
9
Il punto è che per quanto ci giri in torno non si può evitare di scrivere un controllo di uguaglianza ( if codice_inserito == codice_esatto ) e di inserire il codice esatto in un' area di memoria. Dopodiché basta (scrivo basta anche se non ho la minima idea di come si faccia) fare in modo che il controllo restituisca sempre true.
Per evitare di farsi trovare il serial (e evitare keygen) basterebbe creare un client-server e far calcolare l'uguaglianza dal server; tuttavia non trovo scampo alle patch, non ho neanche la minima idea di come rendere un po' più difficile il concetto spiegato sopra.
Escluderei l'uso di software esterni che modificano l'exe (che tra l'altro non sono nemmeno sicuro che esistano per linguaggi non .net), visto che mi pare scontato un calo di prestazioni e ho il pregiudizio che facciano solo porcate.
se invece il programma fosse collegato ad un database e ad ogni utente si da un username e password uniche ??
Messaggi: 23
Discussioni: 0
Thanks Received:
0 in 0 posts
Thanks Given: 0
Thanks Received:
0 in 0 posts
Thanks Given: 0
Registrato: Jul 2011
Reputazione:
0
mmm non vedo differenza alcuna
no dico non sarebbe più sicuro di un seriale che sarebbe più facile da crakare "costruendo" un keygen
Messaggi: 23
Discussioni: 0
Thanks Received:
0 in 0 posts
Thanks Given: 0
Thanks Received:
0 in 0 posts
Thanks Given: 0
Registrato: Jul 2011
Reputazione:
0
18-07-2011, 09:31 AM
(Questo messaggio è stato modificato l'ultima volta il: 18-07-2011, 09:36 AM da Predator.)
mhhh fammi pensare ad un esempio semplice...
esempio1:
fai un ciclo che verifica che ogni carattere del seriale inputato, deve essere valore esadecimale il cui modulo con X è 0.
in questo modo non c'è il seriale completo ma solo una verifica.
esempio2:
trasformi il seriale inserito xorando il suo valore con un numero e ne confronti il risultato. in questo modo non confronti il seriale inserito ma uno trasformato.
esempio3:
dal seriale inputato esegui delle operazioni che sono soggette ad un possibile overflow. esempio un possibile numero/0 oppure un integer che finisce dentro un byte,una stringa che finisce dentro un valore byte ecc...
se il seriale inputato non prevede l'algoritmo corretto andra' in overflow o in un altor tipo di exception e utilizzando il seh (Structured Exception Handling) cioè la gestione dell'errore (on error, try catch ecc...) rimandi alla sezione "Errore seriale sbagliato".
Anche in questo caso (come nell'esempio2) non viene effettuato un confronto di un seriale, ma esiste solo una logica matematica.
si possono anche sommare le tecniche di tutti questi esempi, e naturalmente ce ne sono anche altre. Alcune operazioni matematiche non sono reversibili e questo rende la creazione di un keygen ancora piu' difficile.
L'smc (self modify code) è un programma che può modificare il proprio codice eseguibile riscrivendosi a runtime. Io ho fatto vari crackme con smc direttamente in asm perchè è il linguaggio piu' a basso livello che esiste ed è portato per queste cose. Per gli altri linguaggi si può facilmente fare con l'utilizzo delle api readprocessmemory e writeprocessmemory, naturalmente rendendo la sezione .code del PE scrivibile o modificando l'exe con un editor o direttamente da codice, qui i metodi sono essenzialmente un paio. Oppure riaprendo s'è stesso con l'api OpenProcess come farebbe un loader.
Crare un programma smc significa saper riscrivere parte di esso in asm, pertanto in questo caso occorre per forza conoscere l'assembly in proporzione alla complessità di codice riscritto.
Messaggi: 933
Discussioni: 71
Thanks Received:
0 in 0 posts
Thanks Given: 0
Thanks Received:
0 in 0 posts
Thanks Given: 0
Registrato: Jun 2010
Reputazione:
0
Secondo me una buona idea potrebbe essere si di imporre l'inserimento di un seriale secondo formula matematica non reversibile, poi affidare a un file (e badate che non ho detto .exe ma solo un include).Prima l'applicazione controlla che l'include non sia modificato, se lo é lo cancella e ricrea come l'originale. Sarebbe ottimo che ogni programma richiedesse una registrazione, quindi ad un nick corrisponde un seriale e ad ogni computer corrisponde una configurazione hardware diversa che viene memorizzare in server.
Se uno sconosciuto usa il nick e lo stesso seriale da un pc diverso la configurazione hardware sarà al 99% diversa quindi restituirà un errore.
Questa é solo un'idea che dò da inesperto xD Questo però implica che internet ad ogni avvio dovrà essere attivo. Ma il tutto penso dipenda dal fatto se questo software dovrà essere perennemente online per la gestione dati oppure non sia necessario. Bisogna tenere in considerazione anche chi non ha internet a disposizione.
Messaggi: 23
Discussioni: 0
Thanks Received:
0 in 0 posts
Thanks Given: 0
Thanks Received:
0 in 0 posts
Thanks Given: 0
Registrato: Jul 2011
Reputazione:
0
18-07-2011, 11:15 AM
(Questo messaggio è stato modificato l'ultima volta il: 18-07-2011, 11:15 AM da Predator.)
Jonathan potresti fare un crackme cosi da farcelo provare?
Messaggi: 933
Discussioni: 71
Thanks Received:
0 in 0 posts
Thanks Given: 0
Thanks Received:
0 in 0 posts
Thanks Given: 0
Registrato: Jun 2010
Reputazione:
0
18-07-2011, 02:32 PM
(Questo messaggio è stato modificato l'ultima volta il: 18-07-2011, 03:15 PM da Jonathan Archer.)
Predator la parte del controllo harware on-line era un idea che non so mettere in pratica. Però posso provare a fare un "simulazione". Se la scrivo in Dark Basic e poi faccio l'exe hai problemi?
Messaggi: 23
Discussioni: 0
Thanks Received:
0 in 0 posts
Thanks Given: 0
Thanks Received:
0 in 0 posts
Thanks Given: 0
Registrato: Jul 2011
Reputazione:
0
non ho mai reversato un exe fatto con darkbasic... ma esiste ancora quel compilatore?
Messaggi: 933
Discussioni: 71
Thanks Received:
0 in 0 posts
Thanks Given: 0
Thanks Received:
0 in 0 posts
Thanks Given: 0
Registrato: Jun 2010
Reputazione:
0
Dark Basic Pro ha il compilatore (Nella cartella compiler). Quindi mi metto a lavoro?
Messaggi: 23
Discussioni: 0
Thanks Received:
0 in 0 posts
Thanks Given: 0
Thanks Received:
0 in 0 posts
Thanks Given: 0
Registrato: Jul 2011
Reputazione:
0
magari apri un altro thread altrimenti diventi di una lunghezza epica XD