Skip to the content.

Installing LegendCTL on Windows

LegendCTL is a free, open-source, standalone configurator for the ZD Ultimate Legend — no official ZD app required, no drivers, no background service, no telemetry. This page covers downloading it, handling a possible Windows SmartScreen warning, and verifying your download is genuine so you don’t have to take “unsigned” on faith.

1. Download

From the Releases page, grab one of:

2. Why Windows may show “Windows protected your PC”

LegendCTL is not code-signed and its downloads may have limited reputation. Depending on the file’s reputation, how it was downloaded, and system or enterprise policy, Windows SmartScreen may show a blue “Windows protected your PC” dialog.

This warning is a reputation signal, not by itself a malware verdict. It does not mean that Windows proved the file harmful. You don’t have to trust the download blindly, though — you can verify it yourself (next section).

To run it:

  1. Click More info in the SmartScreen dialog.
  2. Click Run anyway.

(On a managed/work PC, an administrator policy can block “Run anyway” entirely — that’s expected on locked-down machines and isn’t specific to LegendCTL.)

Because LegendCTL is unsigned, the honest way to be sure your download is the real, untampered file is to check its SHA-256 hash against the one published with the release.

  1. Each release includes a SHA256SUMS.txt asset listing the official hashes.
  2. Open PowerShell in your downloads folder and run the line for whichever file you downloaded:

    # Portable ZIP (the recommended "just try it" download):
    Get-FileHash .\ZDUltimateLegend-v<version>-windows.zip -Algorithm SHA256
    # Or the installer:
    Get-FileHash .\ZDUltimateLegend-v<version>-Setup.exe -Algorithm SHA256
    
  3. Compare the printed hash to the matching line in SHA256SUMS.txt. If they match, the file is exactly what was published. If they don’t match, delete it and re-download.

(In SHA256SUMS.txt, a leading * on a filename is standard sha256sum notation marking binary-mode hashing — it’s not part of the filename.)

A matching hash proves your file is byte-for-byte the one published with that release — an integrity check, done in the open. It doesn’t by itself prove who published it: for that origin check on v2.5.0+ releases, use the build-provenance verification in section 4. (AuthentiCode code-signing is a separate, still-planned layer — see the code-signing policy.)

4. Verify where it was built (build provenance)

From v2.5.0 onward, release binaries are built in this repository’s public GitHub Actions workflow (release-build.yml) — not on a maintainer’s machine — and every such release carries a build-provenance attestation: a cryptographically signed statement, recorded with GitHub, tying the exact bytes of the release files to the workflow run and source commit that produced them.

Releases v2.4.1 and earlier were built locally by the maintainer and are not attested — for those, the SHA-256 checksums (section 3) are the verification path.

What this proves / doesn’t prove — honestly:

Checking it needs the GitHub CLI (v2.67.0 or newer — older versions had a verification exit-code bug):

gh attestation verify .\ZDUltimateLegend-v<version>-Setup.exe --repo EvilHumphrey/LegendCTL
gh attestation verify .\ZDUltimateLegend-v<version>-windows.zip --repo EvilHumphrey/LegendCTL

A good result ends with ✓ Verification succeeded!.

Reviewers who want a stricter policy check can also pin the exact builder workflow:

gh attestation verify .\ZDUltimateLegend-v<version>-Setup.exe `
  --repo EvilHumphrey/LegendCTL `
  --signer-workflow EvilHumphrey/LegendCTL/.github/workflows/release-build.yml

Offline / API-free: each attested release also ships its attestation as the attestation-bundle.jsonl asset, so you can verify without querying GitHub’s attestation API. You do need to fetch the trust root once while online (gh attestation trusted-root) and keep the resulting file — after that, verification runs fully offline:

# Run once while online; keep trusted_root.jsonl for later offline use:
gh attestation trusted-root > trusted_root.jsonl

# Then verify offline, against the bundle shipped with the release:
gh attestation verify .\ZDUltimateLegend-v<version>-Setup.exe `
  --repo EvilHumphrey/LegendCTL `
  --bundle .\attestation-bundle.jsonl `
  --custom-trusted-root .\trusted_root.jsonl

(Releases built locally, before this workflow existed, are not attested — for those, the SHA-256 check in section 3 is the verification path.)

5. Why you can trust it beyond the hash

6. Install via winget

LegendCTL is available from the Windows Package Manager community repository:

winget install --id EvilHumphrey.LegendCTL --exact

winget fetches and hash-checks the installer for you. The community catalog can trail the newest GitHub release while an update is validated; check the currently published version with winget show --id EvilHumphrey.LegendCTL --exact.

7. Uninstall