Save mappings/enc on disk

This commit is contained in:
Adam
2015-11-20 13:38:08 -05:00
parent 050fa333fa
commit 933648c11d
10 changed files with 155 additions and 10 deletions

View File

@@ -78,7 +78,7 @@ public class Deob
int last = -1, cur;
while ((cur = mod.runOnce()) > 0)
{
{
new MultiplicationDeobfuscator().run(group);
new MultiplyOneDeobfuscator().run(group);

View File

@@ -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);
}

View File

@@ -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);
}
}
}

View File

@@ -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;
}

View File

@@ -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()

View 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;
}
}

View 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;
}
}

View 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();
}

View 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;
}
}

View File

@@ -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);
}
}
}