# SystemLocker 1.0.48 - Release Notes (2026-07-17)

Passwortloser Windows-Login per SystemLocker-Dongle, optionaler Nur-Dongle-Login und BitLocker-Einrichtung.
TB-Software - Timo Boehme - info@tb-software.ch

## Inhalt dieses Releases

- `App/SystemLocker-Einrichtung.exe` - WPF-Einrichtungsassistent, self-contained fuer Windows 10/11 x64.
- `App/SystemLockerCP.dll` - Windows Credential Provider fuer den Login per SystemLocker-Dongle.
- `App/SystemLockerService.exe` - SYSTEM-Dienst fuer Dongle-Freigabe des Windows-Login-Secrets.
- `App/DongleCheck.exe` - Diagnose-Tool fuer SystemLocker-Dongle/API.
- `App/SLDongle.dll` - Dongle-Laufzeitbibliothek.
- `Treiber-nur-im-Notfall/` - USB-Treiber (nur Notfall) nur falls HID/treiberlos nicht funktioniert.
- `index.html`, `Anleitung.html`, `LIESMICH.txt`, `SHA256SUMS.txt`, `SIGNING_STATUS.txt`.

`DongleGuard.exe` ist nicht Teil des normalen Release-Pakets. Die optionale Sperre beim Abziehen des Dongles laeuft, falls aktiviert, im SYSTEM-Dienst ueber `LockOnRemoval`.

