AI-native binary modernization

Resurrect the source.
Prove the behavior.

ProvenPort modernizes source-less .NET Framework binaries to modern .NET — and proves the modernized build behaves identically to the original. The binary itself is the golden master.

What goes in, what comes out

Hand us a binary. Get back source you own — with proof.

Input

A compiled .NET Framework assembly

One .NET 4.x binary — we've validated net 4.0 through net 4.8. No source code, no project files, no build scripts, no original author. The binary is all we need.

Output

Modern, buildable C# — that you own

Readable C# source that compiles on .NET 10, for your team to keep and maintain — delivered with the evidence that it behaves identically to the binary it came from.

The problem

Business-critical .NET assemblies with no source — and no safe way forward.

Two decades of .NET Framework left organizations running DLLs whose source is lost, whose authors are gone, and whose behavior nobody dares touch. .NET Framework is now legacy, but migrating a binary you can't read is a leap of faith.

No source

The asset is a compiled binary. Reverse-engineering it produces code that rarely behaves — or even rebuilds — like the original.

Silent drift

The modern runtime quietly changed subtle behaviors — numbers, text, dates, formatting — with no warning at build time. A "clean" port can still be wrong.

No proof

Rewriting code is easy to do and impossible to trust. What's missing is evidence that the new build does exactly what the old one did.

The approach

Golden-master equivalence. The binary is the spec.

Instead of trusting the modernized code, ProvenPort measures it. It establishes the original binary's exact behavior, reproduces the same conditions on modern .NET, and compares the two. Differences are reconciled with verified, behavior-preserving changes until the old and new builds agree.

Why it matters

Conversion alone isn't enough for software you can't afford to break. ProvenPort delivers a modern build and the evidence that its behavior matches the original — the thing you actually need to sign off a migration.

How it works →

How it works

Modernize, measure, prove.

A repeatable process where every change is behavior-preserving and equivalence is verified — not assumed.

ModernizeBring the binary's logic up to modern .NET, resolving the toolchain and runtime differences that trip up naïve ports.
CaptureEstablish the original's exact behavior as the golden reference.
CompareRun the modernized build under identical conditions and compare results precisely.
ProveReconcile any difference with verified fixes until the two builds are provably equivalent.

Run safely, by default

We have to run your binary. We never run it on bare metal.

Capturing a binary's true behavior means executing it — including code whose source nobody has read in years. ProvenPort runs every source-less assembly inside a hardened, disposable, network-isolated sandbox, so a binary that deletes files, spawns processes, or phones home can do no harm to anything that matters.

Isolated

Every run executes in a throwaway, hypervisor-isolated container with no network and a read-only view of the assembly — destroyed the moment it finishes.

Contained

Whatever the code does stays inside the sandbox. The host, your network, and your data are never in reach.

Observed

We don't just block side effects — we record them. What the binary writes or changes is captured and compared, so even effects are held to the equivalence standard.

Where the AI fits

AI-native — but the proof, not the AI, has the last word.

Most differences between framework generations are well understood: a deterministic engine resolves the patterns we've seen before with changes known to preserve behavior. AI is held in reserve for the cases that engine can't cover — a genuinely novel divergence with no known fix.

What the AI is given

A tightly scoped problem: the exact input that produced a difference, the two differing results, and the specific piece of code responsible — never "rewrite this library."

What keeps it honest

Every AI-proposed fix is recompiled and re-checked against the original binary. It is kept only if it makes the behavior match, and discarded otherwise. The AI proposes; the equivalence proof decides.

Why it's hard

Anyone can convert. Proving equivalence is the hard part.

The difficulty isn't producing modern-looking code — it's making it actually behave like the binary it replaces, and being able to demonstrate it.

Faithful, not approximate

Reconstructed code can look correct while being subtly wrong. We hold the result to the binary's exact behavior.

Invisible runtime changes

The modern runtime changed behaviors the compiler will never flag. We know where to look — and how to restore the original.

Evidence, not assurances

Equivalence is established by measurement, producing an auditable result you can stand behind.

A few real cases — each invisible at build time

A calculation that used to throw an error on overflow now silently returns infinity instead.

A duration that rounded to whole milliseconds now keeps finer precision — quietly shifting results.

The same text capitalizes and sorts differently depending on the language and the runtime underneath.

Helper code the original compiler invented — which has no written form — must be reconstructed before the source will even rebuild.

A library's translations, shipped as dozens of separate per-language files, have to be rebuilt so every locale still loads.

A platform feature the binary relied on was moved or removed, and each call has to be rerouted to its modern replacement.

A money library's own tests seemed to fail by the dozen — until we proved the new runtime itself changed how currency symbols resolve, not the port, by running the original binary on the modern runtime and watching it diverge identically.

Two values rebuilt in the wrong order left one of them empty — a wrong answer that compiles cleanly and raises no warning at all.

