Newsgroup: it.comp.lang.visual-basic
Titolo: Metodo di protezione alternativo alle chiavi hardware...

Ciao a tutti...
Ho sentito più volte le lamentele di molti che dicevano di non avere
sistemi efficaci
per la protezione dei propri programmi.
Bene, ora darò una risposta già conosciuta, ma che probabilmente in pochi
(soprattutto fra
i principianti) sanno.
Il segreto di tutto ciò risiede ovviamente nelle API di Windows, e più
precisamente
in quella che estrae l'etichetta di volume di un qualsiasi supporto dati.
Questo sistema teoricamente non si può dire assoluto, poichè esiste la
remota possibilità
che due HD (o anche dischetti) abbiano una stessa etichetta, ma la
percentuale di probabilità che questo
succeda è bassisima, credo ben al di sotto dello 0,5 %... Quindi nella
pratica questo
sistema è l'ideale.
Dunque eccoci giunti al momento più piacevole... l'illustrazione della
nostra carissima
chiamata API con relativa funzione d'utilizzo.
Questa è la dichiarazione dell'API. Si tolga la parola chiave "private" se
la dichiarazione avviene
in un modulo.
-----------
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
-----------
Di seguito vi è invece una routine per utilizzare le capacità offerte dalla
precedente API.
-----------
Function GetSerialNumber(Disco As String) As Long
Dim SerialNum As Long
Dim Result As Long
Dim Temp1 As String
Dim Temp2 As String
   Temp1 = String$(255, Chr$(0))
   Temp2 = String$(255, Chr$(0))
   Result = GetVolumeInformation(Disco, Temp1, Len(Temp1), SerialNum, 0, 0,
Temp2, Len(Temp2))
 
   GetSerialNumber = SerialNum
-------------
Questo è tutto. Inutile dire che per proteggere i file si potranno
elaborare vari metodi, come quello, che preferisco,
chiamato "delle certificazioni".
In sostanza si distribuisce un'unica versione di un programma, shareware
che poi diventa registrata, ma solo
dietro una funzione che la registra in presenza della certificazione.
In sostanza si include nell'applicazione una routine che estrae il numero
seriale dal disco ove è collocato, con 
criptazione ovviamente, salvandolo in un file di testo.
Questo file può essere inviato, soprattutto per Internet, tramite posta
elettronica all'autore del programma,
che ovviamente egli farà la certificazione (da spedire poi all'utente
ovviamente) solo dietro il pagamento...
Questa certificazione dovrà essere chiaramente in forma criptata e in un
formato segreto (qui potete davvero
sbizzarire la vostra fantasia) cosicchè non possa essere manipolata.
Come è facile intuire, tenendo conto di quanto ho detto nella precedente
frase, se questo utente dà ad un altro
la sua certificazione, il programma non si registrerà poichè, confrontando
il numero seriale della certificazione
e quello del disco ove è situato, essi saranno diversi e quindi ciò può
indicare due cose:
- Il computer è stato formattato e quindi ha un nuovo numero seriale oppure
l'utente ha deciso di installare il
programma su di un altro computer e cancellarlo da quello originario. In
questi casi dovrà prendersi la bega di effettuare
nuovamente la procedura di registrazione che credo sia doverso l'autore
debba rendere gratuita..
- Il programma è stato copiato. In questo caso l'utente che ha tentato di
usare indebitamente il programma e quidni
pagherà la somma dovuta all'autore, oppure resterà con la versione limitata
del programma.
Chiaramente la routine che provvederà alla registrazione dovrà confrontare
il numero seriale della certificazione
con quello del supporto ove risiede.
Credo che, a questo punto, non vi sia molto altro da aggiungere se non un
invito ad usare questo metodo al posto delle
chiavi hardware perchè, oltre all'essere scomode per l'utente, sono costose
per il programmatore andando ad elevare
il prezzo delle applicazioni inutilmente.
Questo metodo è molto più semplice, è gratuito, ed ha il solo
inconveniente, nel caso l'utente cambi, per qualsiasi ragione,
numero seriale al disco fisso, di dover effettuare nuovamente la
registrazione, 
ma non credo che ciò sia un grosso difetto poichè è perfettamente ovviabile
effettuando,
come ho già detto prima, una nuova registrazione gratuita. (Ovvio che
bisognerebbe tenere un database di tutti gli 
utenti registrati perchè, altrimenti, chiunque potrebbe inventare la scusa
della formattazione o del cambio di supporto).
Il metodo ridotto all'essenziale ve l'ho esposto in maniera, credo,
corretta. 
Ora stà a voi raffinarlo sempre di più per adeguarlo alle più svariate
esigenze. 
Gradirei soltanto che chiunque creda di aver migliorato, sotto qualsiasi
aspetto, questo metodo, 
me lo comunichi alla seguente mail: 
eagl...@hotmail.com
Cordiali saluti.

 registrazione, 
