Java编译与反编译

编译:
将便于人编写、阅读、维护的高级计算机语言所写作的源代码程序,翻译为计算机能解读、运行的低阶机器语言的程序的过程就是编译。负责这一过程的处理的工具叫做编译器
javac
javac是收录于JDK中的Java语言编译器。该工具可以将后缀名为.java的源文件编译为后缀名为.class的可以运行于Java虚拟机的字节码。

反编译:
反编译的过程与编译刚好相反,就是将已编译好的编程语言还原到未编译的状态,也就是找出程序语言的源代码。就是将机器看得懂的语言转换成程序员可以看得懂的语言。Java语言中的反编译一般指将class文件转换成java文件。
javap
javap是jdk自带的一个工具,可以对代码反编译,也可以查看java编译器生成的字节码。javap和其他两个反编译工具最大的区别是他生成的文件并不是java文件,也不像其他两个工具生成代码那样更容易理解。
jad
jad是一个比较不错的反编译工具,只要下载一个执行工具,就可以实现对class文件的反编译了。但是,jad已经很久不更新了,在对Java7生成的字节码进行反编译时,偶尔会出现不支持的问题,在对Java 8的lambda表达式反编译时就彻底失败。
CFR
CFR是一个不错的选择,相比jad来说,他的语法可能会稍微复杂一些,但是好在他可以work。CFR还有很多其他参数,均用于不同场景,读者可以使用java -jar cfr_0_125.jar --help进行了解。
http://www.benf.org/other/cfr/
procyon
https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler

如何防止反编译?
1.隔离Java程序
2.让用户接触不到你的Class文件
3.对Class文件进行加密
4.提到破解难度
5.代码混淆
6.将代码转换成功能上等价,但是难于阅读和理解的形式

你可能感兴趣的:(Java编译与反编译)