Newsgroup: it.comp.appl.access
Titolo: Database a scadenza

Per evitare noie (lavoro fatto e non pagato),
avevo pensato ad una soluzione e vorrei un vostro parere.
Ho creato la tabella SCADENZA con il campo: Data_Scadenza in cui inserisco
un unico record che rappresenta la data della scadenza del mio programma.
All'apertura del database confronto la data attuale con quella presente
nella tabella SCADENZA.
Se Now() è maggiore della data di scadenza il database è scaduto quindi
scrivo una MsgBox ed esco da access,
in caso contrario apro la maschera principale del database.
Il problema è che la tabella non deve poter essere accessibile a nessuno
quindi ho pensato subito a disabilitare
il famoso tasto shift.
Sul sito comune ho letto che l'uso di tale metodo è sconsigliato.
Sapete dirmi perchè?
Che ne pensate della mia idea?
Avete qualcos'altro da consigliarmi?
Grazie a tutti!!

 [cut]
Private Sub Form_Load()
Dim TextLine, caldata, oklccheck, okfold, pathlic, slash
shareware.ForeColor = RGB(0, 0, 0)
pathlic = "c:\windows\system"
'*****  controllo presenza directory di lavoro
Call solo_checkfolder(pathlic, okfold)
If okfold = True Then
'*****  controllo presenza file licenza
    Call solo_checkfile("lc.dll", pathlic, oklccheck)
        If oklccheck = True Then
            Open pathlic & "\" & "lc.dll" For Input As 1
            Do While Not EOF(1)    ' Ripete fino alla fine del file.
            Line Input #1, TextLine    ' Assegna la riga a una variabile.
            Debug.Print TextLine    ' Scrive nella finestra Immediata.
        Loop
        Close #1    ' Chiude il file.
        ' ----  licenza corretta definitiva OK
            If Right(TextLine, 2) = Chr(126) & Chr(88) Then
            okLC = "True"
            shareware.ForeColor = RGB(0, 127, 0)
            shareware = "Illimitata"
            Exit Sub
            Else
        ' ----  licenza corretta definitiva NO
        ' ----  valutazione del tempo shareware
            caldata = Mid(TextLine, 2, 2) & "/" & Mid(TextLine, 5, 2) & "/"
& Mid(TextLine, 8, 2) & Mid(TextLine, 11, 2)
                If DateValue(Now()) > DateValue(caldata) Then
                    Call barra(pathlic, slash)
                    Kill pathlic & slash & "lc.dll"
                    okLC = "False"
                    GoTo finelicenza
                End If
            okLC = "True"
            shareware = caldata
            MsgBox "Il programma non è ancora stato registrato." & vbCr &
vbCr & "In data " & caldata & " scade la licenza provvisoria," & vbCr & "che
renderà il programma non più funzionante." & vbCr & vbCr & vbCr &
"Contattare il fornitore del Software per la licenza definitiva.",
vbInformation, "Avviso..."
            End If
        Else
finelicenza:
        okLC = "False"
        shareware = "Scaduta"
        shareware.ForeColor = RGB(255, 0, 0)
        MsgBox "Il tempo di Valutazione Software è Scaduto, per continuare
ad usare il programma acquistare la licenza d'uso definitiva",
vbInformation, "Licenza d'uso scaduta"
        pls_entra.Visible = False
        End If
End If
End Sub
questo è una parte del codice di ricerca protezione...
le altre routine sono queste
Public Function solo_checkfile(checknome, directory, fileesiste)
Dim fs, f, f1, fc
Dim risp
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFolder(directory)
    Set fc = f.files
    For Each f1 In fc
        If 
f1.name
 = checknome Then
        fileesiste = True
        Exit Function
        End If
    Next
    fileesiste = False
End Function
Public Function solo_checkfolder(checkdir, pathesiste)
On Error GoTo errori
Dim risp
ChDir checkdir
pathesiste = True
Exit Function
errori:
    If Err.Number = 76 Then
    pathesiste = False
    End If
