使用asm在jar中更改所有方法的名称

时间:2019-07-09 21:59:51

标签: java obfuscation

您好,因此我将使用asm作为学习项目来创建一个小的简单Java混淆器,并且由于Java混淆器让我很感兴趣,现在我已经制作了一个函数,该函数可以更改所有类的名称,并更新对这些类的引用,这是函数:

SARC

现在,我正在尝试制作一个函数,该函数将更改类中方法的所有名称,并且还将在代码中将该方法调用为新名称的所有位置更改,现在我尝试这样做就像我更改类名的方式一样,但是它没有用,因为MethodWriter类不是公共的,并且工作方式似乎非常不同,并且不包含我尝试使用的方法,这是我的尝试:

    public static JarData classesRenamer(JarData jarData) {
        NameGenerator gen = new NameGenerator(10);
        Map<String, ClassNode> classes = jarData.getClasses();
        Map<String, byte[]> out = jarData.getOut();
        Map<String, String> mappings = new HashMap<String, String>();
        for (ClassNode cn : classes.values()) {
            mappings.put(cn.name, gen.getName());
        }
        SimpleRemapper mapper = new SimpleRemapper(mappings);
        for (ClassNode cn : classes.values()) {
            ClassWriter cw = new ClassWriter(0);
            ClassVisitor remapper = new ClassRemapper(cw, mapper);
            cn.accept(remapper);
            out.put(mappings.containsKey(cn.name) ? mappings.get(cn.name) : cn.name, cw.toByteArray());
            System.out.println("Renamer > Code of Class: " + cn.name + " was renamed to: " + mappings.get(cn.name));
        }
        return new JarData(classes, out);
    }

现在,既然MethodWriter不是公开的,我想应该以不同的方式使用它,而不是像我使用ClassWriter一样,我很乐意提供帮助

0 个答案:

没有答案