TKSoft-Online

Access-DB als Demo weitergeben PDF Drucken E-Mail
( 2 Votes )
MS-Access Bsp. DB's - Bsp. Downloads Sicherheit
  
Montag, den 14. Januar 2008 um 01:00 Uhr

 

Problemstellung:

Manchmal will man ein eigenes Programm erstmal nur als Demo weitergeben.
Nun ist das mit VB6 kein großes Problem.
Mit normalem MS-Access gibt es verschiedene Wege, die aber alle nicht 100 %ig sicher sind.
Grundvorraussetzung ist die Weitergabe als MDE-Datei, da ich keinerlei Programmcode sichtbar ist
und manipuliert werden kann.
Eine Lösung wäre die Anzahl von DS in einer Tabelle beschränken und diesen Wert mittels DCount zu prüfen.
Die beiden Lösungen, die hier vorstellen möchte, gehen einen etwas anderen Weg.

Ich hab mal 4 Möglichkeiten vorbereitet.

Um es aber gleich vorweg zu nehmen, es gibt keine absolute Sicherheit das dies jemand knackt.

1. DB startet nur einen bestimmten Zeitraum
1.1 Wert und Prüfung erfolgt über eine Private Property
1.2 Wert und Prüfung erfolgt über einen Eintrag in der Registry

2. DB kann nur eine bestimmte Anzahl von Starts ausgeführt werden
2.1 Wert und Prüfung erfolgt über eine Private Property
2.2 Wert und Prüfung erfolgt über einen Eintrag in der Registry

Voraussetzungen:

Das Bsp ist unter A00, AXP, A03 lauffähig, unter A07 wurde es nicht getestet.

Funktionsweise:

 

Für alle Lösungen wird das Modul „mod_Crypter“ benötigt.

Dort sind die Routinen zum Verschlüsseln der Werte enthalten.

Für die Property Lösungen wird das Modul „mod_Properties“ benötigt und für die

Registry Lösungen das Modul „mod_Registry“.

Im Download ist für jede Lösung jeweils die MDE- und MDB-Datei enthalten.

Der Prüfcode wird im Load-Ereignis des Startforms hinterlegt.

Das Passwort zum Verschlüsseln wird in der Konstanten „sPWD“, hier im Bsp „geheim“

(beliebig änderbar) im Startform gespeichert.

 

Anzahl Tage:

In den Zeitraumvarianten wird in der Konstanten „intCountDays“ die Anzahl der Testtage festgelegt,

hier im Bsp 30 Tage.

Wobei eine zurücksetzen des Systemdatums nicht unterbunden werden kann bzw. geprüft wird.

Property Version:

Im Load Ereignis des Startforms wird zuerst geprüft ob die Property, hier „Testtime“

(kann beliebig verändert werden), bereits vorhanden ist.

sValue = GetProp("Testtime")


Fehlt die Property wird sie mit dem verschlüsselten aktuellem Datum erstellt

SetProp "Testtime", dbText, Encrypt(sDate, sPWD)

Ist die Property vorhanden wird diese ausgelesen und entschlüsselt  

varTemp = Decrypt(sValue, sPWD)

