public AttributeSetMethodGenerator(String methodName, ClassGen classGen) { super(org.apache.bcel.Constants.ACC_PRIVATE, org.apache.bcel.generic.Type.VOID, argTypes, argNames, methodName, classGen.getClassName(), new InstructionList(), classGen.getConstantPool()); _aloadDom = new ALOAD(DOM_INDEX); _astoreDom = new ASTORE(DOM_INDEX); _astoreIterator = new ASTORE(ITERATOR_INDEX); _aloadIterator = new ALOAD(ITERATOR_INDEX); _astoreHandler = new ASTORE(HANDLER_INDEX); _aloadHandler = new ALOAD(HANDLER_INDEX); }
InstructionHandle getter_ih_1 = getter.append(fac.createGetField(cg.getClassName(), field.getName(), Type.getType(field.getSignature()))); InstructionHandle getter_ih_4 = getter.append(fac.createReturn(Type.OBJECT)); InstructionHandle setter_ih_2 = setter.append(fac.createPutField(cg.getClassName(), field.getName(), Type.getType(field.getSignature()))); InstructionHandle setter_ih_0_ih_5 = setter.append(fac.createReturn(Type.VOID));
@Override public boolean equals( final Object o1, final Object o2 ) { final ClassGen THIS = (ClassGen) o1; final ClassGen THAT = (ClassGen) o2; return THIS.getClassName().equals(THAT.getClassName()); }
@Override public int hashCode( final Object o ) { final ClassGen THIS = (ClassGen) o; return THIS.getClassName().hashCode(); } };
public void renameClasses() { int classCount = 1; for (ClassGen cg : cgs.values()) { String className = cg.getClassName(); String shortClassName = className.substring(className.lastIndexOf(".") + 1, className.length()); String newClassName = className.replace(shortClassName, "Class" + classCount); cg.setClassName(newClassName); tempcgs.put(newClassName, cg); classCount++; } if (classCount > 1) { logger.debug("Renamed " + classCount + " classes."); cgs = tempcgs; } }
public DashOTransformer(String jarfile) throws Exception { File jar = new File(jarfile); JAR_NAME = jarfile; JarFile jf = new JarFile(jar); Enumeration<JarEntry> entries = jf.entries(); while (entries.hasMoreElements()) { JarEntry entry = entries.nextElement(); if (entry == null) { break; } if (entry.getName().endsWith(".class")) { ClassGen cg = new ClassGen(new ClassParser(jf.getInputStream(entry), entry.getName()).parse()); cgs.put(cg.getClassName(), cg); } else { NonClassEntries.add(entry, jf.getInputStream(entry)); } } jf.close(); }
public StringFixer(String jarfile) throws Exception { File jar = new File(jarfile); JAR_NAME = jarfile; JarFile jf = new JarFile(jar); Enumeration<JarEntry> entries = jf.entries(); while (entries.hasMoreElements()) { JarEntry entry = entries.nextElement(); if (entry == null) { break; } if (entry.getName().endsWith(".class")) { ClassGen cg = new ClassGen(new ClassParser(jf.getInputStream(entry), entry.getName()).parse()); cgs.put(cg.getClassName(), cg); } else { NonClassEntries.add(entry, jf.getInputStream(entry)); } } jf.close(); }
public StackFixer(String jarfile) throws Exception { File jar = new File(jarfile); JAR_NAME = jarfile; JarFile jf = new JarFile(jar); Enumeration<JarEntry> entries = jf.entries(); while (entries.hasMoreElements()) { JarEntry entry = entries.nextElement(); if (entry == null) { break; } if (entry.getName().endsWith(".class")) { ClassGen cg = new ClassGen(new ClassParser(jf.getInputStream(entry), entry.getName()).parse()); cgs.put(cg.getClassName(), cg); } else { NonClassEntries.add(entry, jf.getInputStream(entry)); } } jf.close(); }
public GenericStringDeobfuscator(String jarfile) throws Exception { File jar = new File(jarfile); JAR_NAME = jarfile; JarFile jf = new JarFile(jar); Enumeration<JarEntry> entries = jf.entries(); while (entries.hasMoreElements()) { JarEntry entry = entries.nextElement(); if (entry == null) { break; } if (entry.getName().endsWith(".class")) { ClassGen cg = new ClassGen(new ClassParser(jf.getInputStream(entry), entry.getName()).parse()); cgs.put(cg.getClassName(), cg); } else { NonClassEntries.add(entry, jf.getInputStream(entry)); } } jf.close(); }
public void fixStack() { for (ClassGen cg : cgs.values()) { for (Method method : cg.getMethods()) { MethodGen mg = new MethodGen(method, cg.getClassName(), cg.getConstantPool()); mg.removeNOPs(); mg.setMaxLocals(); mg.setMaxStack(); cg.replaceMethod(method, mg.getMethod()); logger.debug(String.format("Reset MaxStack and MaxLocals in %s.%s", cg.getClassName(), mg.getName())); } } }
public void setDecryptor() { for (ClassGen cg : cgs.values()) { for (Method m : cg.getMethods()) { try { if (m.isPublic() && m.isStatic() && m.getArgumentTypes()[0].toString().equals("java.lang.String") && m.getReturnType().toString().equals("java.lang.String")) { String dc = cg.getClassName() + "." + m.getName(); decryptor = m.getName(); decryptorclass = cg.getClassName(); logger.debug("Found String Decryptor! " + dc); return; } } catch (Exception e) { continue; } } } logger.error("String decrypt not found!"); }
public AttributeSetMethodGenerator(String methodName, ClassGen classGen) { super(org.apache.bcel.Constants.ACC_PRIVATE, org.apache.bcel.generic.Type.VOID, argTypes, argNames, methodName, classGen.getClassName(), new InstructionList(), classGen.getConstantPool()); _aloadDom = new ALOAD(DOM_INDEX); _astoreDom = new ASTORE(DOM_INDEX); _astoreIterator = new ASTORE(ITERATOR_INDEX); _aloadIterator = new ALOAD(ITERATOR_INDEX); _astoreHandler = new ASTORE(HANDLER_INDEX); _aloadHandler = new ALOAD(HANDLER_INDEX); }
public AttributeSetMethodGenerator(String methodName, ClassGen classGen) { super(org.apache.bcel.Constants.ACC_PRIVATE, org.apache.bcel.generic.Type.VOID, argTypes, argNames, methodName, classGen.getClassName(), new InstructionList(), classGen.getConstantPool()); _aloadDom = new ALOAD(DOM_INDEX); _astoreDom = new ASTORE(DOM_INDEX); _astoreIterator = new ASTORE(ITERATOR_INDEX); _aloadIterator = new ALOAD(ITERATOR_INDEX); _astoreHandler = new ASTORE(HANDLER_INDEX); _aloadHandler = new ALOAD(HANDLER_INDEX); }
public AttributeSetMethodGenerator(String methodName, ClassGen classGen) { super(org.apache.bcel.Constants.ACC_PRIVATE, org.apache.bcel.generic.Type.VOID, argTypes, argNames, methodName, classGen.getClassName(), new InstructionList(), classGen.getConstantPool()); _aloadDom = new ALOAD(DOM_INDEX); _astoreDom = new ASTORE(DOM_INDEX); _astoreIterator = new ASTORE(ITERATOR_INDEX); _aloadIterator = new ALOAD(ITERATOR_INDEX); _astoreHandler = new ASTORE(HANDLER_INDEX); _aloadHandler = new ALOAD(HANDLER_INDEX); }
public void testAnnotationsAreUnpacked() throws Exception { final JavaClass jc = Repository.lookupClass(Bar.Inner.class); final ClassGen cg = new ClassGen(jc); final MethodGen mg = new MethodGen(cg.getMethodAt(0), cg.getClassName(), cg.getConstantPool()); final List<AnnotationEntryGen> firstParamAnnotations = mg.getAnnotationsOnParameter(0); assertEquals("Wrong number of annotations in the first parameter", 1, firstParamAnnotations.size()); final List<AnnotationEntryGen> secondParamAnnotations = mg.getAnnotationsOnParameter(1); assertEquals("Wrong number of annotations in the second parameter", 1, secondParamAnnotations.size()); } }
public void replaceCheckMethod() { ClassGen cg = cgs.get(AuthClass); Method method = cg.getMethods()[0]; MethodGen mg = new MethodGen(method, cg.getClassName(), cg.getConstantPool()); InstructionList list = new InstructionList(); list.append(new ICONST(1)); list.append(new IRETURN()); mg.removeExceptionHandlers(); mg.removeLineNumbers(); mg.removeLocalVariables(); mg.removeExceptions(); mg.setInstructionList(list); mg.setMaxLocals(); mg.setMaxStack(); cg.replaceMethod(method, mg.getMethod()); }
/** * BCEL-208: A couple of methods in MethodGen.java need to test for * an empty instruction list. */ public void testB208() throws ClassNotFoundException { final JavaClass clazz = getTestClass(PACKAGE_BASE_NAME+".data.PLSETestClass"); final ClassGen gen = new ClassGen(clazz); final ConstantPoolGen pool = gen.getConstantPool(); final Method m = gen.getMethodAt(1); final MethodGen mg = new MethodGen(m, gen.getClassName(), pool); mg.setInstructionList(null); mg.addLocalVariable("local2", Type.INT, null, null); // currently, this will cause null pointer exception mg.getLocalVariableTable(pool); }
/** * BCEL-262: */ public void testB262() throws ClassNotFoundException { final JavaClass clazz = getTestClass(PACKAGE_BASE_NAME+".data.PLSETestEnum"); final ClassGen gen = new ClassGen(clazz); final ConstantPoolGen pool = gen.getConstantPool(); // get the values() method final Method m = gen.getMethodAt(0); final MethodGen mg = new MethodGen(m, gen.getClassName(), pool); final InstructionList il = mg.getInstructionList(); // get the invokevirtual instruction final InstructionHandle ih = il.findHandle(3); final InvokeInstruction ii = (InvokeInstruction)(ih.getInstruction()); // without fix, the getClassName() will throw: // java.lang.IllegalArgumentException: Cannot be used on an array type final String cn = ii.getClassName(pool); assertEquals("[Lorg.apache.bcel.data.PLSETestEnum;", cn); }
/** * BCEL-79: */ public void testB79() throws ClassNotFoundException { final JavaClass clazz = getTestClass(PACKAGE_BASE_NAME+".data.PLSETestClass"); final ClassGen gen = new ClassGen(clazz); final ConstantPoolGen pool = gen.getConstantPool(); final Method m = gen.getMethodAt(2); final LocalVariableTable lvt = m.getLocalVariableTable(); //System.out.println(lvt); //System.out.println(lvt.getTableLength()); final MethodGen mg = new MethodGen(m, gen.getClassName(), pool); final LocalVariableTable new_lvt = mg.getLocalVariableTable(mg.getConstantPool()); //System.out.println(new_lvt); assertEquals("number of locals", lvt.getTableLength(), new_lvt.getTableLength()); }
/** * BCEL-295: */ public void testB295() throws Exception { final JavaClass clazz = getTestClass(PACKAGE_BASE_NAME+".data.PLSETestClass2"); final ClassGen cg = new ClassGen(clazz); final ConstantPoolGen pool = cg.getConstantPool(); final Method m = cg.getMethodAt(1); // 'main' final LocalVariableTable lvt = m.getLocalVariableTable(); final LocalVariable lv = lvt.getLocalVariable(2, 4); // 'i' //System.out.println(lv); final MethodGen mg = new MethodGen(m, cg.getClassName(), pool); final LocalVariableTable new_lvt = mg.getLocalVariableTable(mg.getConstantPool()); final LocalVariable new_lv = new_lvt.getLocalVariable(2, 4); // 'i' //System.out.println(new_lv); assertEquals("live range length", lv.getLength(), new_lv.getLength()); } }