Newsgroup: it.comp.appl.access
Titolo: proteggere database - seriale dell'hd

ciao
discussione gia affrontata..lo so..chiedo solo un chiarimento
come fanno molti vorrei proteggere il db access tramite il seriale 
dell'hd del cliente
pensavo di ricavare il seriale e poi calcolarne l'hash md5..in modo da 
dare una protezione e difficolta in piu.
Tale numero e' dunque univoco per quel hd (piu o meno).
Ora...cosa mi conviene fare per implementare questa protezione?
Prima di tutto...il codice corretto lo inserisco in una tabella o nel 
codice vb? qual'e' la soluzione piu difficile da crakkare? (ovviamente 
si presuppone che abbia compilato il codice e creato l'mde)
Poi.. come gestisco la distribuzione del db?
Ovviamente occorre conoscere prima il seriale del cliente..in modo da 
creare il db ad hoc
Potrei creare un .exe scaricabile da internet che calcoli il codice...in 
modo che il cliente lo esegua e mi comunichi il codice per telefono....e 
poi gli mando il db ad hoc senza andare li..giusto?
nel caso il seriale cambi..per vari motivi...ripeto la procedura e mando 
al cliente il nuovo FE...che eseguira l'importazione dei dati..presenti 
nelle veccchie tabelle..del vecchio db
commenti e offese graditi :))
ciao

 codice vb? qual'e' la soluzione piu difficile da crakkare? 
forse questo non da differenza... se io mixo il seriale dell'hd con un 
altro dato (data di attivazione...etc)
Infatti io salvo nel db (tabella o codice che sia) questo hash del 
codice seriale..quindi anche se lo smanettone legge nella tabella tale 
codice non sarebbe capace di calcolare il codice per il nuovo pc su cui 
si vuole usare il db.
in sintesi...se non si capisce il metodo di calcolo...non si puo 
calcolare il codice adeguato per i nuovi pc (pirata)....quindi a questo 
punto non serve tanto l'md5...quanto piuttosto un mix tra seriale e 
altri dati (es: data orierna)
ciao

 ha scritto nel messaggio
news:neMJd.455576$b5.21...@news3.tin.it...

Provad andare sul Sito Comune (link qui sotto) e nella Sezione General leggi
la FAQ di Giacomo Arena intitolata "Come impedire la copia degli applicativi
usando il numero seriale dell' hard disk.".
-- 
Roberto
-----------------------------------------------------
il Sito Comune di it.comp.appl.access
http://www.sitocomune.com
----------------------------------------------------

 usando il numero seriale dell' hard disk.".
mi pare di ricordare che quel db mostri soltanto come ricavare il seriale
e decidere l'apertura del db di conseguenza (cosa che gia ho imlpementato
nel mio db)..
mi interessava piu che altro capire
1) e' meglio memorizzare il seriale corretto in tabella o nel codice vb?
2) e' corretta la tecnica che penso...cioe di calcolare il codice seriale
del hd del cliente...e poi creare un db ad hoc per quel cliente...con
dentro il suo codice seriale ?
3) e' corretto fare un mix tra il seriale e un altro parametro (es: data
odierna) e usare il risultato come codice di verifica? 
in questo modo anche se uno smanettone legge il seriale all'interno del
mio db (ad es tramite un editor esadecimale) non saprebbe che codice
inserire(sempre tramite editor esadecimale)  per usare il db in un altro
pc.
thanks
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 usando il numero seriale dell' hard disk.".


 thanks
Prego


 digitato nella password ed è del tutto ininfluente se è conosciuto o meno.
infatti non prevedo l'immissione di password.
Pero se uno smanettone apre il db con un editor esadecimale....capisce che
io uso il codice seriale dell hd(come fanno molti) e sostituisce nel file
(sempre tramite l'editor hex) il seriale del nuovo computer su cui vuole
usarlo....capisci bene che diventa facilmente craccabile.
mentre se il codice e' calcolato con un minimo di algoritmo basato sul
seriale del hd...ovviamente lo smanettone non conoscendo tale
algoritmo..non puo capire che codice usare per il nuovo pc.
a presto


 ha scritto nel messaggio
news:ct8keh$1en$1...@news.newsland.it...

ciao a tutti ho una domanda da farvi,
ma la seriale dell'hard disc è solo un valore numerico o può contenere
anche testo?
grazie

 odierna) e usare il risultato come codice di verifica?
