LizenzschlĂŒssel in MS Access â ohne DLL, ohne Verweise
Ein kleines, in sich geschlossenes Lizenzsystem fĂŒr Microsoft Access â reines VBA, kurze signierte SchlĂŒssel mit optionalem Ablaufdatum, ganz ohne externe DLL und ohne Verweise, lauffĂ€hig unter 32- und 64-Bit.
Das Problem: Lizenzierung ohne externe AbhÀngigkeiten
Sobald man eine Access-Anwendung weitergibt, taucht dieselbe Frage auf: Wie kontrolliert man die Weitergabe und die Nutzungsdauer? Eine Demo soll nach 30 Tagen stoppen, ein zahlender Kunde soll die Vollversion nutzen â und das möglichst, ohne fĂŒr jeden Fall eine neue Datenbank auszuliefern.
Fertige Lizenzbibliotheken bringen meist eine COM-DLL oder einen .NET-Verweis mit. Das bedeutet Registrierung, Verteilung und Ărger beim Wechsel zwischen 32- und 64-Bit-Office. FĂŒr ein einzelnes Access-Frontend ist das unverhĂ€ltnismĂ€Ăig.
Das Ziel ist deshalb bewusst schlicht: eine LizenzprĂŒfung komplett in VBA, ohne Setup, ohne Verweis, auf jedem Rechner lauffĂ€hig.
Die Lösung im Ăberblick
Der gesamte Mechanismus steckt in einem einzigen Modul modLicense und einem Formular frmLicense. Das Modul enthĂ€lt SHA-256 und HMAC-SHA256 als reines VBA â ohne Declare, also ohne Bindung an eine bestimmte Bitness.
Ein SchlĂŒssel hat das Format XXXX-XXXX-XXXX: zwölf Zeichen aus dem Base32-Alphabet AâZ und 2â7, in drei Vierergruppen. Verwechselbare Zeichen wie 0/O oder 1/I kommen nicht vor. Im SchlĂŒssel steckt ein Ablaufdatum (der Wert 0 bedeutet âunbegrenztâ) sowie eine HMAC-Signatur, die eine FĂ€lschung verhindert.
Hinweis: Es ist kein Verweis nötig. Das Modul arbeitet durchgÀngig mit Late-Binding und lÀuft unverÀndert unter 32- und 64-Bit-Access.
Aufbau des SchlĂŒssels
Die zwölf Zeichen tragen 60 Bit, die sich wie folgt aufteilen:
| Feld | Bits | Zweck |
|---|---|---|
| Formatversion | 4 | Erlaubt spÀtere FormatÀnderungen |
| Ablauf | 16 | Tage seit dem 01.01.2020 (0 = unbegrenzt) |
| HMAC-SHA256 | 40 | Signatur gegen FĂ€lschung |
Beim PrĂŒfen berechnet die Datenbank die Signatur neu und vergleicht sie. Wurde auch nur ein Zeichen verĂ€ndert, schlĂ€gt die PrĂŒfung fehl.
Einen SchlĂŒssel erzeugen
CreateLicense erwartet optional ein Ablaufdatum und liefert den fertig formatierten SchlĂŒssel zurĂŒck. Ohne Datum â oder mit einem Datum am bzw. vor der Epoche â entsteht ein unbegrenzter SchlĂŒssel:
Dim sKey As String
sKey = CreateLicense(Date + 365) ' ein Jahr ab heute gĂŒltig
sKey = CreateLicense(Date + 30) ' 30-Tage-TestschlĂŒssel
sKey = CreateLicense() ' unbegrenzt (lÀuft nie ab) Das Ergebnis ist die fertige Nummer mit Bindestrichen, die direkt an den Kunden gehen kann.
Einen SchlĂŒssel prĂŒfen
ValidateLicense gibt keinen bloĂen Wahrheitswert zurĂŒck, sondern einen Status. So kann man auf jede Situation gezielt reagieren:
Select Case ValidateLicense(sKey)
Case licValid: ' alles in Ordnung â Anwendung freischalten
Case licExpired: ' abgelaufen â VerlĂ€ngerung anbieten
Case licTampered: ' manipuliert oder beschÀdigt
Case licMalformed: ' gar keine lesbare Nummer
End Select Verbleibende Tage anzeigen
FĂŒr einen Hinweis ânoch X Tage gĂŒltigâ gibt es einen Helfer. Der Wert -1 steht fĂŒr eine unbegrenzte Lizenz:
Dim lngDays As Long
lngDays = GetDaysRemaining(sKey) ' verbleibende Tage, oder -1 fĂŒr unbegrenzt RĂŒckgabewerte und Grenzen
ValidateLicense liefert einen Wert der AufzÀhlung LicenseStatus:
| Wert | Bedeutung |
|---|---|
licValid | SchlĂŒssel echt und nicht abgelaufen |
licMalformed | Keine lesbare Nummer / unbekanntes Format |
licTampered | HMAC passt nicht â gefĂ€lscht oder beschĂ€digt |
licExpired | Ablaufdatum ĂŒberschritten |
Hinweis: Die PrĂŒfung ist bewusst ausfallsicher. Tritt ein unerwarteter Fehler auf, lautet das Ergebnis licMalformed, niemals licValid â eine defekte Nummer kann die Anwendung also nie versehentlich freischalten.
Warnung: Das HMAC-Secret ist im VBA-Code eingebettet. Das schĂŒtzt zuverlĂ€ssig gegen die Weitergabe erfundener Nummern unter Kollegen, nicht gegen entschlossenes Reverse Engineering. Diese LITE-Fassung enthĂ€lt zudem Erzeuger und PrĂŒfer im selben Modul. Vor dem Produktivbetrieb unbedingt die Konstante C_LIC_SECRET durch einen eigenen, langen Zufallswert ersetzen â und den Erzeuger idealerweise nicht mit ausliefern.
Das Formular
Das mitgelieferte Formular zeigt beide Seiten auf einen Blick: oben ein Datum wĂ€hlen und erzeugen, unten eine Nummer einfĂŒgen und prĂŒfen. Es ist der ideale Ausgangspunkt fĂŒr einen eigenen Aktivierungsdialog.
Einbindung
Die Einbindung braucht kein Setup und keinen Verweis:
- Modul
modLicensein die Datenbank importieren. - Formular
frmLicenseimportieren (mit den SteuerelemententxtExpiry,btnGenerate,txtLicense,txtLicenseCheck,btnCheck,lblStatus,lblLicenseCheck). - Den mitgelieferten Selbsttest ausfĂŒhren.
TEST_modLicense_LITE Der Selbsttest prĂŒft zunĂ€chst den SHA-256-Kern gegen die offiziellen Testvektoren und macht dann einen vollstĂ€ndigen Durchlauf: erzeugen, prĂŒfen, manipulieren, unbegrenzt und abgelaufen.
Tipp: Ist der Selbsttest grĂŒn, ist alles korrekt eingebunden. Danach genĂŒgen im eigenen Code die beiden Aufrufe CreateLicense und ValidateLicense.
Download
Selbst-enthaltenes VBA-Lizenzsystem (SHA-256/HMAC + Base32) ohne DLL oder Verweise.
Voraussetzungen: Access 2016+, 32/64-bit




