API

Obfuscate assemblies from CI, build scripts, or your own tooling. Pro plan required.

API access is part of the Pro plan. After subscribing, your key will appear on your account page.

Build client for CI

Download the .NET 8 build client (1.45.0) to upload one DLL or EXE from a build script. Requires Pro and the .NET 8 runtime. This client uses our hosted API; your assembly is uploaded to FreeObfuscator.

Set FREEOBFUSCATOR_API_KEY through your CI secret store, then run:

dotnet FreeObfuscator.BuildClient.dll MyApp.dll MyApp.protected.dll --encrypt-strings --control-flow

The client refuses to overwrite files, validates the returned managed assembly and returns a nonzero exit code on failure. It sends no automatic retries. Use --include-map with an output ending in .zip to keep the protected binary and private map together. Always run your application's tests against the protected output before publishing.

dotnet FreeObfuscator.BuildClient.dll MyApp.dll MyApp.build.zip --encrypt-strings --include-map
dotnet FreeObfuscator.BuildClient.dll --decode MyApp.map.txt crash.txt decoded.txt

Extract the ZIP locally and store the map privately with that exact release; never distribute it to customers. Offline decoding needs no API key and sends no map or crash log over the network.

POST /api/v1/obfuscate

Upload a single .NET assembly (up to 100 MB). Responds with the obfuscated binary as application/octet-stream.

Headers

  • X-Api-Key: your Pro API key (fo_live_…)

Form fields

  • file: the .dll or .exe (multipart/form-data)
  • renamePublic: true/false — obfuscate public names. Applied only to assemblies with an entry point (applications); ignored for libraries.
  • encryptStrings: true/false — encrypt string literals so URLs and messages are not readable in a decompiler.
  • controlFlow: true/false — reorder method bodies into tangled goto flow. Methods with exception handlers are left unchanged.
  • hideReferences: true/false — route calls to external static methods through generated proxies so the real API is hidden at the call site.
  • virtualize: true/false — compile methods you mark with a [Virtualize] attribute (or [Obfuscation(Feature="virtualization")]) into a private VM; only marked methods are affected. Much slower at runtime, so reserve it for a few critical methods.
  • integrityCheck: true/false — add a tamper-detection self-check over the virtualized bytecode, coupling the virtualized methods so patching the compiled output breaks them rather than running altered logic. Only has an effect together with virtualize.
  • antiIldasm: true/false — add SuppressIldasmAttribute to block the legacy ildasm tool.
  • includeMap: true/false — return a .zip containing the obfuscated assembly plus a .map.txt rename map, instead of the raw binary. The map lets you decode crash stack traces back to your original names; it is generated in memory and never stored on our servers. The response Content-Type is application/zip when this is set.

Example

curl -X POST https://freeobfuscator.com/api/v1/obfuscate \
  -H "X-Api-Key: fo_live_xxxxxxxxxxxxxxxx" \
  -F "[email protected]" \
  -F "renamePublic=true" \
  -o MyApp.obfuscated.exe

Responses

StatusMeaning
200Obfuscated binary in the response body (a .zip with the assembly and .map.txt when includeMap=true)
401Missing or invalid API key
402Key belongs to a non-active subscription
413File exceeds the tier limit
415Unsupported file type
422Obfuscation failed (invalid .NET assembly)
503Server busy — retry after the Retry-After interval