FAQ
Short answers to the questions we get most.
Protection
Is my code "unbreakable" after this?
No — and anyone who says their Java obfuscator makes code unbreakable is lying. Compiled software can always be reversed with enough effort. What Lock Master does is push that effort past the point where it's worth it: strings encrypted, structure rewritten, classes optionally sealed, and the whole thing hostile to analysis at rest and while running.
What actually protects the most?
String encryption and class encryption (classGuard)are the heaviest hitters — with classes sealed there's no loadable bytecode on disk to decompile. Flow obfuscation makes whatever is readable unpleasant to follow.
Will it stop a decompiler?
With strings gone and flow rewritten, decompilers produce garbage or bail out on the hard methods. With classGuard on, they have nothing to open at all.
Is my source code uploaded or stored?
You upload a compiled JAR, not source. It's processed and the result handed back; the transformation is static analysis and your classes are never executed on our side.
Using it
Do I need to understand bytecode?
No. Pick a preset, turn on string encryption and rename, add a couple of keep rules for your main class and public API, and you're protected. The depth is there if you want it.
Can I use one key across my laptop and CI?
Give each machine its own seat key — it's cleaner and you can rotate or revoke one without touching the others. Your plan sets how many seats you get.
What's a token again?
Tokens pay for obfuscation jobs, metered by build size: a job up to 10 MB costs 1 token, then +1 per extra 10 MB (1 + ceil((sizeMB − 10) / 10)). Plans grant monthly tokens (use-it-or-lose-it); token packs are one-off and never expire. An empty config is rejected before it can spend anything.
Can I keep the same obfuscated names across releases?
Renaming is deterministic when you set a seed, which keeps your public API names stable across builds — important for plugins shipping updates.
Troubleshooting
My plugin/app broke after obfuscation.
Almost always a reflection or by-name lookup whose target got renamed. Add those classes, packages or members to keep. Common culprits: your plugin main class, event listeners registered by name, config-mapped classes, and anything youClass.forName or look up reflectively.
My plugin won't load with classGuard on.
In PLUGIN mode you must set pluginMainClass to your main class's internal name and add it to excludeClasses. Test the sealed build on a real server before shipping.
It says "config enables no technique".
An empty (or one with everything off) is rejected on purpose — it would do nothing and waste a token. Enable at least one technique.
The build got much bigger.
Flow obfuscation adds size — roughly 1.4× (light) to 3.4× (aggressive). Drop to a lighter preset if size matters more than depth.
Something timing-sensitive misbehaves.
Rare, but if you have real-time thread coordination, keep timingSafeIndy on (the default). See flow.
Account & billing
How do I get access?
It's invite-only: sign in with Google, request access, wait for approval. SeeAccess & accounts.
How do I cancel?
From billing, open Manage subscription (Stripe). You keep access until the end of the paid period.
Do unused monthly tokens roll over?
No — monthly tokens reset each cycle. Token packs never expire and are spent only after the monthly ones run out.