Scusa, ma a questo punto non sarebbe molto più semplice, come si faceva
tanti anni fa sotto DOS leggere il numero di ROM della macchina anzichè il
serial del disco? É più facile che una persona formatti il disco (a me
capita per vari motivi una volta ogni due anni, se non altro per fare
pulizia o ridistribuire dei programmi) piuttosto che si metta a cambiare la
scheda madre con il numero di serie del BIOS... Se a qualcuno interessa il
metodo, ditelo che vi spiego e vi do gli indirizzi.. Bye.
Ender

 debba rendere gratuita..
  Mi pare il minimo, ma questo non fa che aumentare la scomodita' di questo 
metodo di protezione, soprattutto se l'autore nel frattempo cambia 
indirizzo e-mail o pure l'indirizzo fisico e l'utente non riesce piu' a 
trovarlo.
  Insomma, mi pare che le complicazioni siano tali da far allontanare gli 
utenti senza aumentare la sicurezza a sufficienza: per me e' meglio un tipo 
di dati di registrazione in cui sulla finestra principale del programma 
appare una scritta del tipo: "Registrato a Pinco Pallino".
-- 
  Ciao :-)
  Massimo
  Nell'indirizzo, sostituire DIESPAMMERS con MC1258
  In the address, replace DIESPAMMERS with MC1258

Ender
Condivido.
E non solo...
Sto studiando un metodo "sicuro" che scrive direttamente
nell'eseguibile il numero di volte che il prg viene utilizzato, per
creare delle versioni "a tempo" o trial.
Genesio 

Ender
A me interessa.
Grazie.
---Bruno

Io, invece, condivido il sistema di protezione.
Ci stavo pensando seriamente da tempo anzi, vi chiederei se esiste una
funzione simile a quella di Win95, per ottenere il numero del volume
dell'hd, sotto Win 3.11 o MsDos.
Penso che sia possibile inventare un sistema per proteggere il proprio
sw, che dovrebbe essere concesso in licenza d'uso, combinando anche
altre variabili.
Io pensavo a:
- il programma deve essere utilizzabile in modalità limitata (nel
tempo o nel numero di accessi) e con la possibilità di attivarlo con
un codice che il programmatore deve comunicare al cliente;
- il codice di attivazione potrebbe essere sensibile alla descrizione
che il cliente inserirà come ragione sociale o alro identificativo;
- il codice di attivazione potrebbe contenere sequenze che lo rendono
universale (strettamente riservato, però);
- il codice di attivazione verrà comunicato al cliente quando questi
comunicherà i dati che un'apposita procedura di attivazione mostrerà
allo stesso (volume number e ragione sociale);
- ogni codice di attivazione deve essere memorizzato nella propria
banca dati (del programmatore, ovviamente) in modo da risalire al
cliente; se il cliente riformatta l'hd o cambia sistema gli viene
comunicato un nuovo codice (previa verifica).
Spero di essere stato abbastanza chiaro.
P.s.: sarei interessato ad una routine di automodifica del codice,
come discusso in questo subject.
Ciao a tutti.
--> Cpt. Future <--
Togli NOSPAM dall'indirizzo.

 Chiaramente il prodotto non sara' piu' installabile da parte del cliente,
[...]
E se si rompe la chiave hardware? Mica è un problema di chi vende il
software, ma di chi lo acquista che, in tal caso, deve sopportare qualche
seccatura in più non essendosi dotato di un sistema robusto, magari per
risparmiare... ;)
Ciaooo...

Genesio
Già, ma tieni presente che uno può fare una copia iniziale dell'eseguibile e
rimpiazzarlo ogni volta che "scade"...

un codice che il programmatore deve comunicare al cliente;
E' INLEGALE


Dovresti motivare le tue conclusioni.
Non credi di essere troppo generico ed evasivo dicendo che è
"INLEGALE" (illegale, credo).
Sii più preciso e partecipa più attivamente alla discussione.
Grazie.
p.s.: io non riesco più a collegarmi a Net Address via TIN (e solo via
TIN, dato che da altri provider tutto ok) da quasi un mese, e sono
stato costretto a dirottare su Geocities. A te come va?


Vorrei parlare anche io di questo argomento visto che sono parte in
causa.
Sto' realizzando un aggiornamento ad un software distribuito a livello
nazionale e che sara' distribuito tramite il canale dello shareware e di
internet.
Tale programma utilizza guarda caso la tanto discussa protezione in
questione. Non credo che ci siano problemi particolari, il pgm una volta
installato va in modalita' dimostrativa ove molte funzioni sono o
limitate o disattivate. L'utente si vedra' a video un serial number che
mi dovra' comunicare e in base a quello verra' fornito un altro codice
che appena inserito fara' funzionare il programma regolarmente. Il
problema di riformattare l'HD ?? Il 90% dei miei utenti non l'ha mai
fatto in anni che anno un PC, e se dovesse capitare con una rapida
telefonata e la comunicazione del nuovo serial number hanno subito il
codice di sblocco. Quindi...........
Saluti a tutti.

fatto in anni che anno un PC, e se dovesse capitare 
Il restante 10%, immagino, cambia direttamnte programma. Io ho
formattato l'HD quattro volte, quest'anno, grazie a W95  :-((
Obelix