Save mappings/enc on disk
This commit is contained in:
@@ -1,6 +1,10 @@
|
|||||||
package net.runelite.deob.deobfuscators;
|
package net.runelite.deob.deobfuscators;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
import net.runelite.deob.ClassFile;
|
import net.runelite.deob.ClassFile;
|
||||||
import net.runelite.deob.ClassGroup;
|
import net.runelite.deob.ClassGroup;
|
||||||
@@ -76,6 +80,15 @@ public class RenameUnique implements Deobfuscator
|
|||||||
this.generatFieldNames(mappings, group);
|
this.generatFieldNames(mappings, group);
|
||||||
this.generateMethodNames(mappings, group);
|
this.generateMethodNames(mappings, group);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
mappings.save(new File("d:/rs/07/uniquemappings.json"));
|
||||||
|
}
|
||||||
|
catch (IOException ex)
|
||||||
|
{
|
||||||
|
Logger.getLogger(RenameUnique.class.getName()).log(Level.SEVERE, null, ex);
|
||||||
|
}
|
||||||
|
|
||||||
renamer = new Renamer(mappings);
|
renamer = new Renamer(mappings);
|
||||||
renamer.run(group);
|
renamer.run(group);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,13 @@
|
|||||||
package net.runelite.deob.deobfuscators.arithmetic;
|
package net.runelite.deob.deobfuscators.arithmetic;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileWriter;
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import net.runelite.deob.Field;
|
import net.runelite.deob.gson.GsonFactory;
|
||||||
|
import net.runelite.deob.pool.Field;
|
||||||
|
|
||||||
public class Encryption
|
public class Encryption
|
||||||
{
|
{
|
||||||
@@ -10,6 +15,8 @@ public class Encryption
|
|||||||
|
|
||||||
public void addPair(Pair pair)
|
public void addPair(Pair pair)
|
||||||
{
|
{
|
||||||
|
assert pair.field != null;
|
||||||
|
|
||||||
Pair existing = fields.get(pair.field);
|
Pair existing = fields.get(pair.field);
|
||||||
if (existing != null)
|
if (existing != null)
|
||||||
{
|
{
|
||||||
@@ -25,4 +32,15 @@ public class Encryption
|
|||||||
{
|
{
|
||||||
return fields.get(field);
|
return fields.get(field);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void save(File file) throws IOException
|
||||||
|
{
|
||||||
|
Gson g = GsonFactory.gson;
|
||||||
|
String str = g.toJson(fields);
|
||||||
|
|
||||||
|
try (FileWriter fw = new FileWriter(file))
|
||||||
|
{
|
||||||
|
fw.write(str);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,15 @@
|
|||||||
package net.runelite.deob.deobfuscators.arithmetic;
|
package net.runelite.deob.deobfuscators.arithmetic;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
import java.util.logging.Logger;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import net.runelite.deob.ClassFile;
|
import net.runelite.deob.ClassFile;
|
||||||
import net.runelite.deob.ClassGroup;
|
import net.runelite.deob.ClassGroup;
|
||||||
@@ -445,7 +449,7 @@ public class ModArith implements Deobfuscator
|
|||||||
{
|
{
|
||||||
System.out.println("GOOD " + field.getName() + " " + s1 + " * " + s2 + " = " + smallest + " " + g + " " + g2);
|
System.out.println("GOOD " + field.getName() + " " + s1 + " * " + s2 + " = " + smallest + " " + g + " " + g2);
|
||||||
Pair p = new Pair();
|
Pair p = new Pair();
|
||||||
p.field = field;
|
p.field = field.getPoolField();
|
||||||
if (g != inverse)
|
if (g != inverse)
|
||||||
{
|
{
|
||||||
p.getter = s1;
|
p.getter = s1;
|
||||||
@@ -582,7 +586,7 @@ public class ModArith implements Deobfuscator
|
|||||||
if (f == null)
|
if (f == null)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
Pair p = encr.getField(f);
|
Pair p = encr.getField(f.getPoolField());
|
||||||
if (p == null)
|
if (p == null)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@@ -610,7 +614,7 @@ public class ModArith implements Deobfuscator
|
|||||||
if (f == null)
|
if (f == null)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
Pair p = encr.getField(f);
|
Pair p = encr.getField(f.getPoolField());
|
||||||
if (p == null)
|
if (p == null)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@@ -653,9 +657,7 @@ public class ModArith implements Deobfuscator
|
|||||||
int i = 0;
|
int i = 0;
|
||||||
for (Pair pair : pairs)
|
for (Pair pair : pairs)
|
||||||
{
|
{
|
||||||
Field field = pair.field;
|
System.out.println("Processing " + pair.field.getNameAndType().getName() + " getter " + pair.getter + " setter " + pair.setter);
|
||||||
|
|
||||||
System.out.println("Processing " + field.getName() + " getter " + pair.getter + " setter " + pair.setter);
|
|
||||||
|
|
||||||
Encryption encr = new Encryption();
|
Encryption encr = new Encryption();
|
||||||
encr.addPair(pair);
|
encr.addPair(pair);
|
||||||
@@ -668,6 +670,15 @@ public class ModArith implements Deobfuscator
|
|||||||
|
|
||||||
System.out.println(pairs);
|
System.out.println(pairs);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
encryption.save(new File("d:/rs/07/encryption.json"));
|
||||||
|
}
|
||||||
|
catch (IOException ex)
|
||||||
|
{
|
||||||
|
Logger.getLogger(ModArith.class.getName()).log(Level.SEVERE, null, ex);
|
||||||
|
}
|
||||||
|
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package net.runelite.deob.deobfuscators.arithmetic;
|
package net.runelite.deob.deobfuscators.arithmetic;
|
||||||
|
|
||||||
import net.runelite.deob.Field;
|
import net.runelite.deob.pool.Field;
|
||||||
|
|
||||||
public class Pair
|
public class Pair
|
||||||
{
|
{
|
||||||
@@ -14,10 +14,13 @@ public class Pair
|
|||||||
public Pair(Pair one, Pair two)
|
public Pair(Pair one, Pair two)
|
||||||
{
|
{
|
||||||
assert one.getType() == two.getType();
|
assert one.getType() == two.getType();
|
||||||
assert one.field == two.field;
|
assert one.field != null;
|
||||||
|
assert two.field != null;
|
||||||
|
assert one.field.equals(two.field);
|
||||||
|
|
||||||
getter = DMath.multiply(one.getter, two.getter);
|
getter = DMath.multiply(one.getter, two.getter);
|
||||||
setter = DMath.multiply(one.setter, two.setter);
|
setter = DMath.multiply(one.setter, two.setter);
|
||||||
|
field = one.field;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Class getType()
|
public Class getType()
|
||||||
|
|||||||
20
src/main/java/net/runelite/deob/gson/ClassSerializer.java
Normal file
20
src/main/java/net/runelite/deob/gson/ClassSerializer.java
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
package net.runelite.deob.gson;
|
||||||
|
|
||||||
|
import com.google.gson.JsonElement;
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
import com.google.gson.JsonSerializationContext;
|
||||||
|
import com.google.gson.JsonSerializer;
|
||||||
|
import java.lang.reflect.Type;
|
||||||
|
import net.runelite.deob.pool.Class;
|
||||||
|
|
||||||
|
public class ClassSerializer implements JsonSerializer<Class>
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public JsonElement serialize(Class src, Type typeOfSrc, JsonSerializationContext context)
|
||||||
|
{
|
||||||
|
JsonObject object = new JsonObject();
|
||||||
|
object.addProperty("name", src.getName());
|
||||||
|
return object;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
22
src/main/java/net/runelite/deob/gson/FieldSerializer.java
Normal file
22
src/main/java/net/runelite/deob/gson/FieldSerializer.java
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
package net.runelite.deob.gson;
|
||||||
|
|
||||||
|
import com.google.gson.JsonElement;
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
import com.google.gson.JsonSerializationContext;
|
||||||
|
import com.google.gson.JsonSerializer;
|
||||||
|
import java.lang.reflect.Type;
|
||||||
|
import net.runelite.deob.pool.Field;
|
||||||
|
|
||||||
|
public class FieldSerializer implements JsonSerializer<Field>
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public JsonElement serialize(Field src, Type typeOfSrc, JsonSerializationContext context)
|
||||||
|
{
|
||||||
|
JsonObject object = new JsonObject();
|
||||||
|
object.addProperty("class", src.getClassEntry().getName());
|
||||||
|
object.addProperty("name", src.getNameAndType().getName());
|
||||||
|
object.add("type", context.serialize(src.getNameAndType().getDescriptorType()));
|
||||||
|
return object;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
18
src/main/java/net/runelite/deob/gson/GsonFactory.java
Normal file
18
src/main/java/net/runelite/deob/gson/GsonFactory.java
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
package net.runelite.deob.gson;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import com.google.gson.GsonBuilder;
|
||||||
|
import net.runelite.deob.pool.Field;
|
||||||
|
import net.runelite.deob.pool.Method;
|
||||||
|
import net.runelite.deob.pool.Class;
|
||||||
|
|
||||||
|
public class GsonFactory
|
||||||
|
{
|
||||||
|
public static final Gson gson = new GsonBuilder()
|
||||||
|
.registerTypeAdapter(Field.class, new FieldSerializer())
|
||||||
|
.registerTypeAdapter(Method.class, new MethodSerializer())
|
||||||
|
.registerTypeAdapter(Class.class, new ClassSerializer())
|
||||||
|
.enableComplexMapKeySerialization()
|
||||||
|
.setPrettyPrinting()
|
||||||
|
.create();
|
||||||
|
}
|
||||||
23
src/main/java/net/runelite/deob/gson/MethodSerializer.java
Normal file
23
src/main/java/net/runelite/deob/gson/MethodSerializer.java
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
package net.runelite.deob.gson;
|
||||||
|
|
||||||
|
import com.google.gson.JsonElement;
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
import com.google.gson.JsonSerializationContext;
|
||||||
|
import com.google.gson.JsonSerializer;
|
||||||
|
import java.lang.reflect.Type;
|
||||||
|
import net.runelite.deob.pool.Method;
|
||||||
|
|
||||||
|
|
||||||
|
public class MethodSerializer implements JsonSerializer<Method>
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public JsonElement serialize(Method src, Type typeOfSrc, JsonSerializationContext context)
|
||||||
|
{
|
||||||
|
JsonObject object = new JsonObject();
|
||||||
|
object.addProperty("class", src.getClassEntry().getName());
|
||||||
|
object.addProperty("name", src.getNameAndType().getName());
|
||||||
|
object.add("type", context.serialize(src.getNameAndType().getDescriptor()));
|
||||||
|
return object;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,7 +1,13 @@
|
|||||||
package net.runelite.deob.util;
|
package net.runelite.deob.util;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import com.google.gson.GsonBuilder;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileWriter;
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import net.runelite.deob.gson.GsonFactory;
|
||||||
import net.runelite.deob.pool.Class;
|
import net.runelite.deob.pool.Class;
|
||||||
import net.runelite.deob.pool.Field;
|
import net.runelite.deob.pool.Field;
|
||||||
import net.runelite.deob.pool.Method;
|
import net.runelite.deob.pool.Method;
|
||||||
@@ -34,4 +40,15 @@ public class NameMappings
|
|||||||
{
|
{
|
||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void save(File file) throws IOException
|
||||||
|
{
|
||||||
|
Gson g = GsonFactory.gson;
|
||||||
|
String str = g.toJson(map);
|
||||||
|
|
||||||
|
try (FileWriter fw = new FileWriter(file))
|
||||||
|
{
|
||||||
|
fw.write(str);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user