## Neu / aktueller Stand
- **Domänen-Anmeldung funktioniert jetzt (wichtig):** Bisher war die Domäne fest auf „lokal" verdrahtet und der Passwortwechsel lief über `net user` – das kennt nur lokale Konten. Ein Domänenbenutzer konnte sich deshalb NICHT per Dongle anmelden. Jetzt erkennt der Assistent das Konto (Lokal / Domäne / Azure-AD), schreibt die echte Domäne in den Login und ändert das Passwort über `NetUserChangePassword` – lokal wie in der Domäne, ohne Adminrechte.
- **Konto wird angezeigt und ist änderbar:** Läuft der Assistent „als anderer Administrator", stand vorher dessen Konto im Login. Das Zielkonto (z. B. `CONTOSO\marcel`) ist jetzt sichtbar und korrigierbar.
- **Passwort-Richtlinie wird vorab geprüft:** Darf das Konto sein Passwort ändern, läuft alles wie beim lokalen Konto (neuer Schlüssel wird gesetzt). Darf es nicht (Richtlinie/Azure-AD), bietet der Assistent nur noch „Aktuelles Passwort behalten" an – und sagt warum.
- **Aktuelles Passwort wird immer geprüft**, bevor etwas geändert wird. Schlägt der Wechsel fehl, werden Blob, Konfiguration **und die Recovery-Datei** zurückgerollt – es bleibt keine Recovery-Datei mit einem Passwort liegen, das nie aktiv wurde.
- **Dongle-Status am Login bleibt aktuell:** Der Credential-Provider-Cache wird bei unbekanntem oder altem Status kurz nachgeprueft. Der Watcher endet nicht mehr beim ersten `ready`, sondern meldet auch `ready -> not ready`; dadurch bleibt die Login-Kachel nach Abziehen des Dongles nicht faelschlich auf "bereit".
- **Credential Provider blockiert den LogonUI-Thread nicht mehr:** `GetCredentialCount`, `SetSelected` und die Kachel-Textabfrage lesen nur noch den letzten bekannten Dongle-Status aus einem Cache. Die bis zu 3 Sekunden dauernde Pipe-/Dienst-Pruefung laeuft im Watcher-Thread. Der `CredentialsChanged(...)`-Callback wird jetzt per COM-Marshalling aufgerufen, passend zu `ThreadingModel=Apartment`; beim Stoppen des Watchers wartet der STA mit `CoWaitForMultipleHandles(..., COWAIT_DISPATCH_CALLS, ...)`, damit LogonUI nicht durch einen COM-Rueckruf einfrieren kann.
- **Auto-Login nach Dienststart nachgezogen:** Der Credential Provider speichert jetzt die LogonUI-Events aus `Advise(...)`, prueft kurz im Hintergrund, ob der SYSTEM-Dienst/Pipe/Dongle erst nach der ersten Enumeration bereit wird, und loest dann `CredentialsChanged(...)` aus. Dadurch kann LogonUI die Kachel erneut abfragen und den Dongle-Auto-Login starten, ohne dass der Benutzer manuell klicken oder neu starten muss.
- **Bestehende Installation wird bei einem Fehler nicht mehr beschädigt:** Scheitert beim erneuten Einrichten das Aktivieren von Blob/Config, wird jetzt auf den Vorzustand zurückgerollt (vorher konnte der alte Dongle-Login zerstört werden). Blob und Config werden zudem atomar ersetzt statt gelöscht-und-neu-geschrieben.
- **Seriennummer wird endlich angezeigt:** Die Dongle-Erkennung las die Seriennummer ohne UserCode aus – der Dongle gibt sie so aber nicht heraus, weshalb überall „0"/„n/a" stand (Assistent, Logs, Provisionierungs-Record, Cloud-Sicherung). Jetzt wird der im Produkt hinterlegte UserCode verwendet; auf echter Hardware verifiziert.
- **Aussperr-Schutz beim Enrollment (Codex P1, wichtig):** Der Login-Pfad (Blob + Config) wird jetzt **zuerst** aktiviert und verifiziert – erst **danach** wird das Windows-Passwort gesetzt. Schlägt der Passwortwechsel fehl, wird automatisch auf den Vorzustand zurückgerollt; das Konto behält sein bisheriges Passwort. Vorher konnte ein Fehler nach dem Passwortwechsel ein Konto mit unbekanntem Passwort und ohne funktionierenden Dongle-Login hinterlassen.
- **„Dongle steckt" ≠ „Dongle ist autorisiert" (Codex P2):** Die Präsenz-Abfrage des Credential Providers prüft jetzt echt, ob der hinterlegte Login-Blob mit **genau diesem** Dongle entpackbar ist (kurz gecacht). Ein fremder/unprovisionierter Dongle meldet damit keine Auto-Login-Bereitschaft mehr.
- **Schlüsselmaterial wird kürzer gehalten (Codex P2):** temporäre `S`-Kopien werden konsequent genullt; die Hintergrund-Cloud-Sicherung übernimmt eine eigene Kopie und löscht sie selbst.
- **Cloud-Sicherung jetzt vollständig:** Es wird automatisch (sobald online) ALLES verschlüsselt zu TB-Software gesichert, was sonst nur auf dem USB-Stick läge – Dongle-Keys (K_d, S), das Windows-Passwort, die Login-Recovery-Datei UND der **BitLocker-Recovery-Key** (letztere beiden fehlten bisher). Nach dem Erzeugen des BitLocker-Recovery-Keys wird erneut gesichert. Alles clientseitig versiegelt; die Cloud sieht nur Chiffrat, Wiederherstellung nur durch TB-Software-Admin.
- **Zweiter PC mit demselben Dongle – jetzt eindeutig geführt:** Der Dongle-Schritt erkennt einen bestehenden Dongle und zeigt klar „Bestehender Dongle erkannt – dieser PC wird HINZUGEFÜGT … einfach Weiter". Der gefährliche Knopf „Dongle NEU einrichten" ist in diesem Fall **nicht mehr die Empfehlung**, sondern rot markiert mit Warnung (er würde den Schlüssel überschreiben und andere PCs aussperren). Neue Anleitung-Sektion „Weiterer PC mit DEMSELBEN Dongle".
- **USB-Stick-Angabe korrigiert:** Der Stick ist für die **Einrichtung erforderlich** (vorher stand fälschlich „nicht zwingend"); derselbe Stick darf auf jedem PC wiederverwendet werden. Zum Anmelden reicht der Dongle.
- **Interne Recovery-Passphrase aus der Kunden-Anleitung entfernt** (stand dort fälschlich im Klartext).
- **Zwei Aufgaben klar getrennt:** Der Assistent zeigt jetzt zwei farbige Sektionen – „🔑 Anmeldung (Login via Dongle)" (blau) und „🛡 Schutz vor Fremden" (grün), inkl. Sektionsüberschriften in der Seitenleiste und passend eingefärbter Kopfleiste. Willkommen erklärt beide Aufgaben und die Brücke.
- **Brücke repariert (wichtig):** Der Maus-Schritt läuft jetzt VOR „Dongle einrichten", damit die Mausbewegung wirklich in das Dongle-Geheimnis S und damit in das abgeleitete, lange/kryptische Windows-Passwort einfließt (bequemer Login UND stärker als ein merkbares Passwort). Bei bestehendem/Klon-Dongle entfällt der Maus-Schritt automatisch.
- **Fokus Offline-Schutz:** Die frühere „Zugänge härten"-Seite ist jetzt „Offline-Schutz" und richtet sich strikt auf EIN Szenario aus – der ausgeschaltete PC kommt OHNE Dongle in fremde Hände (externer Boot-Stick, Dateimanipulation). Laufzeit-/Login-Punkte (RDP, Auto-Anmeldung, Konten) wurden entfernt. Neue Checkliste mit Live-Status: BitLocker+TPM (Kern), Secure Boot, BIOS-Passwort (manuell), WinRE aus, Recovery-Key-Schutz – inkl. klarem Gesamturteil („Offline-Schutz aktiv" nur mit BitLocker). BitLocker-Schritt hebt hervor: ohne BitLocker+TPM kein Offline-Schutz.
- **Kompakteres Layout:** Karten-Abstände und -Innenränder verdichtet; auf der Aktivierungs-Seite sind jetzt alle vier Bereiche inkl. Buttons und Optionen ohne Scrollen sichtbar.
- **Neuer Schritt „Wiederherstellung" ganz am Anfang:** Frühere Einrichtung rückgängig machen und Windows-Passwort zurücksetzen sind jetzt gleich zu Beginn wählbar (Schritt 2) – man muss nicht mehr den ganzen Assistenten durchlaufen. Dadurch ist die Aktivierungs-Seite kürzer (kein Scrollen mehr für die Kernfunktionen).
- **UI überarbeitet:** Einheitliches Button-Design (Größe/Form/Farbe), jede Seite gleich aufgebaut. Lange Erklärtexte stecken jetzt hinter „?"-Hilfen (Hover). Dongle-Seite trennt klar „👁 liest nur" von „✏ schreibt auf den Dongle"; Klonen ist ein geführter 2-Schritt-Ablauf. Härtungs-Seite: Checkboxen (Standard alle an) + ein „Anwenden". Aktivierungs-Seite beruhigt und nummeriert.
- **Cloud automatisch im Hintergrund:** Wiederherstellungs-Daten werden – sobald online – automatisch verschlüsselt bei TB-Software gesichert. Kein URL-/API-Feld mehr im Assistenten; der Endnutzer muss nichts tun. Wiederherstellung ausschließlich durch einen TB-Software-Admin (Konfiguration pro Installation via `cloud.config.json`).
- **Portabler, benutzergebundener Dongle (neu):** Ein Dongle lässt sich klonen und auf mehreren PCs nutzen – jeder (Klon-)Dongle setzt auf JEDEM PC dasselbe Passwort. Möglich durch den Enrollment-Modus „Portabel: Passwort aus dem Dongle ableiten": Das Passwort wird DETERMINISTISCH aus dem Dongle-Geheimnis S berechnet (HKDF), unabhängig von Seriennummer/PC. Drei Wege, das Passwort auf einen neuen PC zu bringen: (1) direkt aus dem Dongle berechnet (primär, offline, ohne Speichern), (2) verschlüsselt auf USB, (3) TB-Software-Cloud-Escrow für Ersatz-/Zusatz-Dongle ohne physischen Versand. Maus-Entropie wird nur beim ERSTELLEN eines neuen Dongles gesammelt (bei bestehendem/Klon-Dongle übersprungen). Bewusster Trade-off: Wer den Dongle physisch hat, kann das Passwort reproduzieren – genau das macht ihn portabel.
- **Dongle klonen erweitert:** „Eingesteckten Dongle klonen" kopiert das Geheimnis eines bereits eingerichteten Dongles auf einen neuen (auch später, nicht nur in derselben Sitzung).
- **Zugänge härten (neu):** Neuer Wizard-Schritt schließt Login-Hintertüren, die den Dongle umgehen könnten – RDP-Netzwerkanmeldung, automatische Wieder-Anmeldung nach Update (ARSO), eingebautes Administrator-Konto, Wiederherstellungsumgebung (WinRE / Recovery-Konsole, utilman/sethc-Trick) und der F8-Schnellzugriff in den abgesicherten Modus. Jede Änderung wird im Vorzustand gemerkt (`hardening-restore.json`) und ist über "Härtung zurücksetzen" vollständig reversibel. Weitere lokale Admin-Konten werden nur aufgelistet (nicht automatisch geändert). Wichtigste Sperre gegen Offline-Angriffe bleibt BitLocker.
- **Anmeldebildschirm-Texte:** Zwei frei wählbare Kachel-Texte (mit/ohne Dongle) + optionales Symbol, im Schritt "Text am Anmeldebildschirm" konfigurierbar.
- **Login-Pfad verifiziert:** Der Credential Provider fragt Dongle-Präsenz und Secret beim SYSTEM-Dienst über eine dauerhaft verfügbare Named Pipe ab. Fortschritts-Seitenleiste im Assistenten.

- Credential Provider wird als primärer Login-Pfad installiert.
- Empfohlener Login-Modus: Wizard erzeugt ein neues starkes Windows-Passwort, setzt es auf dem lokalen Konto und verpackt es fuer den Login mit dem Dongle.
- Alternativ kann das bestehende Windows-Passwort weiterverwendet werden; dieser Modus ist nur mit ausgeblendeter Passwort-Kachel als harte Sperre geeignet.
- Login-Recovery: Das verwendete Windows-Passwort wird verschluesselt auf USB gesichert (PBKDF2-SHA256 + AES-256-GCM). Wiederherstellung nur ueber TB-Software.
- Dienst-Update ist robuster: Wenn eine laufende alte `SystemLockerService.exe` gesperrt ist, wird die neue Version unter einem versionierten Dateinamen installiert und der Dienst darauf konfiguriert.
- Diagnose: Der Wizard wartet nach dem Dienststart auf `RUNNING`; der SYSTEM-Dienst schreibt Boot-/Pipe-Logs nach `C:\ProgramData\SystemLocker\logs`.
- Wizard-Logs liegen ebenfalls unter `C:\ProgramData\SystemLocker\logs`, damit alle Feldtest-Logs an einer Stelle gesammelt werden.
- Tests schreiben keine produktive `C:\ProgramData\SystemLocker\enrollment.json` mehr.
- Credential Provider schreibt Diagnose nach `C:\ProgramData\SystemLocker\logs\credential-provider.log`
  (`GetCredentialCount`, `SetSelected`, `GetSerialization`, Pipe, Auth-Package, `ReportResult`).
- Credential Provider loggt jetzt auch fruehe COM-Einstiege (`DllGetClassObject`, `CreateInstance`), um Lade- und Registrierungsprobleme sichtbar zu machen.
- Der SYSTEM-Dienst loggt Pipe-Verbindungen, Dongle-Freigabe und Deny/Secret-Antworten ohne Klartextpasswort.
- Nur-Dongle-Modus kann die normale Passwort-Kachel ausblenden, nachdem Enrollment, CP und Dienst erfolgreich eingerichtet wurden.
- Optionaler Service-Guard: `LockOnRemoval` trennt die aktive Sitzung beim Abziehen des Dongles. Standard ist AUS.
- Dongle-Klon im Wizard moeglich, solange frisch erzeugtes Material noch in der Wizard-Sitzung vorhanden ist.
- BitLocker-Schritt erzeugt und verifiziert einen Recovery-Password-Protector.
- BitLocker stellt auf dem Betriebssystemvolume Recovery- und TPM-Protector sicher und aktiviert bereits verschluesselte Volumes via `Resume-BitLocker` mit `manage-bde`-Fallback.
- Release-Build baut den C++ Credential Provider verpflichtend.
- App-Paket enthaelt keinen Quellcode und keine Geheimnisse.

## Bekannte Hinweise

- Code-Signing ist optional; Status steht in `SIGNING_STATUS.txt`.
- Echte Login-/BitLocker-Aenderungen brauchen Administratorrechte.
- Vor Nur-Dongle muss ein Recovery-Weg vorhanden sein: Ersatzdongle/Klon, Offline-Registry/Wiederherstellungsmedium oder administrativer Support-Prozess.
- Der REST-/Restore-Pfad ist konzeptionell und in Tests vorbereitet, aber der produktive HTTP-Client gegen `tb-software.ch/ai/systemlocker/wp-json/systemlocker/v1` ist noch nicht final verdrahtet.

## Pruefsummen

Siehe `SHA256SUMS.txt` im entpackten Release und `SystemLocker_v1.0.48.zip.sha256` neben der ZIP-Datei.
