Java字节码反编译 - 未使用的方法存在?

She*_*iff 0 java methods bytecode decompiler

说我有

private void ThisIsMySecurityMethodPleaseLookHERE() {
//security stuff
}
Run Code Online (Sandbox Code Playgroud)

在我的程序中,但是在任何实际执行的代码中都没有调用该方法.它被编译为字节码吗?或者Java编译器是否识别出这个事实并将其过滤掉?我知道它永远不会成为PAST字节码,因为它不是真正的调用.

我问,因为我知道Java很容易反编译.当他们反编译我的.class文件时,我的所有未使用的方法也会出现吗?

我认为情况并非如此,因为如果是这样的话,每个java文件都会有膨胀代码隐藏真实代码,并通过混淆器传递.

我只是试图想到除了混淆之外的方法来抵制随意的黑客.

Jon*_*eet 9

为什么假设什么?使用javap -c,看看有什么在字节码.

鉴于编译器无法知道私有方法是否可以通过反射调用,我个人认为它仍然存在.

我不确定你的意思是:

我认为情况并非如此,因为如果是这样的话,每个java文件都会有膨胀代码隐藏真实代码,并通过混淆器传递.

我希望大多数开发人员都会意识到通过默默无闻的安全性几乎没有什么保护 - 而且代码本身的真正价值通常在于设计等,而不仅仅是实现.所以不,不要在你的课程中包含敏感信息 - 但同样不要太偏执.你需要权衡试图击败攻击者的成本与他们"赢"的成本.这种平衡将取决于所涉及的代码 - 以及您试图防范的攻击类型.