DLL obfuscator
Obfuscate a .NET library and keep it callable — the public API is preserved, everything private is scrambled. Free, in the browser.
A library's public API is its contract — so it is kept intact
If you ship a .dll that other code calls, renaming a public type or method would break
every caller. So for a library the obfuscator renames private and internal members
— the implementation detail an attacker actually wants — while leaving the public surface
exactly as it is. Your NuGet package or SDK still binds; its internals no longer read like
source.
This includes nested public types, which are easy to get wrong: a public
Container.Options stays bindable. (Renaming nested public types by mistake was a real
bug we fixed — see the changelog.)
When you actually want more
If the DLL is a private implementation library that nothing outside your solution references by name, you lose nothing by scrambling more of it — but the safe default for a distributed library is to preserve the public API. The tool decides "app vs library" by the presence of an entry point, not the file name.
How to obfuscate a .NET DLL
- Build the library in Release.
- Upload
YourLib.dllfrombin/Release/…. - Download
YourLib.obfuscated.dll— public API unchanged, internals renamed. - Reference it from a consumer and run your tests; watch for reflection or serialization that looks up internal members by name (what breaks, and why).
What it does and does not do
Renaming removes readable structure; string literals stay visible unless you enable string encryption (Pro); it is not a licensing or anti-tamper system. The threat model is honest about the limits, and the comparisons show where paid tools go further.
Shipping an application rather than a library? The EXE obfuscator page covers renaming an app's public names and the .NET Core launcher gotcha.