Java 8 如何用Java 8 ASM解决此方法重命名问题

Java 8 如何用Java 8 ASM解决此方法重命名问题,java-8,rename,obfuscation,java-bytecode-asm,Java 8,Rename,Obfuscation,Java Bytecode Asm,最近,我用Java中的ASM编写了一个混淆器,并希望重命名类、方法和字段。但问题是,代码不起作用,它也应该起作用,我不知道如何修复它。问题是,如果我混淆了一个jar,类中的每个方法都会被重命名,但有时(不是每次)一些代码没有被重命名,因此jar无法执行。例如 公共抽象类ColorThread实现可运行 { @吸气剂 私有最终字符串名; @吸气剂 私有线程; 公共ColorThread(最终字符串名称){ this.name=名称; Runtime.getRuntime().addShutdown

最近,我用Java中的ASM编写了一个混淆器,并希望重命名类、方法和字段。但问题是,代码不起作用,它也应该起作用,我不知道如何修复它。问题是,如果我混淆了一个jar,类中的每个方法都会被重命名,但有时(不是每次)一些代码没有被重命名,因此jar无法执行。例如

公共抽象类ColorThread实现可运行
{
@吸气剂
私有最终字符串名;
@吸气剂
私有线程;
公共ColorThread(最终字符串名称){
this.name=名称;
Runtime.getRuntime().addShutdownHook(新线程(this::close));
}
@凌驾
公开募捐{
抛出新的NotOverriddenException(“线程\”+getName()+“\”未被覆盖。”);
}
/**
*此方法中断正在运行的线程。
*/
公众假期结束(){
这个.getThread().interrupt();
}

public void start(){//当您重命名
ColorThread.start()
时,为什么希望调用
ConnectThread.start()
会被重命名?ConnectThread的超类是ColorThread,或者我重命名抽象类(ColorThread)的方法时出错了?当重新映射程序查看包含调用
ConnectThread.start()的代码时
,它不知道该方法将从
ColorThread
继承。没有类型层次结构树的维护。如果要处理该类型层次结构树,必须实现该处理。没有真正得到它。因此我需要创建一个层次结构树来修复该问题。您必须告诉
重新映射者
ConnectThread.start()
应映射到与
ColorThread.start()相同的名称
。使用
SimpleMapper
,您只需将条目添加到映射。然而,一般的模糊处理程序必须以某种方式得出这个结论,这意味着处理类型层次结构。对于非平凡的输入,您无论如何都必须这样做,以检测哪些方法正在重写或实现JRE/外部库方法以及这是真正的挑战。这是真正的挑战所在。考虑无关的<代码> .x()/代码> &代码> C(x)(<代码)>当代码> B扩展了一个实现c>代码> >……为什么你希望调用<代码>连接线程?
?ConnectThread的超类是ColorThread,或者当重新映射程序查看包含调用
ConnectThread.start()的代码时,我是否通过重命名抽象类(ColorThread)的方法出错了
,它不知道该方法将从
ColorThread
继承。没有类型层次结构树的维护。如果要处理该类型层次结构树,必须实现该处理。没有真正得到它。因此我需要创建一个层次结构树来修复该问题。您必须告诉
重新映射者
ConnectThread.start()
应映射到与
ColorThread.start()相同的名称
。使用
SimpleMapper
,您只需将条目添加到映射。然而,一般的模糊处理程序必须以某种方式得出这个结论,这意味着处理类型层次结构。对于非平凡的输入,您无论如何都必须这样做,以检测哪些方法正在重写或实现JRE/外部库方法以及这是真正的挑战所在。考虑无关的<代码> .x()(<代码> >代码> c x())/>代码>当代码> b扩展一个实现c<代码>代码时…