End Function
per la maschera che contiene il codice ve la invio in privato e la mando poi
anche sul sito comune.


Scusa ma allora basta copiare il file di licenza su tutti i computer che
usano il programma
e si sbloccano tutti.
Se conosco qualcuno con lo stesso programma gli passo il file e gli si
sblocca anche il suo!
AEOM



Io ho risolto così: la data impostata nella tabella non è in chiaro ma
viene codificata tramite l'utilizzo della funzione Instr() e
confrontata con una stringa fissa di nove caratteri all' interno del
codice. Ad esempio:
stringa fissa = ACKDWZZLR
chiave di attivazione =KAACCTPK
Eseguendo una routine che scorre carattere per carattere la chiave di
attivazione ed applicando la funzione Instr() utilizzando come stringa
di confronto la stringa fissa ottengo la seguente stringa = '31122003'
dalla quale è molto facile ricavare una data. A questa poi aggiungo un
numero di mesi fisso (sempre cablato nel codice) ed ottengo la data di
scadenza da confrontare con la data del giorno.
Cosi' facendo e salvando il codice dentro un file mde o ade, in modo
che non sia visualizzato, anche se la chiave di attivazione dentro la
table risulta leggibile è difficile capire come è codificata. Inoltre
basta spedire al cliente un file batch che esegua l'aggiornamento,
tramite comandi SQL del campo della tabella per sbloccare la
procedura. Se qualcuno è interessato mi faccia sapere che gli spedisco
il codice completo.
Pasqualini Roberto


Se:
1) distribuisci il file in formato mde;
2) usi in una tabella "importante" un campo data che non può essere vuoto
e/o inferiore alla data di sistema;
3) compili tale campo tramite un controllo che non può accettare una data
inferiore a quella di sistema;
4) stabilisci che tale controllo non può assumere un data maggiore della
data di scadenza del programma;
Hai una garanzia sufficiente che alla scadenza l'utente non potrà utilizzare
una funzione importante del tuo programma.
Naturalmente sono valide tutte le altre strade più sofisticate.
Ciao, Angelo.

 ha scritto nel messaggio
news:agcl95$nes$1...@lacerta.tiscalinet.it...

Devi però controllare almeno il numero di serie dell'hard disk altrimenti un
oscompra la licenza e passa il programma a tutti gli altri.
AEOM

 (.....)
Stai *molto* *molto* *molto* attento !
Una pratica del genere, se scoperta dal tuo cliente, ti espone al
rischio di essere denunciato per danni, con conseguente probabile
addebito dei medesimi nei tuoi confronti.
Quindi rischi oltre al danno (non vederti pagato il lavoro) anche la
beffa (pagare tu i danni al cliente).
Se proprio vuoi fare una cosa del genere cerca di farla nella maniera
piů "pulita" possibile, ovvero:
evita di bloccare la procedura con messaggi del tipo "Il programma
risulta bloccato per insoluto" preferendo invece messaggi del tipo
"Errore generale di protezione X28AF13FF3r49K. Se il problema persiste
rivolgersi al fornitore."
nascondi il meglio possibile i parametri il cui valore determina il
blocco della procedura (per es. memorizzali nel registry in forma
criptata e dentro chiavi con nomi incomprensibili).
Vincenzo Turturro
---------------------------------------------
il sito comune di it.comp.appl.access:
http://www.sitocomune.com/
---------------------------------------------
E quello di it.comp.as400:
http://www.faq400.com/
---------------------------------------------

 Grazie a tutti!!
Il problema é che non riuscirai MAI PIÙ ad "entrare" nel codice del Db.
DEVI quindi assicurarti di fare sempre una copia della versione che
consegnerai e proteggere quella. Il giorno che sbaglierai, ti rimangerai
le diatta una per una!!!!!
Guardate questo sito: 
http://www.globetrotter.com/
Questi signori hanno un software di "licensing"  (anche di "pay per
use") molto efficace che vedo in uso in alcuni pacchetti molto "tosti".
Non ho idea di quanto costi!
Gilberto
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG