Protection Presets
A preset is a protection level that you choose explicitly. Instead of toggling every
protection in protections.json by hand, you pick one level and BitMono enables a curated
set of protections for you.
Presets are always chosen by you, never auto-detected. BitMono cannot reliably tell which runtime your app targets — Mono runs ordinary .NET assemblies, so a Mono/Unity build looks identical to a .NET Core/Framework one — so the choice of runtime-specific protections stays in your hands. BitMono will still warn you (without blocking) when a preset enables a protection intended for a different runtime than the one your module targets.
Levels
Preset |
Protections enabled |
|---|---|
|
Uses |
|
|
|
Minimal + |
|
Balanced + |
Note
Maximum includes the Mono-only packers (BitDotNet, BitDecompiler), the native
UnmanagedString, and the runtime hookers (DotNetHook, CallToCalli). These are the
most aggressive and the most runtime-specific — make sure they fit your target before shipping.
See Protection Runtime Moniker and Native Code.
How to choose a preset
Command line (wins over the config file):
BitMono.CLI --file MyApp.dll --preset Balanced
Configuration file (obfuscation.json):
{
"Preset": "Balanced"
}
Precedence
When BitMono decides which protections to run, it uses the first of these that applies:
An explicit protections list on the command line (
-p/--protections).--preseton the command line."Preset"inobfuscation.json.protections.json(used when the preset isCustomor unset).
So a preset overrides protections.json, an explicit -p list still wins over a preset,
and the default Custom keeps today’s behaviour.