什么叫反编译?你把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混淆技术"一章。

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: 反编译技术是将已编译的可执行代码转换回其原始源代码的一种技术。反编译器通过分析程序的机器语言指令来还原程序的高级语言源代码。这种技术可以用于帮助程序员理解和修改现有程序,也可以用于逆向工程和破解软件等非法活动。在合法的应用中,反编译技术可以用于调试和修复软件漏洞。 ### 回答2: 反编译技术是指对已经编译(或汇编)的程序文件进行逆向操作,将其转换回源代码的过程。它主要是通过分析程序的二进制代码和反汇编得到的汇编代码,还原出原始的高级语言代码。 反编译技术可以用于各种用途。首先,它可以帮助软件开发人员理解和学习其他人编写的程序。通过反编译,开发人员可以查看代码的结构、算法和实现细节,从而更好地理解并借鉴优秀的程序设计思路。此外,反编译还可以用于调试和修复软件。当我们无法获得程序的源代码时,通过反编译,我们可以查看其内部实现,识别和修复潜在的错误和漏洞。 除此之外,反编译技术也有一定的应用于安全领域。黑客或恶意软件分析人员可以使用反编译技术来研究恶意软件的行为和目的,以便及时采取对应的安全措施。在网络游戏领域,一些玩家通过反编译游戏客户端程序,分析游戏逻辑和数据结构,以获取一些非法的游戏优势。 然而,反编译技术也存在一些潜在的问题和争议。因为它可以轻松地窃取他人的知识产权或者潜在的商业机密。为了保护软件的安全和知识产权,开发者们通常采取一些反反编译措施,如代码加密、混淆等,以增加反编译的难度。 总之,反编译技术是一种有益的工具,可以帮助开发人员学习他人的代码、修复软件漏洞,也可以用于分析恶意软件等安全目的。然而,人们在使用反编译技术时也应秉持合法合规、尊重知识产权的原则。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

阿发你好

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

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

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

打赏作者

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

抵扣说明:

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

余额充值