Config

GhastAbout 2 min

Config

Here you'll learn everything about what the configuration has to offer. Make sure to read these details with a very keen eye. If you encounter any issues, please contact support. For premium members, you are entitled to a free configuration service by our team.

Basic of the configuration

The basis of the configuration is based on lightbend configopen in new window. This means by default, we support the three following formats: Java Properties, JSON, and HOCON.

By principle, we highly recommend using HOCON as it is simpler, more elegant and all-round easy to use. See attached the default config:

exempt: []

libs: []

stringEncryption {
  type: STANDARD
  enabled: true
  exempt: []
}

numberEncryption {
  enabled: true
  exempt: []
}

intAnnotationEncryption {
  enabled: true
  exempt: []
}

stringAnnotationEncryption {
  enabled: true
  exempt: []
}

exceptionReturn {
  enabled: true
  exempt: []
}

flowCondition {
  enabled: true
  exempt: []
}

flowException {
  enabled: true
  strength: AGGRESSIVE
  exempt: []
}

flowRange {
  enabled: true
  exempt: []
}

flowFactoryMaker {
  enabled: true
  exempt: []
}

flowSwitch {
  enabled: true
  exempt: []
}

outliner {
  enabled: true
  exempt: []
}

ahegao {
  enabled: true
  exempt: []
}

native: {
  enabled: false
  exempt: []
}

driver: {
  enabled: false
}

reference {
  enabled: false
}

fileCrasher: {
  enabled: false
}

classRenamer {
  enabled: false
  type: CUSTOM
  prefix: "skido/"
  chars: [
    "K"
    "oO",
    "o0"
  ]
  depth: 3
}

methodRenamer {
  enabled: false
  type: CUSTOM
  chars: [
    "K"
    "oO",
    "o0"
  ]
  depth: 3
}

fieldRenamer {
  enabled: false
  type: ALPHABETICAL
}

Exemptions

Using exemptions is identical to how these were previously done in the old system. To learn more about exemptions, navigate to the page

Note

Java parses string by sanitizing the backwards slash. This means you MUST double all backward slashes

Excluding a class

As a starting basis, to exclude a specific class, you must use the class regex exemption:

class{^my\/class}

To fit this in the config, you need to pass it as a string.

exempt: [
    "class{^my\\/class}"
]

Excluding a method

As a starting basis, to exclude a specific method, you must use the class method exemption:

method{^myMethod}

To fit this in the config, you need to pass it as a string.

exempt: [
    "method{^myMethod}"
]

Excluding a method in a specific class

Just as we learnt previously, to exclude a method and a class we must do the following:

class{^my\/class}
method{^myMethod}

Now, to exclude a method IN that specific class, all that is needed to be done is for the two to be chained up in a single line, as such:

class{^my\/class} method{^myMethod}

Hence in the config, it'd be as follow:

exempt: [
    "class{^my\/class} method{^myMethod}"
]

Libraries

Libraries are an important aspect of computing the classpath and ensuring maximum protection for your software. In this instance, you must provide a valid Java path argument as a string

Here below is the implementation code:

public File[] getLibs() {
    return this.getStringList("libraries", Collections.emptyList())
                .stream()
                .map(File::new)
                .distinct()
                .toArray(File[]::new);
}

Here below is an example of valid java paths:

C:\test.jar
test.jar
./test.jar
/Home/test.jar

In the config, these would be represented as follows:

libraries [
    "C:\\test.jar",
    "test.jar",
    "./test.jar",
    "/Home/test.jar"
]

Driver

The driver is the hardening part of Skidfuscator. This feature is reserved to Premium. In a nutshell, per obfuscation, a new driver is generated and compiled for the following architectures:

Operating SystemSupported Architectures
Windowsx64_86
MacOSx64_86, AARCH64 (ARM)
Linuxx64_86 (AMD64)

To disable this feature (⚠️ this significantly decreases obfuscation strength), you must toggle the boolean:

driver: false

Transformers

You can individually enable/disable each transformer.

String Encryption

The string encryption transformer transforms every string into a specific method call, with the purpose of hiding it in runtime. This can be practical for non-sensitive URLs, private keys, etc...

Note

You should not trust the client as a basis. Please do not rely on String encryption as the sole protection for your software. By default, you should assume that a talented enough reverse-engineer could gain access to these with enough time and patience.

There are currently two modes for String encryption: STANDARD and POLYMORPHIC

Number Encryption

The number encryption transformer encrypts any integer-based numeral to be hidden. This is perfect for uglifying the code in general and making it more of a hardship for reverse-engineers to obtain a clean source code. This furthermore reinforces any boolean-based conditionals.