Volendo... Tieni sempre però conto del rapporto costi / benefici dei sistemi 
di protezione: se 
p.es
. si tratta di un applictivo piuttosto specifico le 
probabilità che qualcuno lo copi sono ridotte (dovrebbe essere qualcuno che 
ha le stesse identiche esigenze del primo committente), che riesca a farlo 
andare senza un tuo supporto anche minori, e il tempo che ci perdi a 
proteggere non è detto che sia ripagato. Vale sempre la regola del furto 
d'auto: se hanno deciso di fregarti la macchina, non ci sono antifurti che 
tengano. Perciò curati di avere un dispositivo poco costoso che ti metta al 
riparo dai ladruncoli occasionali, e per gli altri mettiti il cuore in pace. 
Questo dovrebbe rispondere anche alla domanda se sia corretto o meno creare 
un db per ogni cliente: più che di correttezza si parla di opportunità, 
valuta attentamente gli sbattimenti necessari in questo caso per 
l'assistenza post-installazione e, tratte le conclusioni del caso, se 
risulta che ne valga la pena fallo.
Se però le installazioni le curi tu direttamente ti consiglio di rendere 
queste ultime anti-copia inserendo parametri vitali per il programma in file 
non modificabili direttamente: immagina di stampare fatture (tanto per fare 
un esempio) prelevando i dati di intestazione come ragione sociale e partita 
iva di chi le emette da una tua dll o da un tuo ocx, tanto per andare sul 
fantasioso, anche copiandolo non è che uno può emettere fatture col nome di 
un altro!
IG

 IG
Mi inserisco nella discussione, 
sarebbe interessante avere una spiegazione piů specifica per creare e
gestire informazioni in una dll o in un ocx....
Potresti essere piů dettagliato????
Grazie
-- 
Raffaele Alberoni



diciamo che non ho ancora definito tutto, però più o meno sarà così,
c'è una tabella chiave con 1 solo campo,
alla prima apertura questo campo è vuoto e viene visualizzata una
maschera
di input
digitare il codice di sblocco
il codice di sblocco dovremo darlo noi ogni volta ad ogni singolo
utente,
tranne se il db viene installato sullo stesso hd
il codice di sblocco corrisponderà a una formula nascosta nel codice
esempio
codice di sblocco = numero hd +1000 *2 -587000
il valore digitato verrà salvato nella tabella chiave e verrà chiuso
comunque il db
alla successiva riapertura trovando la tabella chiave con un campo, se
il
codice è giusto apre il db se è sbagliato lo chiude subito.
l'utente non dovrà fare altro che chiamarci telefonicamente dirci il
numero
che comparirà nella maschera di input e noi con la formula nascosta nel
suo
db avendo un'altro db (genera codice) gli daremo il codice di sblocco...
ciao

 Potresti essere più dettagliato????
Beh... per una dll nell'esempio esposto basta crearne una cretina con dentro 
una funzione che copi in una stringa vuota il valore (fisso, in questo caso) 
da ritornare al programma VB. Vediamo un esempio minimo in C (nello 
specifico per il compilatore MinGW, che è gratuito), in cui preleviamo una 
costante di tipo stringa:
Sorgente: dll.h
--------------
#include "windows.h"
#if BUILDING_DLL
# define DLLIMPORT __declspec (dllexport)
#else
# define DLLIMPORT __declspec (dllimport)
#endif
/* Quella che segue è la definizione della funzione
    che poi userai in VBA, e che prende una stringa
    come parametro
*/
DLLIMPORT void WINAPI SetRagioneSociale (char *);
// FINE dll.h
Sorgente: dllmain.c
-------------------
#include "dll.h"
#include "string.h"
// Implementazione della funzione
DLLIMPORT void WINAPI SetRagioneSociale (char *Destinazione)
{
    /* Copia in Destinazione la stringa costante "Tizio Caio s.p.a." */
    strcpy (Destinazione, "Tizio Caio s.p.a.");
}
/* DllMain viene richiamata da Windows in diverse occasioni che
    a noi non interessa gestire.
*/
BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
{
    return TRUE;
}
// FINE dllmain.c
Compili la dll:
gcc.exe -c dllmain.c -o 
dllmain.o -I"/percorso/di/mingw/include" -DBUILDING_DLL=1 -Wall
dllwrap.exe --output-def libMiaDll.def --implib libMiaDll.a 
dllmain.o -L"/percorso/di/mingw/lib" --noexport-all-symbols --add-stdcall-alias 
 -o MiaDll.dll