A serialization format the binary depended on was deleted outright from the modern runtime — no port can bring it back, so the honest answer is to say so, precisely and in writing.

A date library's tests failed because the world's timezone rules changed since the binary shipped — the machine had moved on, not the code. Telling those apart is the difference between a real defect and a false alarm.

Bridging that gap takes deep expertise in .NET internals paired with a system built to prove, not assume.

Proof

Validated against real open-source libraries — with their own test suites.

For each library, ProvenPort modernizes the legacy binary, then runs the library's own test suite against the result. Independent, third-party evidence of equivalence.

100
libraries validated
610k+
tests run green
480k+
in a single library
100%
of applicable cases
LibraryFrameworkDomainTests passingStatus
Icednet 4.5x86 / x64 encoder-decoder481,397 / 481,397validated
MathNet.Numericsnet 4.8Numerical computing20,908 / 20,908validated
NodaTimenet 4.5Date & time18,702 / 18,702validated
Humanizernet 4.8Text & localization15,023 / 15,023validated
NUnitnet 4.6.2Test framework6,264 / 6,264validated
FakeItEasynet 4.6.2Mocking / test fakes5,119 / 5,119validated
AutoFixturenet 4.5.2Test-data generation4,382 / 4,382validated
Markdignet 4.6.2Markdown parser3,795 / 3,795validated
System.Reactivenet 4.7.2Reactive extensions (Rx)3,692 / 3,692validated
AngleSharpnet 4.6.2HTML / CSS DOM engine3,643 / 3,643validated
Newtonsoft.Jsonnet 4.5JSON serializer3,464 / 3,464validated
MimeKitnet 4.6.2MIME / email parsing2,429 / 2,429validated
Sentrynet 4.6.2Error reporting2,386 / 2,386validated
SSH.NETnet 4.6.2SSH / SFTP client2,310 / 2,310validated
DocumentFormat.OpenXmlnet 4.6Office Open XML2,304 / 2,304validated
Pollynet 4.6.1Resilience (retry / breaker)1,895 / 1,895validated
Cronosnet 4.5Cron scheduling1,868 / 1,868validated
BouncyCastle.Cryptographynet 4.6.1Cryptography suite1,529 / 1,529validated
DotLiquidnet 4.5Liquid templating1,427 / 1,427validated
Nito.Comparersnet 4.6.1Comparer composition1,351 / 1,351validated
ExCSSnet 4.8CSS parser1,263 / 1,263validated
McMaster.Extensions.CommandLineUtilsnet 4.7.2Command-line apps1,120 / 1,120validated
SauceControl.Blake2Fastnet 4.6BLAKE2 hashing1,102 / 1,102validated
Verifynet 4.6.2Snapshot testing1,071 / 1,071validated
CsvHelpernet 4.8CSV parsing1,058 / 1,058validated
MailKitnet 4.6.2IMAP / SMTP / POP31,052 / 1,052validated
Bogusnet 4.0Fake-data generation1,051 / 1,051validated
SmartFormatnet 4.6.2String templating1,021 / 1,021validated
TimeZoneNamesnet 4.6.2Localized TZ names1,001 / 1,001validated
MessagePacknet 4.7.2MessagePack serializer997 / 997validated
YamlDotNetnet 4.7YAML serializer884 / 884validated
FluentValidationnet 4.6.1Validation813 / 813validated
Refitnet 4.6.2Typed REST client810 / 810validated
CommonMarknet 4.5Markdown (CommonMark)736 / 736validated
NCalcnet 4.6.2Expression evaluation718 / 718validated
CommandLineParsernet 4.6.1Command-line parsing684 / 684validated
Semvernet 4.5.2Semantic versioning665 / 665validated
QRCodernet 4.0QR-code generation644 / 644validated
MoonSharp.Interpreternet 4.5Lua scripting638 / 638validated
Colourfulnet 4.5Color science579 / 579validated
Serilognet 4.7Structured logging578 / 578validated
FileHelpersnet 4.5Delimited / fixed-width files558 / 558validated
Flurlnet 4.7.2HTTP / URL building542 / 542validated
ExcelDataReadernet 4.6.2Excel reading501 / 501validated
Statelessnet 4.6.2Workflow / state machines424 / 424validated
Jilnet 4.5Fast JSON serializer410 / 410validated
DiscUtils.Corenet 4.5Disk images / filesystems404 / 404validated
NodaMoneynet 4.5Money / currency391 / 391validated
Mono.Cecilnet 4.0IL metadata read / write353 / 353validated
ICSharpCode.SharpZipLibnet 4.5Compression / archives339 / 339validated
KellermanSoftware.Compare-NET-Objectsnet 4.6Object-graph comparison322 / 322validated
Rationalsnet 4.7Rational arithmetic317 / 317validated
Pipelines.Sockets.Unofficialnet 4.6.2Socket pipelines287 / 287validated
K4os.Compression.LZ4net 4.6.2LZ4 compression282 / 282validated
Lib.Harmonynet 4.5.2Runtime method patching276 / 276validated
EmailValidationnet 4.6.2Email validation269 / 269validated
DiffPlexnet 4.5Text diffing248 / 248validated
Ensure.Thatnet 4.6.2Guard clauses226 / 226validated
Utf8Jsonnet 4.5UTF-8 JSON serializer209 / 209validated
HtmlSanitizernet 4.6.2HTML sanitization198 / 198validated
ObjectDumpernet 4.8Object-graph dump192 / 192validated
LiteDBnet 4.5Embedded database186 / 186validated
zxcvbn-corenet 4.6.1Password-strength169 / 169validated
MiniProfiler.Sharednet 4.7.2Application profiling125 / 125validated
FluentFTPnet 4.6.2FTP client121 / 121validated
JsonSubTypesnet 4.6JSON polymorphism120 / 120validated
Sprachenet 4.5Parser combinators117 / 117validated
Namotion.Reflectionnet 4.6.2Reflection / XML docs116 / 116validated
Mono.TextTemplatingnet 4.7.2T4 templating112 / 112validated
Enums.NETnet 4.6.1Enum utilities111 / 111validated
DotNet.Globnet 4.5Glob matching110 / 110validated
GraphQL.Clientnet 4.6.1GraphQL client110 / 110validated
prometheus-netnet 4.6.2Metrics / Prometheus108 / 108validated
TimeZoneConverternet 4.6.2Timezone conversion101 / 101validated
JsonDiffPatch.Netnet 4.5JSON diff / patch93 / 93validated
LitJsonnet 4.5JSON serializer93 / 93validated
OptimizedPriorityQueuenet 4.5Priority queues89 / 89validated
HtmlAgilityPacknet 4.5HTML parsing85 / 85validated
TinyMappernet 4.0Object-to-object mapping81 / 81validated
Scrutornet 4.6.2DI assembly scanning80 / 80validated
Scientistnet 4.5.1Refactoring experiments76 / 76validated
DiffEnginenet 4.6.2Diff-tool launching74 / 74validated
Optionalnet 4.5Functional option type69 / 69validated
MarkdownSharpnet 4.0Markdown parser58 / 58validated
BCrypt.Net-Nextnet 4.6.2Password hashing (bcrypt)53 / 53validated
K4os.Hash.xxHashnet 4.6.2xxHash hashing42 / 42validated
Cyotek.Drawing.BitmapFontnet 4.8Bitmap-font parsing39 / 39validated
FastMembernet 4.6.1Fast reflection38 / 38validated
Otp.NETnet 4.6.1OTP / 2FA (TOTP/HOTP)37 / 37validated
FuzzySharpnet 4.6.1Fuzzy string matching37 / 37validated
Hashids.netnet 4.5ID obfuscation33 / 33validated
NGettextnet 4.6gettext localization30 / 30validated
Fastenshteinnet 4.6.2String distance28 / 28validated
NeoSmart.Unicodenet 4.6.1Emoji / Unicode25 / 25validated
Pluralize.NETnet 4.6Pluralization19 / 19validated
System.IO.Abstractionsnet 4.7.2Filesystem abstraction18 / 18validated
OneOfnet 4.5Discriminated unions11 / 11validated
ValueOfnet 4.8Value objects8 / 8validated
RandomDataGenerator.Netnet 4.5Random data6 / 6validated
Figglenet 4.5.2FIGlet ASCII-art text4 / 4validated

