Newsgroup: it.comp.programmare.win32
Titolo: Proteggere una Dll da un utilizzatore non autorizzato: come?

salve a tutti, ho il seguente problema :
devo realizzare un programma in VB del quale cederò i sorgenti e vorrei che
le dll
che il programma include possano essere utilizzate solo da QUEL programma e
che non vengano utilizzate anche per altri.
come posso fare?
grazie
CIAO



Mi sa che non è possibile, e anche se lo fosse si potrebbe modificare
il sorgente in VB per utilizzare quelle dll come si vuole.
-- 
Marco Barisione (ICQ 84277092)
Su it.news.gruppi si sta discutendo della creazione di it.comp.lang
dove si parlerà dei linguaggi senza un proprio newsgroup e dei
confronti fra i diversi linguaggi.
Se sei interessato unisciti alla discussione.

come posso fare?
Si puo' fare in modo molto semplice.
In realta' puoi comunque consentire di agganciare la tua
dll, ma rendere le funzioni contenute inutilizzabili.
Ti basta subordinare il funzionamento della DLL ad una
password precisa che le deve essere passata prima di
chiamare la prima funzione.
In sostanza: tu conservi nella DLL una password segreta
(meglio se crittata) ed esporti una funzione attivazione(p)
che accetta una password stringa ed esegue il confronto con
la password segreta.  Se il confronto e' ok, allora sblocchi
la DLL (metti un flag interno a true), altrimenti la
mantieni bloccata (tieni per default il flag interno a
false).  In ogni funzione, devi inserire il codice che
verifica se la DLL e' bloccata o meno (verificando, cioe',
che il flag interno sia true o false) e nel caso sia true
(sbloccata) procede regolarmente, altrimenti esce e non fa
niente.
-- 
Andrea Laforgia - walkietalkie(at)
libero.it

chiamare la prima funzione.
Non penso che l'OP intendesse questo, dice che distribuirà i sorgenti
del programma VB e mi sembra di aver capito che lui non voglia che la
dll sia utilizzata da chi leggerà i suoi sorgenti all'interno di un
altro programma. Seè come ho capito io è impossibile (distribuendo i
sorgenti chiunque potrà vedere la password usata), altrimenti la
soluzione di Andrea Laforgia può andare benissimo.


 wrote in
news:9pmrgv$grl$
1...@nreada.inwind.it
: 

Se distribuisci anche il sorgente completo delle DLL, credo non ci sia 
nulla da fare.
Se vuoi che non siano utilizzabili al di fuori di un certo progetto  
puoi richiamare GetModuleFileName (API) passandogli NULL (0L) come 
handle del modulo e verificare che il nome dell'EXE sia quello per cui è 
permesso l'utilizzo delle DLL.
Potresti rendere il tutto più flessibile (rendendo la DLL utilizzabile 
da più progetti "autorizzati") inserendo una "password" calcolata in 
base al nome del modulo che dovrà essere passata a una funzione di init 
(come suggeriva Andrea Laforgia) che verificherà se il nome dell'exe è 
compatibile con la chiave e abiliterà/disabiliterà di conseguenza le 
funzioni della DLL.
Ovviamente il metodo potrà essere bypassato chiamando tutti gli EXE con 
lo stesso nome (o facendo in modo che GetModuleFileName ritorni sempre 
lo stesso nome alla tua DLL), ma questo presuppone che chi genera i 
nuovi exe abbia capito che esiste una relazione tra "chiave" e nome file 
(anche se non è troppo difficile immaginarlo...).
Chi capisce anche il sistema utilizzato per generare le chiavi avrà 
libero accesso alle tue DLL da qualsiasi EXE.
-- 
Valter Minute
min...@inwind.it
 (the reply address of this message is invalid)

 (anche se non è troppo difficile immaginarlo...).
Beh, puoi complicarlo a piacere: versione del linker, dimensione
dell'eseguibile, presenza di dati a determinati offset nell'eseguibile
stesso, e così via.
Ciao,
Zello

 
E' vero, però qui si partiva dal presupposto di fornire i sorgenti 
dell'eseguibile e non credo sia molto pratico (nè per il cliente nè per 
il fornitore) generare una nuova "chiave" ad ogni ricompilazione o farsi 
passare l'eseguibile appena compilato e modificarlo per renderlo 
funzionante.
Comunque credo che in casi come questi sia fondamentale soprattutto 
tutelarsi dal punto di vista legale in modo da limitare il contratto di 
vendita solo a uno specifico utilizzo, altrimenti tutti questi 
meccanismi rischiano di diventare inutili.
Comunque se le DLL vengono riutilizzate è segno che sono fatte bene :) e 
quindi è possibile che il cliente commissioni modifiche per 
riutilizzarle al meglio...
