# # Configuration Options

## # Introduction

zProtect uses the YAML
open in new window 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

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 incompatibilities

Warning!

This option may cause issues with certain programs.

Blocks debugging options on terminal.

Value type: `simple option`

### # DecompilerCrasher issues

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