Contact Us

Get in Touch with Us

Questions about HashGuard, licences or your build? Send us a message and we will answer by email.

  • Email replies
  • No account needed
  • Read by the team

Sales

Ask about HashGuard licences and which plan fits your project.

Talk to sales

Help & support

Stuck on the CLI, the Gradle plugin or a build that misbehaves? Email us.

Contact Support

Say hello on X

Product news and quick questions are welcome on the studio account.

Open X

FAQ’s

Frequently Asked Questions

A Java bytecode obfuscator by Polar Studios, built on ASM 9.9. It runs as a headless CLI or through a Gradle plugin, and works on plain JVM bytecode with Minecraft 1.7.10 clients on Java 25 as the first target.

Minecraft 1.7.10 clients running on Java 25 are the primary target, and any JVM bytecode can be processed. String encryption has a Java 8 compatible invokedynamic fallback, and the engine itself is built with a Java 25 toolchain.

magicCrypter replaces the CAFEBABE header and encrypts every class with AES-128-CTR and zlib. It requires the PLR JVM (PLR-JAVA-25), a patched JVM that decrypts classes at load time with the slot keys. Without those keys the classes fail with a ClassFormatError.

Renaming changes names, so anything looked up by name must be kept. Annotate it with @KeepName or @KeepSignature, use @NoObfuscation or @ExcludeTransformers, or add an exclude rule. The access transformer already skips @SerializedName fields so Gson keeps working.

Apply the fr.polargames.plr-obfuscator plugin and set inputJar, configFile and slotCount in the plrObfuscator block. Then run ./gradlew plrObfuscate, which writes the obfuscated jars to build/plr-obfuscated.

slotCount (1 to 100) makes one run produce that many jars. Each slot gets its own random seed and derived AES and HMAC keys, written to keys-manifest.json. Seeds are never stored, so every build rotates the keys.

The CLI validates your customer licence once before any obfuscation work starts, including multislot runs. Provide the key with PLR_LICENCE_KEY or the OS keyring. The source repository itself is MIT licensed, as a heavily rewritten fork of Bozar.

45 transformers run in six phases, from renaming and string encryption to control-flow flattening, invokedynamic indirection, ghost members, anti-tamper and integrity checks. Profiles from Ghost to Extreme set the baseline, and explicit options override it.

Some transformers add runtime cost. maxOutputRatio caps the output at a multiple of the input instruction count (the sample config uses 2.0), and heavy passes such as flattening stop once the budget is spent. Flattening loops is a separate option because it costs more on hot loops.

Set mappingOutput and HashGuard writes an old-to-new name mapping as JSON. You can feed it to JProfiler or any other tooling to translate obfuscated names back.