Files
kami/license-system-launcher
2026-01-04 23:00:21 +08:00
..
2026-01-04 23:00:21 +08:00
2026-01-04 23:00:21 +08:00
2026-01-04 23:00:21 +08:00
2026-01-04 23:00:21 +08:00
2026-01-04 23:00:21 +08:00

License Launcher (Windows)

Single-file launcher that verifies license online, then runs the embedded EXE.

Build (Windows)

  1. Install Rust (MSVC toolchain).
  2. Build:
cargo build --release --bin launcher_stub
cargo build --release --bin launcher_pack

Output:

  • target/release/launcher_stub.exe
  • target/release/launcher_pack.exe
  • target/release/launcher_gui.exe

Config

Create config.json (example):

{
  "api_base": "http://118.145.218.2:39256",
  "project_id": "PROJ_001",
  "project_secret": "YOUR_PROJECT_SECRET",
  "client_version": "1.0.0",
  "license_file": "license.key",
  "request_timeout_sec": 10,
  "heartbeat_retries": 2,
  "heartbeat_retry_delay_sec": 5,
  "extract_to": "temp",
  "keep_payload": false
}

Notes:

  • extract_to: temp (default) or self.
  • If extract_to=self, the payload is extracted next to the launcher (use this when your app needs local resource files).
  • Card key is read from license.key next to the launcher (first non-empty line). You can also set card_key in config to hardcode.

Pack

launcher_pack --stub launcher_stub.exe --input your_app.exe --config config.json --output your_app_protected.exe

The tool writes the payload name into the config automatically.

  1. Put launcher_gui.exe and launcher_stub.exe in the same folder.
  2. Run launcher_gui.exe.
  3. Fill:
    • API base
    • Integration code (LSC1... from Project detail)
  4. Drag your EXE into the window.
  5. Click Start Pack.

Output file defaults to *_packed.exe.

Run

Place license.key next to your_app_protected.exe:

YOUR-CARD-KEY

Start your_app_protected.exe. It will:

  1. Compute deviceId = MAC|IP (clamped to 64 chars; hashed if too long).
  2. Call /api/auth/verify online.
  3. Start the embedded app.
  4. Send /api/auth/heartbeat on interval; failure will exit the app.

Security Notes

  • Online verification is required; no offline cache.
  • If the server disables heartbeat, only startup verification is enforced.
  • This raises reverse-engineering cost but cannot make a client uncrackable.