dateTemp = DateSerial(Right(varTemp, 2), Mid(varTemp, 3, 2), Left(varTemp, 2
intDays = DateDiff("d", Date, dateTemp)

sValue = GetProp("Testtime")


Danach erfolgt der Vergleich des aktuellen Datums mit dem gespeicherten Wert der Property

If intDays < (intCountDays * -1) Then
        MsgBox "Testzeitraum abgelaufen"
        DoCmd.Quit
Else
        MsgBox "Sie können das Programm noch " & intCountDays + intDays & " Tage testen"
End If

 

Ist der Wert der Konstanten überschritten wird das Programm geschlossen. Die Sache hat aber einen Haken.
Nach jeder Neuinstallation des Programms fehlt die Property und der Zeitraum beginnt von vorn.
Da wäre die Lösung mit der Registry besser.

Registry Version:
Mit den Standardfunktionen aus Access „GetSetting“ und „SaveSetting“ kommt man nicht weit, da hier
nur im Standard VBA Verzeichnis gespeichert wird und die findet jeder.
Deshalb die etwas aufwendigere Lösung mittels API.
Wichtig wäre das die Schlüsselbezeichnungen keinen Hinweis auf das eigene Programm zulassen.
Im Load Ereignis des Startforms wird zuerst geprüft ob der Registryeintrag (kann beliebig verändert werden),
bereits vorhanden ist.

1. Parameter: Hauptschlüssel : z.B. HKEY_CURRENT_USER
2. Parameter: Schlüsselpfad : z.B. WinApp
3. Parameter: Schlüsselname: z.B. WinAppValue 

sTemp = fWertLesen(HKEY_CURRENT_USER, "WinApp", "WinAppValue")

 

Fehlt der Registryeintrag wird dieser mit dem verschlüsselten aktuellem Datum erstellt.

If sTemp = "" Then
    fStringSpeichern HKEY_CURRENT_USER, "WinApp", "WinAppValue", sValue


Ist der Registryeintrag vorhanden wird diese ausgelesen und entschlüsselt.

sDateTemp = Decrypt(sTemp, sPWD)
dateTemp = DateSerial(Right(sDateTemp, 2), Mid(sDateTemp, 3, 2), Left(sDateTemp, 2))
intDays = DateDiff("d", Date, dateTemp)


Danach erfolgt der Vergleich des aktuellen Datums mit dem gespeicherten Wert des Registryeintrags

If intDays < (intCountDays * -1) Then
   MsgBox "Testzeitraum abgelaufen"
   DoCmd.Quit
Else
   MsgBox "Sie können das Programm noch " & intCountDays + intDays & " Tage testen"
End If


Ist der Wert der Konstanten überschritten wird das Programm geschlossen.

 

Anzahl Programmstarts:
Die Festlegung der Konstanten für das Verschlüsselungspasswort ist die Gleiche wie oben.
In den Programmstartvarianten wird in der Konstanten „intCountStart“ die Anzahl der Programmstarts festgelegt,
hier im Bsp 30 Tage.
Die Konstante „intFactor“ ist als Faktor für Verschlüsselung gedacht, hier im Bsp 221.
Es ist darauf zuachten das die Multiplikation der beiden Konstanten nicht den Wertebereich des
IntegerTyps, also 32768, nicht überschreitet.
Property Version:
Im Load Ereignis des Startforms wird zuerst geprüft ob die Property, hier „CountStart“ (kann beliebig verändert werden),
bereits vorhanden ist.

sValue = GetProp("CountStart")


Fehlt die Property wird sie mit dem Wert 1 * dem Faktor verschlüsselt erstellt.

If fProp = False Then
    intValueTemp = 1 * intFactor
    SetProp "CountStart", dbText, Encrypt(CStr(intValueTemp), sPWD)


Ist die Property vorhanden wird diese ausgelesen und entschlüsselt und um den Wert 1 erhöht.
Der neue Wert wird gleich wieder verschlüsselt in die Property zurück geschrieben

sValueTemp = Decrypt(sValue, sPWD)
intValueTemp = CInt(sValueTemp) / intFactor
intValueTemp = intValueTemp + 1
SetProp "CountStart", dbText, Encrypt(CStr(intValueTemp * intFactor), sPWD)


Danach erfolgt der Vergleich mit dem Wert der Konstanten für die max. Anzahl der Starts mit dem
gespeicherten Wert der Property.

intDiff = intCountStart - intValueTemp
If intDiff < 0 Then
     MsgBox "Testzeitraum abgelaufen"
     DoCmd.Quit
Else
     MsgBox "Sie können das Programm noch " & intDiff & " mal starten"
End If


Ist der Wert bei 0 angekommen wird das Programm geschlossen.
Die Sache hat aber auch hier den gleichen Haken.
Nach jeder Neuinstallation des Programms fehlt die Property und die Zählung beginnt von vorn.

Registry Version:
Hier gelten die gleichen Regeln bzw. Hinweise wie bei der Zeitraumvariante.
Die benötigten Konstanten sind die gleichen wie in der Propertyvariante.
Im Load Ereignis des Startforms wird zuerst geprüft ob der Registryeintrag (kann beliebig verändert werden),
bereits vorhanden ist.
1. Parameter: Hauptschlüssel : z.B. HKEY_CURRENT_USER
2. Parameter: Schlüsselpfad : z.B. WinApp
3. Parameter: Schlüsselname: z.B. WinAppStart

sTemp = fWertLesen(HKEY_CURRENT_USER, "WinApp", "WinAppStart")


Fehlt der Registryeintrag wird dieser mit dem Wert 1 * dem Faktor verschlüsselt erstellt.

If sTemp = "" Then
    intValueTemp = 1 * intFactor
    sValue = Encrypt(CStr(intValueTemp), sPWD)
    fStringSpeichern HKEY_CURRENT_USER, "WinApp", "WinAppStart", sValue
    intValueTemp = 1


Ist der Registryeintrag vorhanden wird dieser ausgelesen und entschlüsselt und um den Wert 1 erhöht.
Der neue Wert wird gleich wieder verschlüsselt in den Registryeintrag zurück geschrieben.

sValueTemp = Decrypt(sTemp, sPWD)
intValueTemp = CInt(sValueTemp) / intFactor
intValueTemp = intValueTemp + 1
sValue = Encrypt(CStr(intValueTemp * intFactor), sPWD)
fStringSpeichern HKEY_CURRENT_USER, "WinApp", "WinAppStart", sValue


Danach erfolgt der Vergleich mit dem Wert der Konstanten für die max. Anzahl der Starts mit dem gespeicherten
Wert der Registry.

intDiff = intCountStart - intValueTemp
If intDiff < 0 Then
     MsgBox "Testzeitraum abgelaufen"
     DoCmd.Quit
Else
     MsgBox "Sie können das Programm noch " & intDiff & " mal starten"
End If


Ist der Wert der Konstanten überschritten wird das Programm geschlossen.

Um bei Testzwecken die Properties bzw. Registryeinträge zu löschen geht man so vor:
Für Registry:
In eine beliebige Access-DB das Modul „mod_Registry“ kopieren und daraus die Sub „fWerteLoeschen“ aufrufen.
z.B.:

fWerteLoeschen HKEY_CURRENT_USER, "WinApp", "WinAppValue"


Aufgrund dieser Lösung ist es erforderlich das andere Pfade als in dem Bsp verwendet werden.
Es kann nur der Schüssel gelöscht werden wenn dieser bekannt ist.

Für Property:
In eine beliebige Access-DB die folgende Sub kopieren:

Public Sub DeleteProp(strDBPfad As String, strProp As String)
'*******************************************
'Name:      GetProp (Sub)
'Purpose:   Auslesen von Datenbank Einstellungen
'Author:    Thomas Keßler
'Date:      Dezember 15, 2002, 11:00:15
'Inputs:    strDBPfad = Datenbank mit komplettem Pfad, strprop= Die Eigenschaft die 
'           gelöscht werden soll

'*******************************************
Dim wsp As DAO.Workspace
Dim db As DAO.DATABASE

On Error GoTo Err_Prop
    Set wsp = DBEngine.Workspaces(0)
    Set db = wsp.OpenDatabase(strDBPfad)
    
    db.Properties.Delete (strProp)
    db.Close

    GoTo Err_Ende

Err_Ende:
    Exit Sub
Err_Prop:
    If Err.Number = 3270 Then
        Exit Sub
  Else
        Dim strErrString As String
        strErrString = "Error Information..." & vbcrlf
        strErrString = strErrString & "Error#: " & Err.Number & vbcrlf
        strErrString = strErrString & " Description: " & Err.Description & vbcrlf
        MsgBox strErrString, vbCritical + vbOKOnly, _
               "Error in Modul mod_Property in Sub: GetProp"
        Resume Err_Ende
    End If
End Sub



Der Aufruf sähe z.B. so aus:

DeleteProp "C:\DeinPfad\DeineDB.mdb", "Testtime"


Auch hier gilt andere Bezeichnungen zu verwenden, denn es kann nur gelöscht werden wenn der Name der Property bekannt ist.

Fazit:
Die Registryvariante ist sicherer als die Lösung mittels Property.

Ich übernehme aber keinerlei Haftung, für entstandene Schäden durch die Verwendung dieses Beispiels und/oder durch Dritte



Access-DB als Demo weitergeben

Access-DB als Demo weitergeben,
wahlweise mit Zeitlimit oder Anzahl der Programmstarts
für A00-A03, A07 nicht getestet

Die Zip-Datei enthält eine Version ab A00




Erstellt am
Dateigröße
Downloads
10.01.2008
225.74 KB
2517


Downloads in dieser Kategorie

MS-Access Sicherheit

MS-Access Sicherheit

 Seite: 1



DatumKlicks
Total4860
Mi. 232
Di. 224
Mo. 213
So. 206
Sa. 194
Fr. 187
Do. 174
Aktualisiert ( Mittwoch, den 19. Oktober 2011 um 12:53 Uhr )
 

Kommentar schreiben


Sicherheitscode
Aktualisieren

Login

Latest Comments

Latest Forum Posts

Mehr »

Download Statistik

41 Kategorien
187 Dateien
173444 Downloads