Search in sources :

Example 1 with Instructions

use of net.runelite.asm.attributes.code.Instructions in project runelite by runelite.

the class GetPathTransformer method removeInvoke.

private void removeInvoke(Instruction i) {
    Instructions ins = i.getInstructions();
    int idx = ins.getInstructions().indexOf(i);
    ins.remove(i);
    // pop File
    ins.getInstructions().add(idx, new Pop(ins));
    ins.getInstructions().add(idx + 1, new LDC(ins, ""));
}
Also used : Pop(net.runelite.asm.attributes.code.instructions.Pop) Instructions(net.runelite.asm.attributes.code.Instructions) LDC(net.runelite.asm.attributes.code.instructions.LDC)

Example 2 with Instructions

use of net.runelite.asm.attributes.code.Instructions in project runelite by runelite.

the class OpcodesTransformer method transform.

@Override
public void transform(ClassGroup group) {
    ClassFile runeliteOpcodes = group.findClass(RUNELITE_OPCODES);
    if (runeliteOpcodes == null) {
        runeliteOpcodes = new ClassFile(group);
        runeliteOpcodes.setName(RUNELITE_OPCODES);
        runeliteOpcodes.setSuperName(Type.OBJECT.getInternalName());
        runeliteOpcodes.setAccess(Opcodes.ACC_PUBLIC);
        group.addClass(runeliteOpcodes);
    } else {
        runeliteOpcodes.getFields().clear();
    }
    Method clinit = runeliteOpcodes.findMethod("<clinit>");
    if (clinit == null) {
        clinit = new Method(runeliteOpcodes, "<clinit>", new Signature("()V"));
        clinit.setStatic();
        Code code = new Code(clinit);
        code.setMaxStack(1);
        clinit.setCode(code);
        runeliteOpcodes.addMethod(clinit);
        Instructions instructions = code.getInstructions();
        instructions.addInstruction(new VReturn(instructions));
    }
}
Also used : ClassFile(net.runelite.asm.ClassFile) Signature(net.runelite.asm.signature.Signature) Instructions(net.runelite.asm.attributes.code.Instructions) Method(net.runelite.asm.Method) Code(net.runelite.asm.attributes.Code) VReturn(net.runelite.asm.attributes.code.instructions.VReturn)

Example 3 with Instructions

use of net.runelite.asm.attributes.code.Instructions 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;
}
Also used : Instructions(net.runelite.asm.attributes.code.Instructions) Instruction(net.runelite.asm.attributes.code.Instruction) Code(net.runelite.asm.attributes.Code) VReturn(net.runelite.asm.attributes.code.instructions.VReturn) IfNull(net.runelite.asm.attributes.code.instructions.IfNull) InvokeVirtual(net.runelite.asm.attributes.code.instructions.InvokeVirtual) Signature(net.runelite.asm.signature.Signature) ALoad(net.runelite.asm.attributes.code.instructions.ALoad)

Example 4 with Instructions

use of net.runelite.asm.attributes.code.Instructions in project runelite by runelite.

the class ReflectionTransformer method transform.

private void transform(Method method) {
    Code code = method.getCode();
    if (code == null) {
        return;
    }
    Instructions ins = code.getInstructions();
    for (Instruction i : new ArrayList<>(ins.getInstructions())) {
        transformFindClass(i);
        transformMethodName(ins, i);
        transformGetParameterTypes(ins, i);
        transformGetDeclaredField(ins, i);
        transformSetInt(ins, i);
        transformGetInt(ins, i);
        transformInvokeVirtual(ins, i);
    }
}
Also used : ArrayList(java.util.ArrayList) Instructions(net.runelite.asm.attributes.code.Instructions) Instruction(net.runelite.asm.attributes.code.Instruction) Code(net.runelite.asm.attributes.Code)

Example 5 with Instructions

use of net.runelite.asm.attributes.code.Instructions 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;
}
Also used : InvokeVirtual(net.runelite.asm.attributes.code.instructions.InvokeVirtual) Instructions(net.runelite.asm.attributes.code.Instructions) Instruction(net.runelite.asm.attributes.code.Instruction)

Aggregations

Instructions (net.runelite.asm.attributes.code.Instructions)86 Instruction (net.runelite.asm.attributes.code.Instruction)72 Code (net.runelite.asm.attributes.Code)47 LDC (net.runelite.asm.attributes.code.instructions.LDC)40 ClassGroup (net.runelite.asm.ClassGroup)32 VReturn (net.runelite.asm.attributes.code.instructions.VReturn)30 Test (org.junit.Test)30 Method (net.runelite.asm.Method)26 IMul (net.runelite.asm.attributes.code.instructions.IMul)26 ILoad (net.runelite.asm.attributes.code.instructions.ILoad)24 IStore (net.runelite.asm.attributes.code.instructions.IStore)24 Execution (net.runelite.asm.execution.Execution)22 Deobfuscator (net.runelite.deob.Deobfuscator)22 ClassFile (net.runelite.asm.ClassFile)17 Field (net.runelite.asm.Field)17 Type (net.runelite.asm.Type)17 Label (net.runelite.asm.attributes.code.Label)17 PushConstantInstruction (net.runelite.asm.attributes.code.instruction.types.PushConstantInstruction)16 Signature (net.runelite.asm.signature.Signature)16 Pop (net.runelite.asm.attributes.code.instructions.Pop)14