• Benvenuto in Making Videogames!
  • Condividi la tua passione!
  • Crea il tuo Videogioco!
Benvenuto ospite! Login Registrati



Valutazione discussione:
  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5
Title: Sicurezza software
Modi discussione
#1
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?
 
Reply
#2
Penso che un contatto continuo ad un server per lo scambio di dati di piccoli byte potrebbe creare problemi.
 
Reply
#3
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
 
Reply
#4
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.
 
Reply
#5
hehehhe sei un po fuori strada. non esiste solo if codice_inserito == codice_esatto then
si puo' gestire la cosa per generazione in modo da evitare il serial fishing, si puo' gestire un seriale con seh invece dei confronti, oppure scrivere smc, lanciare sottothread o creare thread remoti ecc ecc
ci sono davvero moltissimi modi oltre a if codice_inserito == codice_esatto Big Grin
senza dimenticare tecniche antidebugging, compressione e crittografia della memoria, iat redirect ed un mondo di ecc Smile
Come hai giustamente fatto notare, in genere è molto piu' facile patchare che keygennare, e un software client server non garantisce nulla di piu' che un hardware fingerprint locale.
 
Reply
#6
se invece il programma fosse collegato ad un database e ad ogni utente si da un username e password uniche ??
 
Reply
#7
mmm non vedo differenza alcuna
 
Reply
#8
no dico non sarebbe più sicuro di un seriale che sarebbe più facile da crakare "costruendo" un keygen
 
Reply
#9
non puoi keygennarlo, perchè non c'è nulla da keygennare, ma per la patch il grado di (in)sicurezza è identico Smile
senza contare che il traffico web è sniffabile con un semplice hook al tcp.
Giusto poco tempo fai ho crackato un programma creando un picolissimo programma server che dava le risposte al software, in pratica emulava il lato server. nel file host è bastato mettere che www.......com puntasse a 127.0.0.1

Ora la stiamo facendo facile, ma naturalmente crakkare non è per nulla facile, per riuscire a sproteggere alcuni programmi ben protetti occorre una esperienza di molti anni e una completa conoscenza dell'asm.
 
Reply
#10
ti vedo esperto in merito se avro bisogno di aiuto non esiterò a contattarti Smile
 
Reply
#11
(17-07-2011, 07:40 PM)Predator Ha scritto: hehehhe sei un po fuori strada. non esiste solo if codice_inserito == codice_esatto then
si puo' gestire la cosa per generazione in modo da evitare il serial fishing, si puo' gestire un seriale con seh invece dei confronti, oppure scrivere smc, lanciare sottothread o creare thread remoti ecc ecc
ci sono davvero moltissimi modi oltre a if codice_inserito == codice_esatto Big Grin
senza dimenticare tecniche antidebugging, compressione e crittografia della memoria, iat redirect ed un mondo di ecc Smile

Generando il serial in runtime eviti il serial fishing, ma rimane comunque rilevabile debuggando.
In che modo un thread può effettuare il controllo senza un if?
Dove posso trovare una spiegazione riguardo seh e smc?



(17-07-2011, 10:25 PM)Predator Ha scritto: senza contare che il traffico web è sniffabile con un semplice hook al tcp.
Giusto poco tempo fai ho crackato un programma creando un picolissimo programma server che dava le risposte al software, in pratica emulava il lato server. nel file host è bastato mettere che www.......com puntasse a 127.0.0.1

Tuttavia rimane impossibile trovare il serial o creare un keygen in quanto non sei in possesso dell'eseguibile server. Quindi i keygen/serials si possono evitare (a scapito di richiedere l'accesso a internet); anche se come già spiegato prima, i serial/keygen sono il problema minore.

(17-07-2011, 10:25 PM)Predator Ha scritto: Ora la stiamo facendo facile, ma naturalmente crakkare non è per nulla facile, per riuscire a sproteggere alcuni programmi ben protetti occorre una esperienza di molti anni e una completa conoscenza dell'asm.

Non ho mai provato cracckare qualcosa, ma qualcosa mi dice che proteggerla è ancora più difficile Big Grin
 
Reply
#12
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.
 
Reply
#13
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.
 
Reply
#14
Jonathan potresti fare un crackme cosi da farcelo provare?
 
Reply
#15
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?
 
Reply
#16
non ho mai reversato un exe fatto con darkbasic... ma esiste ancora quel compilatore?
 
Reply
#17
Dark Basic Pro ha il compilatore (Nella cartella compiler). Quindi mi metto a lavoro?
 
Reply
#18
dai proviamo no? Smile
 
Reply
#19
Non é un progetto da niente anche perché non metto mano dal un bel pò al programma (soprattutto a comandi dei server) ma non dovrebbero esserci problemi con un pò di ripasso! xD Mi metto a lavoro Smile

Se ci sono problemi scrivo qui, invece appena finisco il programma lo metto in questo thread
http://www.making-videogames.net/giochi/thread-CrackMe
 
Reply
#20
magari apri un altro thread altrimenti diventi di una lunghezza epica XD
 
Reply
  


Vai al forum:


Browsing: 1 Ospite(i)