DEV Community

Zero Heartbeat profile picture

Zero Heartbeat

404 bio not found

Joined Joined on 
Obfuscating an F# assembly: discriminated unions, the [CompilationMapping] attribute, and what FSharp.Core reflects on

Obfuscating an F# assembly: discriminated unions, the [CompilationMapping] attribute, and what FSharp.Core reflects on

Comments
7 min read
Renewal nudges that don''t nag: driving "expires in N days" from LicenseKind, not a date in your code

Renewal nudges that don''t nag: driving "expires in N days" from LicenseKind, not a date in your code

Comments
7 min read
Decompiling exception filters: the catch (e) when (...) that becomes a filter region and the endfilter that runs it

Decompiling exception filters: the catch (e) when (...) that becomes a filter region and the endfilter that runs it

Comments
7 min read
Obfuscating readonly structs, in parameters, and ref returns: the modreqs and compiler attributes Nebula must not strip

Obfuscating readonly structs, in parameters, and ref returns: the modreqs and compiler attributes Nebula must not strip

Comments
9 min read
Verifying a Keyright license on Native AOT: no reflection, a trimmed verify path, and the public key as a ReadOnlySpan<byte>

Verifying a Keyright license on Native AOT: no reflection, a trimmed verify path, and the public key as a ReadOnlySpan<byte>

Comments
10 min read
Decompiling optional and named arguments: default values in the Constant table and the temporaries the compiler emits for reordering

Decompiling optional and named arguments: default values in the Constant table and the temporaries the compiler emits for reordering

Comments
10 min read
Obfuscating virtual and interface members: override chains, explicit implementations, and the MethodImpl table that ties them together

Obfuscating virtual and interface members: override chains, explicit implementations, and the MethodImpl table that ties them together

Comments
10 min read
Licensing a .NET component library: the developer license, the key that compiles into your customer''s app, and what the end user never sees

Licensing a .NET component library: the developer license, the key that compiles into your customer''s app, and what the end user never sees

Comments
14 min read
Decompiling fixed: pinned locals, the null-or-empty array guard, and GetPinnableReference

Decompiling fixed: pinned locals, the null-or-empty array guard, and GetPinnableReference

Comments
12 min read
Obfuscating generics: renaming type parameters, and the constraints and reflection that pin the names down

Obfuscating generics: renaming type parameters, and the constraints and reflection that pin the names down

Comments
7 min read
Choosing a signature algorithm for your license keys: Ed25519, ECDSA and RSA compared

Choosing a signature algorithm for your license keys: Ed25519, ECDSA and RSA compared

Comments
10 min read
Decompiling foreach: the enumerator, the hidden try/finally, and when it is really a for loop

Decompiling foreach: the enumerator, the hidden try/finally, and when it is really a for loop

Comments
7 min read
Obfuscating enums: why the names survive renaming, and how ToString() and switch leak them

Obfuscating enums: why the names survive renaming, and how ToString() and switch leak them

Comments
7 min read
Pinning your verification public key: the attacker who just swaps your key for theirs

Pinning your verification public key: the attacker who just swaps your key for theirs

Comments
9 min read
Decompiling control flow: how Glass.NET rebuilds loops and if/else from a pile of branches

Decompiling control flow: how Glass.NET rebuilds loops and if/else from a pile of branches

Comments
10 min read
Renaming to collisions: how Nebula reuses one name across members, and why the CLR tells them apart by signature

Renaming to collisions: how Nebula reuses one name across members, and why the CLR tells them apart by signature

Comments
8 min read
Designing a license key humans can type: base32, segment grouping, and a check digit that catches typos

Designing a license key humans can type: base32, segment grouping, and a check digit that catches typos

Comments
7 min read
Decompiling anonymous types: the generated generic class behind new { a, b }

Decompiling anonymous types: the generated generic class behind new { a, b }

Comments
7 min read
One license, four runtimes: verifying the same Keyright key from .NET, Node, Python and Java

One license, four runtimes: verifying the same Keyright key from .NET, Node, Python and Java

Comments
8 min read
Obfuscating custom attributes: what the metadata keeps, what renaming breaks, and the reflection that still works

Obfuscating custom attributes: what the metadata keeps, what renaming breaks, and the reflection that still works

Comments
6 min read
Obfuscating async/await and iterators: why the state machine survives renaming (and the one binding a naive renamer breaks)

Obfuscating async/await and iterators: why the state machine survives renaming (and the one binding a naive renamer breaks)

Comments
8 min read
Verifying a license key is not free: caching the signature check without caching a stale answer

Verifying a license key is not free: caching the signature check without caching a stale answer

Comments
8 min read
Decompiling a?.b?.c: how the null-conditional operator becomes branches and one shared skip label

Decompiling a?.b?.c: how the null-conditional operator becomes branches and one shared skip label

Comments
7 min read
Decompiling a switch on strings: the hidden hash jump table the compiler builds

Decompiling a switch on strings: the hidden hash jump table the compiler builds

Comments
8 min read
Licensing a .NET CLI tool: headless activation, KEYRIGHT_LICENSE, and runners with no "Register" dialog

Licensing a .NET CLI tool: headless activation, KEYRIGHT_LICENSE, and runners with no "Register" dialog

Comments
8 min read
Decompiling C# events: the CompareExchange loop behind += and -=

Decompiling C# events: the CompareExchange loop behind += and -=

