Newsgroup: it.comp.lang.visual-basic
Titolo: [LUNGO] Sistema di protezione dalle copie

Salve a tutto il Ng,
sto cercando un sistema per la protezione dalle copie che sia abbastanza
efficace, ma a costo zero.
Mi spiego: mi capita di sviluppare qualche piccolo programma in VB o Access
per qualche amico/conoscente; vorrei evitare che il programma, una volta
creato il setup o copiato da un PC all'altro (nel caso di Access) potesse
girare come seconda/terza.. copia.
Il sistema più sicuro e affidabile è rappresentato sicuramente dalla chiave
hardware ma, dato l'elevado costo di una singola chiave 20-25 euro min. e il
basso costo del programmo 50-100 euro max, questa soluzione mi sembra
abbastanza dispendiosa.. Vorrei quindi qualcosa che agisca a livello
software e non hardware.
Ho provato a ragionare sul problema partendo da questi punti:
- sistema di protezione software
- non deve legarsi alle caratteristiche fisiche del PC/OS
- può implementare algoritmi di autenticazione di un codice prodotto (tipo
codici prodotti microsoft)
Il passo da me raggiunto è stato questo:
- al momento dell'installazione (o di avvio dell'MDE Access) viene
controllato che il codice seriale inserito dall'utente sia un codice valido.
Questo mi permette di "bloccare" copie che sono state scambiate senza
passare il codice seriale.
- se il programma viene installato su due PC (e normalmente due PC sono in
rete tra loro) posso mandare un broadcast sulla rete alla ricerca del
programma in ascolto sugli altri PC; per ogni programma che mi risponde
confronto il mio codice seriale con quello degli altri programmi in
esecuzione e se uguale blocco.
Questa soluzione è basilare, ma mi permette intanto di bloccare l'utilizzo
del programma all'interno di una stessa rete; chiaramente non risolve il
problema dell'installazione tra PC non in rete ma è già un buon passo.
Ho provato a sviluppare qualcosa di funzionante ma è basato sul protocollo
TCP/IP; non è detto che però sia installato! Potrebbe esserci solo il
NetBEUI o IPX e quindi il controllo Winsock non potrei usarlo. Comunque
anche con gli altri due protocolli c'è modo di recuperare la lista dei pc
trovati in rete e inviare dei messaggi, ma non so quali siano le API da
utilizzare. Credo che comunque il TCP/IP sia ormai abbastanza standard e, in
caso non sia installato, posso saltare il test e avviare lo stesso
l'applicazione.
Questo metodo è pieno du buchi, sicuramente, ma credo che mi copra buona
parte delle situazioni nelle quali il mio sw venga usato illegalmente.
Voi cosa ne dite?

Io faccio così:
All'avvio, l'applicativo legge dei parametri del sistema in cui è
installato, ad esempio il serial dell'HD.
Esegue un qualunque algoritmo di checksum, e trova un codice X
Quindi legge da un file allegato all'applicativo una stringa, che sottoposta
ad un altro algoritmo di checksum ritorna un codice Y.
Se X=Y, l'applicativo parte.
Se X<>Y, viene visualizzato un codice, che deve essere indicato alla mia
società, e che inserito in un semplice programmino di checksum, mi
restituisce un altro codice, che comunico al cliente.
Inserendo questo codice nella schermata di avvio, dove nel frattempo
l'applicativo era rimasto fermo, l'applicativo scrive nel file la stringa
che, all'avvio successivo, farà funzionare il giochetto X=Y.
Vantaggi:
Copiando l'applicativo, anche allegando il file dove si trova la stringa di
attivazione, il programma non parte, visto che X è ottenuto con parametri
del sistema
Svantaggi:
Il cliente deve telefonare in ditta e dettare il codice ricevuto.
Tieni presente che, siccome io sviluppo applicativi su specifica richiesta
del cliente, è lo stesso cliente, spesso, che mi chiede una cosa del genere,
per evitare che qualcuno possa copiare il sw e passarlo ad un concorrente. A
volte, installo il programmino di checksum (diverso per ogni applicativo),
direttamente nel PC del capoCED o del Direttore, in modo che siano
indipendenti nell'installazione, ma che il dipendente non possa trovare il
programmino di checksum (ovviamente non presente sul CD di setup).
Ciao
Alberto

 del programma all'interno di una stessa rete; chiaramente non risolve il
No come sopra detto!
Ti conviene inchiodare il nuemro di serie alle caratteristiche della
macchina! :-)

Insieme al programma dai un dischetto opportunamente preparato:
-
Installano il software
- Al primo avvio il tuo programma va sul dischetto
e verifica un codice
  su un filino binario 
