Repository navigation
Releases: dawwinci/agile-net-devirtualizer
Release list
v1.0.1
Bugfix release. No CLI or output-format changes — same usage as v1.0.0.
Fixes
- Crash safety / no local paths in error output: a malformed or unrelated
input DLL (anything without a real Agile.NET opcode registry) could
previously crash with an unhandled exception, and .NET's default stack
trace embeds the build machine's own absolute file paths. The whole run is
now wrapped in a top-level handler that reports failures by message only,
every runtime-module resolve call during opcode-registry scanning is
guarded, and Release builds no longer emit a.pdbat all — so there is
nothing left that could ever surface a local path or username. - Lift gap: an arithmetic-helper's nested calls into the VM's own
boxed-value accessors weren't recognized when reached through another
runtime helper (only when called directly from a handler), causing several
methods on some builds to fail lifting entirely. - Lift gap: a guard-throw check used to skip the VM's own internal
null/type-check scaffolding could misattribute a throw reachable only
through a nested condition to an unrelated outer check, silently
discarding a real value — this showed up inforeach/enumerator-shaped
methods. - PEVerify regression: a non-void method whose real logic was just an
unconditionalthrowgot a dead, argument-lessretappended after it,
which PEVerify flags as "return value missing on the stack" even though
the position is unreachable. Now emitsdefault(T)there instead. - Build portability: a
.Reverse()call on an array was, on some SDK
versions, resolving to the void-returningSpan<T>overload instead of
LINQ's — a build failure with no code-logic cause. Now calls
Enumerable.Reverseexplicitly.
All verified against the full local regression suite (structural, PEVerify,
ILSpy quality, and runtime semantic-vector gates) with no regressions.
Contents
AgileDevirtualizer.exe/.dll plus its one dependency, AsmResolver.DotNet
(MIT) and its own dependencies. Framework-dependent build — needs the .NET 8
runtime installed.
v1.0.0
First public release of AgileDevirtualizer.
A generic devirtualizer for Agile.NET's VM-based method protection. Reads the
AgileDotNet.VMRuntime.dll shipped alongside a protected assembly, derives the
opcode-to-handler map and each handler's operand/execute semantics from that
DLL structurally (no hardcoded per-build opcode tables), and rewrites
virtualized method bodies back into real, verifiable CIL.
Usage
Requires the .NET 8 runtime.
AgileDevirtualizer.exe <protected.exe> <VMRuntime.dll> [output.exe] [flags]
See the README for
a worked example (virtualized vs. devirtualized), the pipeline architecture,
and the full flag reference.
Contents
AgileDevirtualizer.exe/.dll plus its one dependency, AsmResolver.DotNet
(MIT) and its own dependencies. Framework-dependent build — needs the .NET 8
runtime installed.