Skip to content

Latest commit

 

History

History
103 lines (96 loc) · 2.45 KB

Usage.md

File metadata and controls

103 lines (96 loc) · 2.45 KB

Usage

Important Parameters

Argument Meaning Example
-s <arg>
--srcfile <arg>
Required
Obfusctaed java Source File (.jar)
-s obfuscated.jar
-o <arg>
--outputfile <arg>
Required
Deobfuscated (output) file (.jar)
-o deofuscated.jar
-m <arg>
--mapping <arg>
Required (Mutually exclusive to patchfiledir, but one is required)
Mappingfile
-m mappings.txt
-p <arg>
--patchfiledir <arg>
Required (Mutually exclusive to mapping, but one is required)
Directory with PatchFiles (.json)
-p patchfileFolder

For the rest call --help

Example

  • MappingFile
-s
"client.jar"
-o
"deobf_client.jar"
-m
"mappings_client.txt"
-ec
net/minecraft/gametest/
  • patchfile directory / json files in a directory
-s
"client.jar"
-o
"deobf_client.jar"
-p
"patchfilesdir_client"
-ec
net/minecraft/gametest/

How it works

Input

The program gets the required files:

  • the obfuscated and packed .jar
  • the mappings
    • a single mapping file - provided in proguards txt format
      Example: mapping.txt
# comment
test.package.abc -> cve:
    20:21:void youJustLostTheGame() -> a
    24:24:double getTime() -> b
test.def -> cvf:
    org.apache.logging.log4j.Logger LOGGER -> a
    int source -> b
    java.util.concurrent.atomic.AtomicBoolean initialized -> c
    int streamingBufferSize -> d
    31:37:int create() -> a
    22:42:void <init>(int) -> <init>
    45:61:void destroy() -> b
    64:65:void play() -> c
    int getPixelWidth() -> d
    68:71:int getState() -> j
    17:17:void <clinit>() -> <clinit>
  • json files in a directory
    Example: zx.json
{
  "Name": "abc.SoundEvent",
  "ObfName": "zx",
  "Fields": [
    {
      "Type": "abc.ResourceLocation",
      "Name": "location",
      "ObfName": "a"
    }
  ],
  "Methods": [
    {
      "Name": "<init>",
      "ObfName": "<init>",
      "ReturnType": "void",
      "Parameters": [
        {
          "Type": "abc.ResourceLocation"
        }
      ]
    },
    {
      "Name": "getLocation",
      "ObfName": "a",
      "ReturnType": "abc.ResourceLocation",
      "Parameters": []
    }
  ]
}

Processing

  • The jar is extracted
  • The extracted/obfuscated .class(es) are visited, the obfuscated parts are replaced by deobfuscated ones and rewritten
  • A new jar is packed from the fixed .class(es)

Output

A deobfuscated jar is created