e la copi in %windir%\System32
Poi da VBA la adoperi come segue: in un modulo metti
Public Declare Sub SetRagioneSociale Lib "MiaDll.dll" (ByVal RagSoc As 
String)
e quando la devi usare:
Dim RagSociale As String*200 ' Crea una stringa vuota di 200 caratteri. Deve 
essere almeno 1 + Len(contenuto)
SetRagioneSociale RagSociale  ' Richiami la dll che imposta il valore
In questo modo la tua ragione sociale viene prelevata dalla dll. In questo 
caso chiaramente basta un editor per file binari un po' decente per 
cambiarla ma prima devi sapere che è li dentro e non potrai metterne una più 
lunga di quella attuale. Offusca un po' la stringa nel sorgente C in modo 
che non sia in chiaro e ai più passerà la voglia di provare a cercala o 
modificarla.
Per gli ocx la procedura è anche più semplice, ma devi avere o Visual Basic 
o Office Developer (che consente di creare ocx): usando l'apposito wizard in 
pratica crei una specie di modulo di classe con proprietà e metodi, compili 
l'ocx, lo registri nel sistema (regsvr32 nome.ocx), e lo istanzi dal codice 
VBA in Access:
Dim MioOcx As Variant
Set MioOcx = CreateObject("NomeOggetto")
RagioneSociale = MioOcx.ProprietàCheRestituisceLaRagioneSociale
IG

 ha scritto nel messaggio
news:ct8m30$6q3$1...@news.newsland.it...

L'esempio del Sito Comune prsupponeva che la prima installazione la facessi
tu presso il cliente, quindi ti cautelavi dal fatto che database venisse poi
copiato su altri computer.
Penso che nel tuo caso tu dovresti proteggere con una chiave hardware: anche
su questo problema trovi una FAQ nella Sezione General del Sito Comune.


 IG
Grazie mille per il tuo prezioso e completo suggerimento.
Ciao e buon lavoro.


 da ritornare al programma VB. 
perdonami, ma cosi cambia poco (a livello di sicurezza) dal mettere 
direttamente le intestazioni nel codice vb.
Mi spiego: se lo smanettone usa un edito esadecimale per visualizzare (e 
modificare!) i dati (in questo caso l'intestazione da stampare nella 
fattura)....puo farlo benissimo sia con il codice vb che con una dll che 
crei tu.
Ovvio che usare una dll esterna resta cmq una coomplicazione in piu per 
lo smanettone...ma diciamo che non crea un vero elemento di difficolta 
in piu.
saluti . buon lavoro

 
e' esattamente cio che dicevo anche io.
Il fatto di avere un algoritmo (anche stupido) che dal seriale genera il 
codice di sblocco...fa si che anche se uno smanettone legge nel db (o 
nel codice vb) il codice di sblocco....NON SAPREBBE calcolare un codice 
che vada bene su un altro pc...NON conoscendo l'algoritmo!
da notare ovviamente che a questo punto..se uno e' capace di aprire un 
db con un editor esadecimale e cercare i codici di sblocco in giro per 
il codice vb....a sto punto e' anche capace di trovare l'istruzione "if" 
che fa il controllo del codice...e bypassarla in 5 minuti
quindi alla fine...codice seriale dell hd o altro metodo..vanno 
bene...ma rompersi le palle di piu di cosi con altri algoritmi o altri 
metodi piu complessi NON VALE proprio la pena...perche si tratta pur 
sempre di qualche istruzione IF da bypassare.
ciao

 iva di chi le emette da una tua dll o da un tuo ocx,
per questo discorso ti ho risposto qualche post piu in basso....
ciao e grazie 1000

 crei tu.
