zProtect/docs/config.md
2023-01-29 09:27:22 -03:00

7 KiB

Configuration Options

Introduction

zProtect uses the YAML data serialization language for configuring the behavior of the zProtect obfuscator. It is possible to hand-write the configuration file to upload on the web interface, however, you may wish to modify the example file or generate one using the command line tool.

Value Types

There are a few value types used in the zProtect configuration, which are listed below.

Boolean

Only accepts true and false as the value.

For example:

# A key with value as true
key1: true

# A key with value as false
key2: false

String

Accepts any text character.

For example:

# A key with a string value
key: value

String Array

A list of strings, separated by a newline and prefixed with a dash.

For example:

# An array with entries
key:
- something
- another thing

# An empty array
empty: []

Simple Option

A string array with a boolean value enabled.

For example:

# Option enabled
key:
  enabled: true

Option with Path

A string array with a boolean key enabled and a string key path.

For example:

# Option enabled
key:
  enabled: true
  path: something

Options

These options specify runtime information and general configuration.

libraries

Dependencies required to obfuscate your jar to prevent "Not found" errors.

Value type: string array

exclusions

Class files and directories that should be ignored by the obfuscator. They will not have any obfuscation applied to them.

Value type: string array

ForceExclusions

::: tip Note Transformer priority will fix this in the future. ::: Class files and directories that should be blacklisted by the obfuscator before processing. This will prevent issues with exclusions if the regular exclusions fail for some unknown reason.

Value type: string array

Watermark

Adds a watermark to the obfuscated JAR for advertisement. Only removable for users with a Commercial License.

Value type: boolean

Transformers

These options specify wherether to enable available obfuscation techniques.

AntiDebug

::: tip Warning! This option may cause issues with certain programs. :::

Blocks debugging options on terminal.

Value type: simple option

DecompilerCrasher

::: tip Warning! This option is very buggy at the moment and will likely cause problems. You are strongly advised not to use this. :::

Manipulates instructions to crash decompilers.

Value type: simple option

BadAnnotationCrasher

Manipulates annotations to break bad decompilers. This should not cause any major issues.

Value type: simple option

Flow

Adds fake jumps, and such to code.

Value type: simple option

Renamers

Renames various components of your JAR's contents.

ClassRenamer

Renames class files.

Value type: option with path

FieldRenamer

Renames field names.

Value type: simple option

LocalVariableRenamer

Renames local variables.

Value type: simple option

MethodRenamer

Renames methods.

Value type: simple option

Optimization

Modifies or removes various aspects of your jar file to make debugging harder.

EnumOptimiser

Removes all clone call(s) and returns an array to optimize enum values.

Value type: simple option

FinalRemover

Removes finals from your code.

Value type: simple option

HideClassMembers

Mark classes as synthetic to hide them from bad decompilers.

Value type: simple option

InsnRemover

Removes the instructions const_. and tableswitch.

Value type: simple option

KotlinMetadataRemover

Removes Kotlin-specific Metadata such as NotNull, Nullable, etc.

Value type: simple option

NOPInsnRemover

Removes extended type information.

Value type: simple option

RemoveSignatures

Removes the signature attribute from classes and methods.

Value type: simple option

Poolers

Move values into an array to make the resulting JAR harder.

NumberPooler

Moves numbers into an array.

Value type: simple option

StringPooler

Moves strings into an array.

Value type: simple option

Shrinking

Remove various attributes to make it harder to understand the resulting JAR.

LineNumberRemover

Removes line numbers so StackTraces show (Unknown) on errors.

Value type: simple option

LocalVariableRemover

Removes the local variable attribute from methods.

Value type: simple option

RemoveInnerClasses

Removes various attributes such as outerClass, outerMethod, etc. from the class.

Value type: simple option

SourceDebugRemover

Removes the SourceDebug attribute from the class.

Value type: simple option

SourceFileRemover

Removes the SourceFile attribute from the class.

Value type: simple option

Shufflers

Randomly shuffles various elements of your jar file to make it more difficult to find them.

ShuffleFields

Randomly shuffles elements in the mutable list of fields.

Value type: simple option

ShuffleMethods

Randomly shuffles elements in the mutable list of methods.

Value type: simple option

ShuffleClasses

Randomly shuffles elements in the mutable list of classes.

Value type: simple option

Example

Below is a fully functional example configuration file with some zProtect transformers enabled and some disabled.

# zProtect Configuration File Version 1
# Reference: https://docs.zprotect.dev/config.html

# May cause issues with certain programs.
antiDebug:
  enabled: false

# Strongly advised not to use this.
decompilerCrasher:
  enabled: false

badAnnotationCrasher:
  enabled: true

flow:
  enabled: false

classRenamer:
  enabled: false
  path: ""

fieldRenamer:
  enabled: false

localVariableRenamer:
  enabled: false

methodRenamer:
  enabled: false

# Optimization
enumOptimiser:
  enabled: false

finalRemover:
  enabled: false

hideClassMembers:
  enabled: false

insnRemover:
  enabled: false

kotlinMetadataRemover:
  enabled: false

NOPInsnRemover:
  enabled: false

removeSignatures:
  enabled: false

# Poolers
numberPooler:
  enabled: false

stringPooler:
  enabled: false

# Shrinking
lineNumberRemover:
  enabled: false

localVariableRemover:
  enabled: false

removeInnerClasses:
  enabled: false

sourceDebugRemover:
  enabled: false

sourceFileRemover:
  enabled: false

# Shufflers
shuffleFields: false

shuffleMethods: false

shuffleClasses: false