Skip to content

v1.122.4: stamp the EXE with its own identity - #101

Merged
TheAbider merged 1 commit into
masterfrom
release/v1.122.4-exe-metadata
Aug 10, 2026
Merged

v1.122.4: stamp the EXE with its own identity#101
TheAbider merged 1 commit into
masterfrom
release/v1.122.4-exe-metadata

Conversation

@TheAbider

Copy link
Copy Markdown
Owner

What

Cuts v1.122.4, shipping the interpreter guard from #100 (merged unreleased) plus the fix below.

The EXE has been shipping without a name

Every release through v1.122.3 embedded an empty version resource. Read straight out of the
published v1.122.3 binary:

Field Value
CompanyName empty
ProductName empty
FileDescription empty
LegalCopyright empty
FileVersion 1.122.3

Two costs:

  1. UAC shows a blank. The build passes -RequireAdmin, so the tool raises an elevation
    prompt on launch, and UAC displays FileDescription as the program name. Users have been
    asked to grant administrator rights to an unnamed executable.
  2. It reads as unusual to heuristic AV. Legitimate software populates the version resource;
    an empty one is a (mild) contributor to the ML detections on v1.122.3.

Values match the identity already published in RackStack.psd1 (CompanyName = 'TheAbider'),
the Chocolatey nuspec and the Scoop manifest — nothing new is asserted about who ships this.

Deliberately not included

Switching to a 64-bit build. The binary compiles as PE32/i386 today. I considered -x64
as a further heuristic tweak and rejected it: the AV benefit is speculative, while dropping
32-bit support is a real compatibility change. Not worth trading a certainty for a maybe.

Tests

Section 209, 11 assertions covering the build surface: ps2exe stays pinned to an exact version,
the invocation keeps setting title/product/company/copyright/description, -Version
survives, and the EXE's CompanyName must equal RackStack.psd1's so the published identity
cannot drift across manifests.

Section 209 applies the lesson #100 learned the hard way — it asserts the Invoke-PS2EXE regex
matched before trusting what the match contained. Mutation-verified six ways: dropping
-company, dropping -title, drifting company away from the manifest, reverting to an unpinned
install, unpinning the version variable, and breaking the regex anchor. All caught, with a
non-vacuous all-true baseline.

Structural tests 5474 → 5485. Full gate: 42 passed / 0 failed / 0 warnings, suite 5485/5485.

On merge

This cuts a release: EXE build, GitHub release, cosign + SLSA attestation, PowerShell
Gallery, and a fresh Chocolatey submission.

Every release through v1.122.3 shipped a binary whose CompanyName,
ProductName, FileDescription and LegalCopyright were empty. Verified by
reading the version resource straight out of the published v1.122.3
artifact, not inferred from the build script.

Two costs. An empty version resource is a mild heuristic-AV signal, because
legitimate software populates it and commodity malware often does not. More
concretely, the build passes -RequireAdmin, so launching the tool raises a
UAC prompt, and UAC displays FileDescription as the program name: users were
being asked to elevate a blank.

The values match the identity already published in RackStack.psd1, the
Chocolatey nuspec and the Scoop manifest, so nothing new is asserted about
who ships this.

Run-Tests section 209 pins the whole build surface: the compiler stays
pinned to an exact version, the ps2exe invocation keeps setting title,
product, company, copyright and description, and the EXE's CompanyName must
equal RackStack.psd1's so the published identity cannot drift apart across
manifests.

Section 209 applies the lesson from section 208: it asserts the Invoke-PS2EXE
regex actually matched before trusting what the match did or did not contain,
so renaming a nearby variable fails the section instead of silently passing
it. Mutation-verified six ways, including breaking that anchor.

Structural tests 5474 -> 5485.
@codecov

codecov Bot commented Aug 10, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@TheAbider
TheAbider merged commit 77ed77d into master Aug 10, 2026
7 checks passed
@TheAbider
TheAbider deleted the release/v1.122.4-exe-metadata branch August 10, 2026 23:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant