什么叫反编译?你把java程序(jar)交给别人,会被人看到源码吗?

( Java面试题  | Java 学习指南 )

※ 编译 Compile

将一个 *.java文件编译成 *.class 文件的过程,称为编译。

比如,HelloWorld.java 被编译后得到 HelloWorld.class

 

※ 反编译 Decompile

在.class文件里包含了完全的信息,包含类名、方法、属性、注解,除了注释文字之外的所有信息。所以从.class文件可以恢复得到原来的*.java文件,而且一丝不差!

从 *.class 逆向得到 *.java 的过程,称为反编译。

 

反编译之后,得到的*.java和原始代码文件几乎完全相同,除了注释文字。所以,当你把*.class或者 *.jar 交到别人手里时候,别人可以很容易的得到原始代码。

 

具体的反编译效果展示,可以参考《项目应用篇》之“反编译"一章。

 

* 如何防止别人反编译?

没有办法。就好比一个C程序可以反编译为汇编代码一样,*.class可以反编译得到Java代码。

但是,并不是完全没有办法,在业界普遍采用proguard混淆技术来对抗反编译,具体可以参考《项目应用篇》之“proguard混淆技术"一章。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿发你好

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值