Comments
8 min read
Obfuscating an assembly your tests still have to pass: InternalsVisibleTo and friend assemblies

Obfuscating an assembly your tests still have to pass: InternalsVisibleTo and friend assemblies

Comments
6 min read
A license is a capability token: Keyright entitlements as ASP.NET Core authorization policies

A license is a capability token: Keyright entitlements as ASP.NET Core authorization policies

Comments
6 min read
Decompiling params collections: where did my array go?

Decompiling params collections: where did my array go?

Comments
6 min read
Obfuscating a WinForms app without losing your designer resources

Obfuscating a WinForms app without losing your designer resources

Comments
7 min read
One license, many clocks: per-entitlement expiry with Keyright

One license, many clocks: per-entitlement expiry with Keyright

Comments
7 min read
Decompiling the new lock: when the compiler stops calling Monitor

Decompiling the new lock: when the compiler stops calling Monitor

Comments
6 min read
Obfuscating an Avalonia app: compiled bindings, the ViewLocator convention, and what the XAML compiler already made rename-safe

Obfuscating an Avalonia app: compiled bindings, the ViewLocator convention, and what the XAML compiler already made rename-safe

Comments
11 min read
Deactivating a license and moving it to a new machine: receipts, offline proofs, and transfer limits

Deactivating a license and moving it to a new machine: receipts, offline proofs, and transfer limits

Comments
11 min read
Decompiling operator overloads: op_ names, checked operators, and the conversions that only compile as operators

Decompiling operator overloads: op_ names, checked operators, and the conversions that only compile as operators

Comments 1
10 min read
Obfuscating a plugin host without breaking the plugin contract

Obfuscating a plugin host without breaking the plugin contract

Comments 1
9 min read
When a VM gets cloned: detecting duplicate activations in node-locked licensing

When a VM gets cloned: detecting duplicate activations in node-locked licensing

Comments
9 min read
Decompiling ref fields and scoped: how C# 11 ref structs look in IL

Decompiling ref fields and scoped: how C# 11 ref structs look in IL

Comments
8 min read
Obfuscating a gRPC service without breaking the contract on the wire

Obfuscating a gRPC service without breaking the contract on the wire

Comments
7 min read
Turning on license enforcement without locking out your customers: audit mode first

Turning on license enforcement without locking out your customers: audit mode first

Comments
9 min read
Decompiling init-only setters and required members: the modreq and attributes that make them

Decompiling init-only setters and required members: the modreq and attributes that make them

Comments
7 min read
Obfuscating an ASP.NET Core app: controllers, DI, model binding, and what must stay public

Obfuscating an ASP.NET Core app: controllers, DI, model binding, and what must stay public

Comments
12 min read
Versioning your license payload: adding claims without breaking the clients already in the field

Versioning your license payload: adding claims without breaking the clients already in the field

Comments
12 min read
Decompiling nullable reference types: where string? actually lives in the metadata

Decompiling nullable reference types: where string? actually lives in the metadata

Comments
10 min read
Obfuscating P/Invoke and DllImport code without breaking native interop

Obfuscating P/Invoke and DllImport code without breaking native interop

Comments
8 min read
License heartbeats and lease reaping: counting concurrent seats when clients crash

License heartbeats and lease reaping: counting concurrent seats when clients crash

Comments
11 min read
Decompiling C# 12 inline arrays and stackalloc: fixed buffers without the unsafe

Decompiling C# 12 inline arrays and stackalloc: fixed buffers without the unsafe

Comments
8 min read
Named-user licensing: binding entitlements to a person, not a machine

Named-user licensing: binding entitlements to a person, not a machine

Comments
8 min read
Encrypting embedded resources: the data your obfuscator forgets

Encrypting embedded resources: the data your obfuscator forgets

Comments
6 min read
Decompiling static abstract interface members: how generic math compiles

Decompiling static abstract interface members: how generic math compiles

Comments
6 min read
Storing an activated license on the client: DPAPI, tamper-evident caching, and what not to trust

Storing an activated license on the client: DPAPI, tamper-evident caching, and what not to trust

Comments
6 min read
When nameof and [CallerMemberName] leak your renamed members

When nameof and [CallerMemberName] leak your renamed members

Comments
6 min read
Making a tampered build phone home: report-home across .NET and .NET Framework

Making a tampered build phone home: report-home across .NET and .NET Framework

Comments
6 min read
Rotating your license-signing key without bricking the field

Rotating your license-signing key without bricking the field

Comments
7 min read
Decompiling function pointers: calli, delegate*, and where the calling convention hides

Decompiling function pointers: calli, delegate*, and where the calling convention hides

Comments
7 min read
Re-signing a .NET assembly after obfuscation: strong names and Authenticode

Re-signing a .NET assembly after obfuscation: strong names and Authenticode

Comments
6 min read
Selling updates: how a license decides which versions it may run

Selling updates: how a license decides which versions it may run

Comments
6 min read
Decompiling tuples: where the names (count, name) actually live

Decompiling tuples: where the names (count, name) actually live

Comments
6 min read
Obfuscating an Entity Framework Core app without breaking your data layer

Obfuscating an Entity Framework Core app without breaking your data layer

Comments
7 min read
Licensing containers and autoscaled .NET services with Keyright

Licensing containers and autoscaled .NET services with Keyright

Comments
7 min read
loading...