- se è tutto ok incrementa
un contatore (sempre su dischetto) e scrive qualcosa che associ il PC
corrente (S/N dell'hd) al contatore 
- se il contatore supera il numero
previsto, non attiva il programma
- se devono reistallare il software, al
primo avvio deve trovare 
  lo stesso pc/contatore
Sappi però, che
qualsiasi soluzione tu trovi, efficacia e costo 0, non vanno troppo
daccordo :)
ciao
Fabio
--------------------------------
Inviato via 
http://usenet.iol.it
 

 del cliente, č lo stesso cliente, spesso, che mi chiede una cosa del


Si, ma come risposto a Alberto V, questo mi obbliga a gestire un sistema di
hot-line per ritornare il codice convertito.. e comunque non riesco a
testare il numero di sw in utilizzo nella rete.. Il cliente può chiamare
dicendo che ha reinstallato tutto.. e io non riuscirò mai a saperlo.
Comunque tieni presente che i miei clienti non sono "smanettoni" e prima di
capire come fare per eludere il sistema.. stanno prima ad acquistare una
nuova copia! Non voglio un sistema perfetto, mi basta un sistema in grado di
bloccare gli utenti "entry level", che sono la buona parte di chi usa il sw!
"Lord Rayden" <ray...@hardwaretips.com.rimuovimi> ha scritto nel messaggio
news:a7sbu8$313v$1...@half.spin.it...


 ha scritto nel messaggio
news:213Z175Z2Z50Y1...@usenet.iol.it...


 cosě ha due copie funzionanti... come fai a controllare cio?
Beh, ovviamente non posso controllarlo.
Comunque non č il male di una copia aggiuntiva.
Il problema č se il SW viene rivenduto o passato ad altre ditte, o rubato e
portato altrove, o installato in 100 copie non pagate.
ciao
Alberto

 software e non hardware.
[...]
Ogni sistema di protezione e' raggirabile.
Un sistema "software" e' raggirabile facilmente, a differenza di un
sistema "hardware", e lo "sforzo" di rompere la protezione, deve valere
la candela.
Se il software da craccare e' di grande valore, non ci sara' nessun tipo
di protezione che possa resistere a un cracker motivato.
Pertanto la scelta di un sistema di pretezione piuttosto di un altro,
dipende da tre fattori: il costo del software, il costo del sistema di
protezione e il "valore" che viene atribuito al software stesso.
A questo punto la domanda e': per un software da 50-100 euro, quanto
sono disposto a investire in protezione? :)
ciao. buc

 Conosci per caso l'API che mi restituisce il S/N del disco??
Non ce l'ho a portata di mano, cerca sul sito comune o in rete, senz'altro
la trovi
Fabio

 quello che ho detto non vale niente...
Infatti... molti anni fa addirittura inserivano addirittura dei settori
difettosi in particolari posizioni del floppy (quello che si fa oggi sui CD
+o-) per impedire di farne la copia (il programma di installazione
controllava che ci fossero i settori difettosi sul disco e li modificava
all'atto dell'installazione per poi ripristinarli all'atto della
disintallazione).
La soluzione all'epoca si chiamava Copy2Pc e ti produceva una copia esatta
(errori compresi) del floppy! :-)
Per me l'unica protezione sensata è il buon vecchio numero di serie non
rompe a te e non rompe al cliente tanto se il tuo programma è buono lo
copiano cmq! :-)
Se poi su tutte le stampe inserisci una scrittina del tipo "stampato con
nomeprogramma registrato a nome di..." voglio vedere chi lo usa copiato per
lavorarci! O;-)

 lavorarci! O;-)
Dipende dal tipo di software. Ci sono programmi che fanno calcoli
spropositati e di cui la stampa è solo un valore aggiunto.

ad un altro algoritmo di checksum ritorna un codice Y.
E' praticamente lo stesso sistema che ho utilizzato per lo sviluppo di
un nuovo progetto.
Ho incontrato però un problemone:
ho installato il programma su circa 5 postazioni di beta-testing. Su 2
l'API che ritorna il codice seriale dell'HD ritorna 0!!!!
Che API usi? Magari c'e' qualcosa da cambiare per i diversi S.O.?
Grazie,
Alberto 
=8<========================================================
 Alberto Favetta
 Axi Applicazioni per l'Informatica 
 V. Vittorio Veneto 23 Melegnano (MI)
 
http://www.axi-informatica.com
 - 
alberto...@axi-informatica.com
=======================================================>8==
=8<========================================================
 Alberto Favetta
 Axi Applicazioni per l'Informatica 
 V. Vittorio Veneto 23 Melegnano (MI)
 
http://www.axi-informatica.com
 - 
alberto...@axi-informatica.com
=======================================================>8==


Private Declare Function GetVolumeInformation Lib "kernel32.dll" Alias _
"GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal _
lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Integer, _
lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, _
lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal _
nFileSystemNameSize As Long) As Long
Mai avuto problemi, installata su W98SE, W2KPro e W98ME.
Se usi la stessa funzione, e hai avuto problemi, mi posti per favore i
dettagli dei S.O., cosě comincio a studiare il caso? Grazie.
Ciao
Alberto