Changelog

What’s New in HashGuard

Stay updated with the latest features, improvements, and fixes added to HashGuard regularly.

New

Obfuscation profiles from Ghost to Extreme

One profile key now sets a baseline for every option, from Ghost to Extreme, and anything you write explicitly still wins.

One key, a sensible baseline

The profile option accepts Ghost, Low, Medium, High or Extreme and sets the starting value of every boolean option. Explicit keys in the JSON always override the profile.

Release 26.10.0 • Profiles

Obfuscation
Profiles

A budget for the heavy passes

maxOutputRatio caps the output at a multiple of the input instruction count. When the budget is spent, heavy transformers such as control-flow flattening stop on their own instead of inflating the jar.

Finer control over what is protected

  • Exclusion rules take an optional token prefix, so flatten:net.minecraft.** skips flattening only.
  • A leading ! re-includes a pattern inside a broader exclusion.
  • Wildcards match any depth, and pkg.ClassName** excludes a class with all its members.
  • A ready-made exclusion preset ships for Minecraft 1.7.10.

mappingOutput still exports an old-to-new name mapping, so obfuscated stack traces stay decodable.

Improved

One Gradle task, one jar per slot

The plrObfuscate task takes a jar and a config and writes one protected jar per slot, plus the manifest of derived keys.

One command, up to a hundred slots

Set slotCount between 1 and 100 and run ./gradlew plrObfuscate. Every slot is obfuscated in parallel with its own derived keys and written to build/plr-obfuscated as client_0.jar up to client_N.jar.

Release 26.9.2 • Gradle plugin

Gradle
Plugin

Fresh keys on every run

Seeds are never persisted: each plrObfuscate run generates new keys and records them in keys-manifest.json for the delivery pipeline.

Fixed

Gson and Java 8 stay compatible

Two compatibility details that protected jars depend on: Gson-annotated fields and string decryption on older JVMs.

Gson fields keep their names

The access transformer skips fields annotated with @SerializedName, so Gson 2.14+ deserialization keeps working on obfuscated classes.

Release 26.9.0 • Compatibility

Compatibility
Fixes

String decryption on Java 8

String encryption uses privateLookupIn on Java 9 and later and falls back to an invokedynamic decryptor that Java 8 accepts.

Get Started

Start Protecting Your Builds

Leave your email and Polar Studios will get back to you about access. The CLI checks your licence once, before any obfuscation work starts.

  • Licence checked once per run
  • Gradle plugin included
  • Works on any JVM bytecode

45

Transformers

6

Pipeline phases

5

Built-in profiles

100

Slot jars per build, max