Java字节码反编译未使用的方法是否存在?
说我有
private void ThisIsMySecurityMethodPleaseLookHERE() {
//security stuff
}
在我的程序中,但在任何实际执行的代码中都没有调用该方法。它会被编译成字节码吗?或者Java编译器是否认识到这一事实并将其过滤掉?我知道它永远不会通过字节码,因为它不是真正的被调用
我这么问是因为我知道Java非常容易反编译。当我的一个方法被反编译时,我所有未使用的方法都会出现吗。班级档案
我假设情况并非如此,因为如果是这样的话,每个java文件都会有膨胀的代码来隐藏真正的代码,并通过模糊器传递
我只是想想出一些方法,而不是模糊处理,来抵御漫不经心的黑客
# 1 楼答案
测试并查看您需要添加选项
-p
(又名-private
)来获取私有方法内容# 2 楼答案
为什么要假设什么?使用
javap -c
查看字节码中的内容考虑到编译器不知道私有方法是否会被反射调用,我个人认为它仍然存在
我不知道你这是什么意思:
我希望大多数开发人员都能意识到,通过默默无闻实现的安全性根本没有什么保护作用,但代码本身的真正价值通常在设计等方面,而不仅仅是实现方面。所以,不要在课堂上包含敏感信息——但同样不要太偏执。你需要权衡试图击败攻击者的成本和他们“获胜”的成本。这种平衡将取决于所涉及的代码,以及您试图防范的攻击类型