Annotations: signature -> descriptor; use linkedhashmap
This commit is contained in:
@@ -79,66 +79,63 @@ public class Deob
|
||||
|
||||
ClassGroup group = JarUtil.loadJar(new File(args[0]));
|
||||
|
||||
if (args.length <= 2 || !args[2].equals("rl"))
|
||||
{
|
||||
// remove except RuntimeException
|
||||
run(group, new RuntimeExceptions());
|
||||
// remove except RuntimeException
|
||||
run(group, new RuntimeExceptions());
|
||||
|
||||
run(group, new ControlFlowDeobfuscator());
|
||||
run(group, new ControlFlowDeobfuscator());
|
||||
|
||||
run(group, new RenameUnique());
|
||||
run(group, new RenameUnique());
|
||||
|
||||
// remove unused methods - this leaves Code with no instructions,
|
||||
// which is not valid, so unused methods is run after
|
||||
run(group, new UnreachedCode());
|
||||
run(group, new UnusedMethods());
|
||||
// remove unused methods - this leaves Code with no instructions,
|
||||
// which is not valid, so unused methods is run after
|
||||
run(group, new UnreachedCode());
|
||||
run(group, new UnusedMethods());
|
||||
|
||||
// remove illegal state exceptions, frees up some parameters
|
||||
run(group, new IllegalStateExceptions());
|
||||
// remove illegal state exceptions, frees up some parameters
|
||||
run(group, new IllegalStateExceptions());
|
||||
|
||||
// remove constant logically dead parameters
|
||||
run(group, new ConstantParameter());
|
||||
// remove constant logically dead parameters
|
||||
run(group, new ConstantParameter());
|
||||
|
||||
// remove unhit blocks
|
||||
run(group, new UnreachedCode());
|
||||
run(group, new UnusedMethods());
|
||||
// remove unhit blocks
|
||||
run(group, new UnreachedCode());
|
||||
run(group, new UnusedMethods());
|
||||
|
||||
// remove unused parameters
|
||||
run(group, new UnusedParameters());
|
||||
// remove unused parameters
|
||||
run(group, new UnusedParameters());
|
||||
|
||||
// remove unused fields
|
||||
run(group, new UnusedFields());
|
||||
// remove unused fields
|
||||
run(group, new UnusedFields());
|
||||
|
||||
run(group, new FieldInliner());
|
||||
run(group, new FieldInliner());
|
||||
|
||||
// order uses class name order for sorting fields/methods,
|
||||
// so run it before removing classes below
|
||||
run(group, new Order());
|
||||
// order uses class name order for sorting fields/methods,
|
||||
// so run it before removing classes below
|
||||
run(group, new Order());
|
||||
|
||||
run(group, new UnusedClass());
|
||||
run(group, new UnusedClass());
|
||||
|
||||
runMath(group);
|
||||
runMath(group);
|
||||
|
||||
run(group, new ExprArgOrder());
|
||||
run(group, new ExprArgOrder());
|
||||
|
||||
run(group, new Lvt());
|
||||
run(group, new Lvt());
|
||||
|
||||
run(group, new CastNull());
|
||||
run(group, new CastNull());
|
||||
|
||||
run(group, new EnumDeobfuscator());
|
||||
run(group, new EnumDeobfuscator());
|
||||
|
||||
new OpcodesTransformer().transform(group);
|
||||
//run(group, new PacketHandlerOrder());
|
||||
//run(group, new PacketWriteDeobfuscator());
|
||||
new OpcodesTransformer().transform(group);
|
||||
//run(group, new PacketHandlerOrder());
|
||||
//run(group, new PacketWriteDeobfuscator());
|
||||
|
||||
run(group, new MenuActionDeobfuscator());
|
||||
run(group, new MenuActionDeobfuscator());
|
||||
|
||||
new GetPathTransformer().transform(group);
|
||||
new ClientErrorTransformer().transform(group);
|
||||
new ReflectionTransformer().transform(group);
|
||||
//new MaxMemoryTransformer().transform(group);
|
||||
//new RuneliteBufferTransformer().transform(group);
|
||||
}
|
||||
new GetPathTransformer().transform(group);
|
||||
new ClientErrorTransformer().transform(group);
|
||||
new ReflectionTransformer().transform(group);
|
||||
//new MaxMemoryTransformer().transform(group);
|
||||
//new RuneliteBufferTransformer().transform(group);
|
||||
|
||||
JarUtil.saveJar(group, new File(args[1]));
|
||||
|
||||
|
||||
@@ -35,7 +35,6 @@ import net.runelite.asm.Named;
|
||||
import net.runelite.asm.Type;
|
||||
import net.runelite.asm.attributes.Annotated;
|
||||
import net.runelite.asm.attributes.Code;
|
||||
import net.runelite.asm.Annotation;
|
||||
import net.runelite.asm.attributes.code.Exceptions;
|
||||
import net.runelite.asm.attributes.code.Instruction;
|
||||
import net.runelite.asm.attributes.code.LocalVariable;
|
||||
@@ -138,12 +137,7 @@ public class Renamer implements Deobfuscator
|
||||
|
||||
if (!method.getDescriptor().equals(newSignature))
|
||||
{
|
||||
//Signature was updated. Annotate it
|
||||
if (method.findAnnotation(OBFUSCATED_SIGNATURE) == null)
|
||||
{
|
||||
//Signature was not previously renamed
|
||||
method.addAnnotation(OBFUSCATED_SIGNATURE, "signature", method.getDescriptor().toString());
|
||||
}
|
||||
method.findAnnotation(OBFUSCATED_SIGNATURE, true).setElement( "descriptor", method.getDescriptor().toString());
|
||||
}
|
||||
|
||||
method.setDescriptor(newSignature);
|
||||
@@ -160,12 +154,7 @@ public class Renamer implements Deobfuscator
|
||||
{
|
||||
if (field.getType().getInternalName().equals(cf.getName()))
|
||||
{
|
||||
if (field.findAnnotation(OBFUSCATED_SIGNATURE) == null)
|
||||
{
|
||||
//Signature was updated. Annotate it
|
||||
field.addAnnotation(OBFUSCATED_SIGNATURE, "signature", field.getType().toString());
|
||||
}
|
||||
|
||||
field.findAnnotation(OBFUSCATED_SIGNATURE, true).setElement("descriptor", field.getType().toString());
|
||||
field.setType(Type.getType("L" + name + ";", field.getType().getDimensions()));
|
||||
}
|
||||
}
|
||||
@@ -206,7 +195,7 @@ public class Renamer implements Deobfuscator
|
||||
|
||||
addObfuscatedName(field);
|
||||
|
||||
assert DeobAnnotations.getExportedName(field) == null || DeobAnnotations.getExportedName(field).equals(newName) : "Tried changing field name to something other than the exported name!";
|
||||
assert DeobAnnotations.getExportedName(field) == null || newName.equals(DeobAnnotations.getExportedName(field)) : "Tried changing field name to something other than the exported name!";
|
||||
|
||||
field.setName(newName);
|
||||
++fields;
|
||||
@@ -221,13 +210,6 @@ public class Renamer implements Deobfuscator
|
||||
String newName = mappings.get(method.getPoolMethod());
|
||||
String[] newParams = mappings.getP(method.getPoolMethod());
|
||||
|
||||
// rename on obfuscated signature
|
||||
Annotation an = method.findAnnotation(OBFUSCATED_SIGNATURE);
|
||||
if (an != null)
|
||||
{
|
||||
an.setElement(renameSignature(new Signature(an.getValueString())).toString());
|
||||
}
|
||||
|
||||
if (newName == null)
|
||||
{
|
||||
continue;
|
||||
@@ -292,38 +274,6 @@ public class Renamer implements Deobfuscator
|
||||
logger.info("Renamed {} classes, {} fields, {} methods, and {} parameters", classes, fields, methods, parameters);
|
||||
}
|
||||
|
||||
private Type renameType(Type t)
|
||||
{
|
||||
if (t.isPrimitive())
|
||||
{
|
||||
return t;
|
||||
}
|
||||
|
||||
String className = t.getInternalName();
|
||||
String newName = mappings.get(new net.runelite.asm.pool.Class(className));
|
||||
if (newName == null)
|
||||
{
|
||||
return t;
|
||||
}
|
||||
|
||||
Type type = Type.getType("L" + newName + ";", t.getDimensions());
|
||||
|
||||
logger.debug("Renamed {} -> {}", t, type);
|
||||
|
||||
return type;
|
||||
}
|
||||
|
||||
private Signature renameSignature(Signature s)
|
||||
{
|
||||
Signature.Builder builder = new Signature.Builder()
|
||||
.setReturnType(renameType(s.getReturnValue()));
|
||||
for (Type t : s.getArguments())
|
||||
{
|
||||
builder.addArgument(renameType(t));
|
||||
}
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
private static <T extends Annotated & Named> void addObfuscatedName(T object)
|
||||
{
|
||||
object.findAnnotation(OBFUSCATED_NAME, true).setElement(object.getName());
|
||||
|
||||
@@ -100,7 +100,7 @@ public class UnusedParameters implements Deobfuscator
|
||||
final var a = m.findAnnotation(DeobAnnotations.OBFUSCATED_SIGNATURE);
|
||||
if (a == null)
|
||||
return false;
|
||||
final var str = a.get("signature");
|
||||
final var str = a.get("descriptor");
|
||||
|
||||
return parameter + 1 == new Signature((String) str).size();
|
||||
}
|
||||
|
||||
@@ -439,8 +439,12 @@ public class ConstantParameter implements Deobfuscator
|
||||
// already annotated
|
||||
continue;
|
||||
}
|
||||
obfuscatedSignature.setElement("signature", m.getDescriptor().toString());
|
||||
obfuscatedSignature.setElement("garbageValue", value);
|
||||
else if (obfuscatedSignature.size() == 0)
|
||||
{
|
||||
obfuscatedSignature.setElement("descriptor", m.getDescriptor().toString());
|
||||
}
|
||||
|
||||
obfuscatedSignature.setElement("garbageValue", String.valueOf(value));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user