package net.contra.obfuscator.trans.ob; import com.sun.org.apache.bcel.internal.classfile.Attribute; import com.sun.org.apache.bcel.internal.classfile.Method; import com.sun.org.apache.bcel.internal.generic.ClassGen; import com.sun.org.apache.bcel.internal.generic.LocalVariableGen; import com.sun.org.apache.bcel.internal.generic.MethodGen; import net.contra.obfuscator.ITransformer; import net.contra.obfuscator.Settings; import net.contra.obfuscator.util.bcel.JarLoader; import net.contra.obfuscator.util.misc.LogHandler; import net.contra.obfuscator.util.misc.Misc; public class AttributeObfuscator implements ITransformer { private final LogHandler Logger = new LogHandler("AttributeObfuscator"); private String Location = ""; private JarLoader LoadedJar; public AttributeObfuscator(String loc) { Location = loc; } public void load() { LoadedJar = new JarLoader(Location); } public void transform() { for (ClassGen cg : LoadedJar.ClassEntries.values()) { for (Method method : cg.getMethods()) { MethodGen mg = new MethodGen(method, cg.getClassName(), cg.getConstantPool()); mg.removeCodeAttributes(); mg.removeAttributes(); mg.removeLineNumbers(); for (LocalVariableGen g : mg.getLocalVariables()) { g.setName(Misc.getRandomName()); } for (int i = 0; i < mg.getArgumentNames().length; i++) { mg.setArgumentName(i, Misc.getRandomName()); } cg.replaceMethod(method, mg.getMethod()); Logger.log("Removed Attributes/Line Numbers -> Class: " + cg.getClassName() + " Method: " + method.getName()); } for (Attribute at : cg.getAttributes()) { cg.removeAttribute(at); } } } public void save() { String loc = Location.replace(".jar", Settings.FILE_TAG + ".jar"); LoadedJar.saveJar(loc); } }