Counts are of the tests applicable to the original binary. The remainder exercise behavior that only exists in newer frameworks — features the legacy binary never had, and faithfully doesn't have after porting.

Detection in action

In a date-and-time library, the modernized build answered a basic question — which zone is UTC? — with nothing at all. Two values had been rebuilt in the wrong order, so one was still empty when the other was derived from it. Nothing failed to compile. No warning fired. ProvenPort surfaced it, pinpointed the cause, and restored the original behavior. Catching that class of silent change is the whole point: not just porting, but knowing the behavior is identical.

Beyond the test suite

A test suite only checks the inputs its authors thought to write down. ProvenPort verifies the behavior — probing each library across edge cases its own tests never reach, and comparing the original binary to the modernized build value for value. On a library with 15,000+ passing tests, that independently surfaced behavioral changes the modern runtime introduced — how an exceptional numeric value becomes a whole number, how a hash code is derived — which those tests never exercised. The distance between "the tests pass" and "we measured that it behaves identically" is exactly the risk in a migration you can't afford to get wrong.

Author–market fit

Built by someone who has spent a career inside .NET binaries.

Sébastien Lebreton — Principal Engineer working on Microsoft IDEs and developer tools, creator of Reflexil (the IL assembly editor), and co-founder of DataGalaxy. ProvenPort sits squarely at the intersection of his expertise: IL, decompilation, debuggers, and .NET runtime internals.

Read the pitch →   Get in touch