gpt4 book ai didi

java - 反编译混淆代码 "Cannot return from within an initializer"

转载 作者:行者123 更新时间:2023-12-01 22:54:18 24 4
gpt4 key购买 nike

我有一个名为 StaticInitializer.class 的类文件,该文件已成功混淆。当我反编译它时,我得到以下结果,其中 IDE 给出编译器错误“无法从初始化程序中返回”。删除“return”语句可以解决该问题。但实际上我想知道的是,如果混淆的类文件在静态初始化程序中有一个 return 语句,它如何正常工作。

Java 文件的编译阶段和运行阶段之间是否存在不匹配,混淆会检测到并使用它们作为混淆的一种方式?

反编译代码

public class StaticInitializer {


static {

int a=12;
int b=34;
return ;
}

}

编辑:以下操作显示混淆后的class文件是用jdk 1.5编译的

javap -c StaticInitializer.class
major version: 49

J2SE 8 = 52,J2SE 7 = 51,J2SE 6.0 = 50,

J2SE 5.0 = 49,

JDK 1.4 = 48,JDK 1.3 = 47,JDK 1.2 = 46,JDK 1.1 = 45

最佳答案

反编译器永远不会 100% 准确,因为对任何代码行进行编程都有多种方法。 ALso JAD(当我们说 Java 反编译器时,它几乎是 JAD 的同义词)不支持 JDK 1.5 及更高版本。它不再被开发或维护。

另外查看反编译代码,它会给出错误,因为从 Java 7 开始,它会在加载类之前查找 main 方法。这是对以前的 java 版本的更改,因此您的静态 block 没有执行。在以前的版本中,JRE 的行为是在加载类后和执行静态 block 后查找 main 方法。所以它可以在以前的版本中工作,但不能在新版本的java中工作。但由于 JAD 不再维护,它可能会向您显示曾经有效的过时代码。

关于java - 反编译混淆代码 "Cannot return from within an initializer",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24321724/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com