Brutal Developer .NET Assembly Strong-Name Signer — Complete Guide
What it is
Brutal Developer .NET Assembly Strong-Name Signer (BrutalSN) is a tool designed to add, remove, or replace strong-name signatures in .NET assemblies without requiring source code. It’s useful when you need to sign third-party DLLs, re-sign assemblies after modification, or fix mismatched public keys in complex deployments.
When to use it
- Signing third-party assemblies that were provided unsigned but must be strong-named for your application domain.
- Re-signing assemblies after IL-level modifications (patches, instrumentation).
- Resolving key mismatches between dependent assemblies and your signing key.
- Preparing assemblies for environments that require strong names (GAC, certain security policies).
Supported scenarios and limitations
- Works with managed assemblies (IL). It does not support native binaries.
- Can add a strong name to assemblies that were not signed originally, or replace existing signatures.
- May fail on assemblies using anti-tamper, native images (NGen), or obfuscation that alters metadata layout.
- Not a substitute for obtaining signed binaries from the original vendor when licensing or trust is required.
Installation
- Download the latest Brutal Developer strong-name signer package or binary from the official repository or release page.
- Extract the archive and place the executable in a tools folder or include it in your PATH for convenience.
Basic usage
Command-line syntax (typical):
Code
BrutalSN.exe -k MyKey.snk -in Unsigned.dll -out Signed.dll
- -k: path to the strong-name key (.snk).
- -in: input assembly.
- -out: output signed assembly.
Common variants:
- Replace existing signature:
Code
BrutalSN.exe -k MyKey.snk -in SignedOld.dll -out SignedNew.dll -replace
- Batch sign multiple assemblies:
Code
for %f in (*.dll) do BrutalSN.exe -k MyKey.snk -in %f -out signed%f
Best practices
- Backup originals before signing — keep unsigned copies for troubleshooting.
- Use a secure key: protect the .snk with proper file system permissions; consider using a CSP/KSP or hardware-backed key when possible.
- Check assembly compatibility: run unit/integration tests after signing to catch runtime binding issues.
- Automate in CI: include signing step in build pipelines where acceptable.
- Prefer vendor-signed assemblies when trust/licensing are concerns.
Troubleshooting
- “Invalid strong name” or verification failure:
- Ensure the public key token matches dependent assemblies, or recompile dependents against the new token.
- Use sn.exe -v Signed.dll to verify.
- “Assembly has been tampered” or fails to load:
- Check for obfuscation/anti-tamper; some protections prevent re-signing.
- Pinned/native image issues:
- Remove NGen images or rebuild native images after re-signing.
Verification and deployment
- Verify signature:
Code
sn.exe -v Signed.dll
- Update binding redirects or recompile callers if the public key token changed.
- Deploy signed assemblies to the GAC only if they meet deployment policies and are strongly named appropriately.
Example workflow
- Generate key:
Code
sn.exe -k MyKey.snk
- Sign assembly:
Code
BrutalSN.exe -k MyKey.snk -in Library.dll -out Library.Signed.dll
- Verify:
Code
sn.exe -v Library.Signed.dll
- Replace assemblies in application and run tests.
Security and licensing notes
- Re-signing third-party assemblies can violate licensing or break intended verification. Obtain permission where required.
- Strong-naming is about identity, not strong security; combine with signing via Authenticode and other measures for provenance.
Alternatives
- Use Microsoft’s strong-name signing tools (sn.exe) when you have source or can recompile.
- Rebuild from source with the key embedded for a cleaner, supported approach.
- Tools like Mono.Cecil, Signtool, or other third-party signers for specialized needs.
Summary
Brutal Developer .NET Assembly Strong-Name Signer is a powerful utility for signing and re-signing managed assemblies when source or original signing isn’t available. Use it with caution: back up originals, protect keys, verify behavior after signing, and prefer vendor-signed binaries when possible.
Leave a Reply