Save mappings/enc on disk
This commit is contained in:
@@ -78,7 +78,7 @@ public class Deob
|
||||
|
||||
int last = -1, cur;
|
||||
while ((cur = mod.runOnce()) > 0)
|
||||
{
|
||||
{
|
||||
new MultiplicationDeobfuscator().run(group);
|
||||
|
||||
new MultiplyOneDeobfuscator().run(group);
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
package net.runelite.deob.deobfuscators;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import net.runelite.deob.ClassFile;
|
||||
import net.runelite.deob.ClassGroup;
|
||||
@@ -76,6 +80,15 @@ public class RenameUnique implements Deobfuscator
|
||||
this.generatFieldNames(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.run(group);
|
||||
}
|
||||
|
||||
@@ -1,8 +1,13 @@
|
||||
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.Map;
|
||||
import net.runelite.deob.Field;
|
||||
import net.runelite.deob.gson.GsonFactory;
|
||||
import net.runelite.deob.pool.Field;
|
||||
|
||||
public class Encryption
|
||||
{
|
||||
@@ -10,6 +15,8 @@ public class Encryption
|
||||
|
||||
public void addPair(Pair pair)
|
||||
{
|
||||
assert pair.field != null;
|
||||
|
||||
Pair existing = fields.get(pair.field);
|
||||
if (existing != null)
|
||||
{
|
||||
@@ -25,4 +32,15 @@ public class Encryption
|
||||
{
|
||||
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;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import java.util.stream.Collectors;
|
||||
import net.runelite.deob.ClassFile;
|
||||
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);
|
||||
Pair p = new Pair();
|
||||
p.field = field;
|
||||
p.field = field.getPoolField();
|
||||
if (g != inverse)
|
||||
{
|
||||
p.getter = s1;
|
||||
@@ -582,7 +586,7 @@ public class ModArith implements Deobfuscator
|
||||
if (f == null)
|
||||
continue;
|
||||
|
||||
Pair p = encr.getField(f);
|
||||
Pair p = encr.getField(f.getPoolField());
|
||||
if (p == null)
|
||||
continue;
|
||||
|
||||
@@ -610,7 +614,7 @@ public class ModArith implements Deobfuscator
|
||||
if (f == null)
|
||||
continue;
|
||||
|
||||
Pair p = encr.getField(f);
|
||||
Pair p = encr.getField(f.getPoolField());
|
||||
if (p == null)
|
||||
continue;
|
||||
|
||||
@@ -653,9 +657,7 @@ public class ModArith implements Deobfuscator
|
||||
int i = 0;
|
||||
for (Pair pair : pairs)
|
||||
{
|
||||
Field field = pair.field;
|
||||
|
||||
System.out.println("Processing " + field.getName() + " getter " + pair.getter + " setter " + pair.setter);
|
||||
System.out.println("Processing " + pair.field.getNameAndType().getName() + " getter " + pair.getter + " setter " + pair.setter);
|
||||
|
||||
Encryption encr = new Encryption();
|
||||
encr.addPair(pair);
|
||||
@@ -668,6 +670,15 @@ public class ModArith implements Deobfuscator
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package net.runelite.deob.deobfuscators.arithmetic;
|
||||
|
||||
import net.runelite.deob.Field;
|
||||
import net.runelite.deob.pool.Field;
|
||||
|
||||
public class Pair
|
||||
{
|
||||
@@ -14,10 +14,13 @@ public class Pair
|
||||
public Pair(Pair one, Pair two)
|
||||
{
|
||||
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);
|
||||
setter = DMath.multiply(one.setter, two.setter);
|
||||
field = one.field;
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
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.Map;
|
||||
import net.runelite.deob.gson.GsonFactory;
|
||||
import net.runelite.deob.pool.Class;
|
||||
import net.runelite.deob.pool.Field;
|
||||
import net.runelite.deob.pool.Method;
|
||||
@@ -34,4 +40,15 @@ public class NameMappings
|
||||
{
|
||||
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