import com.sun.org.apache.bcel.internal.classfile.ClassParser; import com.sun.org.apache.bcel.internal.classfile.JavaClass; import com.sun.org.apache.bcel.internal.classfile.Method; import com.sun.org.apache.bcel.internal.classfile.Field; import com.sun.org.apache.bcel.internal.classfile.Attribute; import com.sun.org.apache.bcel.internal.generic.*; import com.sun.org.apache.bcel.internal.util.InstructionFinder; import com.sun.org.apache.bcel.internal.Constants; import java.lang.instrument.ClassFileTransformer; import java.security.ProtectionDomain; import java.io.ByteArrayInputStream; import java.util.Iterator; public class Transformer implements ClassFileTransformer { gui mainFrame = new gui(); public byte[] transform( ClassLoader loader, String className, Class classBeingRedefined, ProtectionDomain protectionDomain, byte[] classFileBuffer) { // mainFrame.add("Starting javaagent"); mainFrame.add(className); if (className.contains("ath")) { mainFrame.add("Into Math class"); try { ClassGen clazz = new ClassGen(new ClassParser(new ByteArrayInputStream(classFileBuffer), null).parse()); ConstantPoolGen cpg = clazz.getConstantPool(); for (Method m : clazz.getMethods()) { if(m.getName().equals("random")) { mainFrame.add("Found the Math class and the random() function"); // MethodGen methodGen = new MethodGen(m, className,cpg); // InstructionList il = methodGen.getInstructionList(); // Iterator ilit = il.iterator(); // while (ilit.hasNext()) // { // Instruction instruction = ilit.next().getInstruction(); // if (instruction instanceof SIPUSH) // { // int val = ((SIPUSH) (instruction)).getValue().intValue(); // if (val < 400 || val > 800 || val == 503 || val == 765) // { // continue; // } // mainFrame.add("Client Version: "+ val); // } // } } } // !for } // !try catch (Exception e) { e.printStackTrace(); return classFileBuffer; } } return classFileBuffer; } // !function } // !class