use of net.runelite.asm.attributes.code.instructions.InvokeVirtual in project runelite by runelite.
the class PacketWriteDeobfuscator method translate.
private Instruction translate(Instruction i) {
if (!(i instanceof InvokeVirtual)) {
return i;
}
InvokeVirtual ii = (InvokeVirtual) i;
Method invoked = ii.getMethod();
assert invoked.getType().size() == 1;
Type argumentType = invoked.getType().getTypeOfArg(0);
Method invokeMethod;
if (argumentType.equals(Type.BYTE)) {
invokeMethod = new Method(ii.getMethod().getClazz(), "runeliteWriteByte", new Signature("(B)V"));
} else if (argumentType.equals(Type.SHORT)) {
invokeMethod = new Method(ii.getMethod().getClazz(), "runeliteWriteShort", new Signature("(S)V"));
} else if (argumentType.equals(Type.INT)) {
invokeMethod = new Method(ii.getMethod().getClazz(), "runeliteWriteInt", new Signature("(I)V"));
} else if (argumentType.equals(Type.LONG)) {
invokeMethod = new Method(ii.getMethod().getClazz(), "runeliteWriteLong", new Signature("(J)V"));
} else if (argumentType.equals(Type.STRING)) {
invokeMethod = new Method(ii.getMethod().getClazz(), "runeliteWriteString", new Signature("(Ljava/lang/String;)V"));
} else {
throw new IllegalStateException("Unknown type " + argumentType);
}
return new InvokeVirtual(i.getInstructions(), invokeMethod);
}
use of net.runelite.asm.attributes.code.instructions.InvokeVirtual in project runelite by runelite.
the class ClientErrorTransformer method transform.
private void transform(Method m) {
if (!m.isStatic() || m.getDescriptor().size() != 2 || !m.getDescriptor().getTypeOfArg(0).equals(Type.STRING) || !m.getDescriptor().getTypeOfArg(1).equals(Type.THROWABLE))
return;
Code code = m.getCode();
Instructions ins = code.getInstructions();
/*
Makes it so the old code in this method is logically dead,
letting the mapper map it but making it so it's never executed.
*/
// load throwable
Instruction aload0 = new ALoad(ins, 1);
IfNull ifNull = new IfNull(ins, InstructionType.IFNULL);
ifNull.setTo(ins.createLabelFor(ins.getInstructions().get(0)));
// load throwable
Instruction aload1 = new ALoad(ins, 1);
InvokeVirtual printStackTrace = new InvokeVirtual(ins, new net.runelite.asm.pool.Method(new net.runelite.asm.pool.Class("java/lang/Throwable"), "printStackTrace", new Signature("()V")));
Instruction ret = new VReturn(ins);
ins.addInstruction(0, aload0);
ins.addInstruction(1, ifNull);
ins.addInstruction(2, aload1);
ins.addInstruction(3, printStackTrace);
ins.addInstruction(4, ret);
done = true;
}
use of net.runelite.asm.attributes.code.instructions.InvokeVirtual in project runelite by runelite.
the class MaxMemoryTransformer method insert.
private void insert(Instructions ins, int idx) {
Class randomClass = new net.runelite.asm.pool.Class("java/util/Random");
ins.getInstructions().remove(idx);
// pop runtime
ins.getInstructions().add(idx++, new Pop(ins));
ins.getInstructions().add(idx++, new New(ins, randomClass));
ins.getInstructions().add(idx++, new Dup(ins));
// new Random
ins.getInstructions().add(idx++, new InvokeSpecial(ins, new net.runelite.asm.pool.Method(randomClass, "<init>", new Signature("()V"))));
ins.getInstructions().add(idx++, new LDC(ins, 31457280));
// nextInt(31457280)
ins.getInstructions().add(idx++, new InvokeVirtual(ins, new net.runelite.asm.pool.Method(randomClass, "nextInt", new Signature("(I)I"))));
ins.getInstructions().add(idx++, new LDC(ins, 230686720));
// 230686720 + nextInt(31457280)
ins.getInstructions().add(idx++, new IAdd(ins));
ins.getInstructions().add(idx++, new I2L(ins));
}
use of net.runelite.asm.attributes.code.instructions.InvokeVirtual in project runelite by runelite.
the class ReflectionTransformer method transformInvokeVirtual.
// invokevirtual java/lang/reflect/Method/invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
private void transformInvokeVirtual(Instructions instructions, Instruction i) {
if (!(i instanceof InvokeVirtual)) {
return;
}
InvokeVirtual iv = (InvokeVirtual) i;
if (iv.getMethod().getClazz().getName().equals("java/lang/reflect/Method") && iv.getMethod().getName().equals("invoke")) {
InvokeStatic is = new InvokeStatic(instructions, new net.runelite.asm.pool.Method(new net.runelite.asm.pool.Class("net/runelite/rs/Reflection"), "invoke", new Signature("(Ljava/lang/reflect/Method;Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;")));
instructions.replace(iv, is);
logger.info("Transformed Method.invoke call");
}
}
use of net.runelite.asm.attributes.code.instructions.InvokeVirtual in project runelite by runelite.
the class BufferFinder method findModPow.
// Find encryptRsa in buffer
private boolean findModPow(Code code) {
if (code == null) {
return false;
}
Instructions instructions = code.getInstructions();
for (Instruction i : instructions.getInstructions()) {
if (!(i instanceof InvokeVirtual)) {
continue;
}
InvokeVirtual iv = (InvokeVirtual) i;
net.runelite.asm.pool.Method method = iv.getMethod();
if (method.getName().equals("modPow")) {
return true;
}
}
return false;
}
Aggregations