Newsgroup: it.comp.programmare.win32
Titolo: Proteggere i propri programmmi

Salve ragazzi,
avete qualche link da darmi per proteggere i miei programmi dalla copia?
Vorrei capire come funzionano i keygenerator, come fanno certi programmi a
riconoscere se il cd è originale o no ecc..
Dovrei fare un programmone grosso e vorrei tutelarmi.
Grazie in anticipo
--
Ettore Iacomussi
Java/C++ Developer & Webdesigner
Wap & Web Applications
http://www.bytecode.it
http://wap.bytecode.it
http://bcommerce.bytecode.it
ICQ: 62626910 - E-Mail: 
webm...@bytecode.it

Dovrei fare un programmone grosso e vorrei tutelarmi.
Allora ti consiglio come sopra la Hardest e le sue chiavi di
protezione del software.
-- 
DGP85               | Don't change the address.
http://thedaps.net/
 | No Binaries or HTML at this address.

 ha scritto nel messaggio
news:8suujc.3...@thedaps.net...


Si, ma ho sentito dire che riescono a copiarle ste chiavi.
No, le chiavi della Hardest sono incopiabii!


 ha scritto nel messaggio
news:8sv929.3...@thedaps.net...


 wrote in message


 ha scritto nel messaggio
news:8t549r$nmd$1...@fe2.cs.interbusiness.it...


!!!BOOOOOM!!!! ;-)
Mah, me la cavo leggermente a comprendere il materiale, e visto quel
che ho visto, la Hardest ha sistemi di cifratura vicini al 4096...
credi sia possibile copiarle, senza spendere una cifra?


 credi sia possibile copiarle, senza spendere una cifra?
certo!
forse potrebbe richiedere molto tempo (dipende dalla implementazione che se
ne fa e dalle skills del reverser) ma non certo molto denaro.
Sul sito si legge di sistemi di cifratura DES, e triple-DES like:
verrebbe da pensare che quella quantita' di memoria, l'uso ASICs  e gli
algoritmi dichiaratamente non reversabili (e non pubblici ;) rendano la
chiave effettivamente incopiabile... probabilmente e' cosi'.. ma come ben
saprai copiare la chiave e' != da spoteggere il programma =) :
la chiave per quanto evoluta e' un oggetto "stupido" utilizzabile,
semplificando [se vuoi == semplicisticamente ; ], in 2 modi..
1) memoria dove salvare dati  che siano *indispensabili*  x il funzionamento
del programma (uso *strong* o meglio intelligente) o per contenere
dati hardcoded o variabili (i.e. timestamps) su cui effetturae controlli
2) una blackbox a cui do dati in input che vengono manipolati e restituiti e
che posso utilizzare x ulteriori manipolazioni e/o verifiche
Ora a queste due modalita' di funzionamento possono essere integrati nel
codice (attraverso un'API semplice -> reverser friendly ;)  nel tuo
programma per implementare i piu' vari sistemi protezione.. oppure, cosa
molto in voga, per criptare(c.d. envelope, shell, etc) l'eseguibile e
decriptarlo a runtime solo in presenza della chiave.
Il tutto se implementato bene sembra in effetti inattacabbile: tuttavia il
quadro di sicurezza si tinge di tinte fosche nonappena il nostro reverser
mette le mani su una chiave originale:
 - il caso 1 e' "banale" x il reverser.. e' sufficente emulare le letture
(scritture) alla memoria della chiave..preventivamente "dumpata" et voila'
posso rimuoverla che il programma nemmeno se ne accorge =)
 - il caso 2 e' piu' complesso xche' essendo una blackbox non posso
"emularne" il funzionamento interno a me ignoto.. ma tuttavia e' chiaro che
gli input possibili sono un insieme determinato.. e cio' porta ad avere
anche un insieme determinato di resposte.. con conseguente possibilita' di
emulazione.
Anche per l'envelope e' possibile salvare l'immagine dell'eseguibile
decrittato in memoria e ricostruire gli headers ottenendo di nuovo un
eseguibile pulito.
Come vedi la chiave e' si un sistema piu' sicuro di altri ma non certo
innattacabile.
Saluti,
 Walker Boh