Ti ripeto il mio dubbio: lo smanettone vero, che per definizione ha tempo 
perdere, fantasia, capacità e intenet con documentazione a palate su tutte 
le sporche di protezione più comuni, riuscitrà SEMPRE a trovare il modo di 
copiarti il programma, ogni trucco non farà che rimandare - spesso di poco - 
l'inesorabile. Preoccupati più del wannabe smanettone, e fai in modo che 
scopra che il tempo che perde è equivalente o superiore, come costo, 
all'acquisto dell'originale!
IG

 su questo problema trovi una FAQ nella Sezione General del Sito Comune.
l'alternativa di usare il seriale dell hd e' tanto valida quanto la 
chiave hardware , infatti in tutti e due i casi il funzionamento del 
programma e' legato a quel pc(o chiave)...anzi col seriale non fai 
nemmeno la spesa per la chiave.
la chiave hardware e' forse una raffinatezza che fa tanto 
professional...ma in sostanza la sicurezza in piu non sembra esserci
I due metodi  hanno la stessa identica debolezza...cioe' un eventuale 
crack eseguito tramite l'eliminazione delle istruzioni che effettuano il 
controllo (del seriale..dell codice..chiave hardware o impronta digitale 
o retinea che sia:)) )
ciauuuuuuuuuuu

 copiarti il programma, 
questo e' un dogma su cui nessuno sano di mente obbietterebbe
grazie dellla conversazione e dell'utile scambio di osservazioni
a presto

 ha scritto nel messaggio
news:PldKd.462619$b5.21...@news3.tin.it...

però mi è sorto un dubbio
se per caso il nostro utente effettua regolari copie di bakup su cd rom,
gli si guasta il disco fisso, noi riusciamo a recuperare i dati del
database.
un'altra domanda
si può avere un db diviso dati e maschere ma nel db maschere avere una
tabella propria per memorizzare il codice ?

 ciauuuuuuuuuuu


 sull'altro pc nuovo..
In effetti l'uso di almeno un altro parametro è assolutamente 
consigliabile: ho voluto fare un test: in meno di 5 minuti con google ho 
trovato un tool a linea di comando gratuito che, in un eseguibile di 
13K, permette di modificare il seriale di partizioni Fat32 e Ntfs senza 
colpo ferire!!
A proposito di protezioni: funziona solo su Ntfs (e per attivarla devi 
collegare il drive a un pc con Xp), ma senti questa che ho ideato io, e 
che sebbene facile da aggirare richiede almeno conoscenze avanzate di 
winzoz, nonché un certo colpo d'occhio:
Pochi lo sanno, ma con Xp è disponibile un tool a linea di comando per 
il maneggio del filesystem che permette di creare degli hard link. Un 
hard link (se hai manegiato Unix/Linux almeno qualche volta lo hai già 
incontrato, insieme a quello "soft") è una entry di directory che punta 
ad un file gia presente. Il file è uno solo, ma è presente 2 volte (o 
anche di più) nel filesystem, magari in directory diverse. Vuoi fare 
qualche esperimento?
Crea un file 
p.es
. di testo, diciamo pippo.txt, poi da linea di comando 
(sotto Xp su partizione Ntfs) dai un bel
fsutil hardlink create Doppione.txt pippo.txt
e ti ritrovi Doppione.txt con uguali dimensioni e data di pippo. Adesso 
apri pippo e modificalo, salvalo e apri doppione... già! è proprio lo 
stesso file! Infatti prova a dare
fsutil objectid query pippo.txt
e poi fai lo stesso col doppione: stessi ID! Però prova adesso a 
copiarli, anche assieme: ottieni due file distinti. Quindi per 
verificare se è l'originale basta scrivere su uno leggere sull'altro: se 
la modifica si propaga non è una copia. Se poi magari i link sono 4 o 5, 
e li adoperi scrivendo e leggendo a caso da non più di due per volta...
Qualche precisazione: due entry di directory che puntano allo stesso 
file sono indistinguibili, non è che l'originale abbia qualche 
privilegio speciale e un file non viene cancellato dal disco fintanto 
che ci sono link che lo puntano, quindi un "del doppione.txt" non ha 
effetti su pippo.txt
Anche questa, come il seriale del disco non è insuperabile (basta un 
clone della partizione per fregarle entrambe assieme), ma nel mazzo...
IG