Java开发之反编译
前言
作为一个程序员,免不了自己的代码被人破解,知道如何破解,才能有效的防止破解,这就是常说的,要想学会打架要先学会挨打。
1.JD-GUI
这个使用了JD-GUI看了看,好像也还可以。
(1) 下载
(2) 启动JD-GUI
1 | java -jar jd-gui.jar |
(3) 打开jar文件,查看原代码
1.jar还原源码 发现了一个save!一阵兴奋,然后点了保存试了一下,发现导出来的zip文件就是反编译后的整个源码!
2.超好用的java反编译工具(Java Decompiler)
3.如何将已经部署好了的web项目反编译,并对其中的类文件进行修改 因需要在没有源代码的条件下对项目中的类文件进行修改,我使用的办法是先将整个项目打成jar包,jar包中的内容可以不完全都是.class文件,可以是任意格式的类型文件。
4.修改jar包中class文件并重新打包 1.jar -xvf 解压;2.jar -cvf 重新打包;3.jar umf META-INF/MANIFEST.MF 更新;
2.Bytecode-Viewer
JD-GUI的效果其实并不好,除了能看到部分的代码,其实对于导出,一点用都没有。另外一个比较好的工具就是 Bytecode-Viewer,操作上也非常的简单。用jd-gui打开的war文件,可能有部分的类缺失,特别是enum类型。Bytecode-Viewer支持打开war文件,然后也支持打开jar文件,内容还是很全的。
(1) 下载 bytecode-viewer
去官网下载就好了。
(2) 运行
1 | java -jar Bytecode-Viewer-2.11.2.jar |
(3) 查看代码并导出
在进行保存的时候,弹出来了这么个选择框。经过测试,要选择后面的两个才能把一些jd-gui无法反编译的内容编译出来
(4) 修改代码
编译导出后的代码,并不是一定能直接使用。在我遇到的情况的时候,就是 lambda 表达式,在经过反编译后,所有的类型推断都没有了,比如 Map<String,Integer> test,就会直接变成了 Map test,所以在调用 test.feath(e->{}) 这种语法都时候,并不能准确的知道 e 的类型,往往都会变成了 object 这样的类型。
1.Bytecode Viewer 字节码查看器 1.Procyon:核心框架、反射框架、表达式框架、编译器工具集(实验性)、Java 反编译器(实验性。2.CFR(Class File Reader):将反编译现代 Java 功能 - 直到并包括 Java 9、12 和 14 的大部分内容,但完全用 Java 6 编写,因此可以在任何地方使用! 它甚至可以很好地将其他 JVM 语言的类文件转换回 Java!3.Fernflower:IDEA 内置的反编译器。它是是第一个实际工作的 Java 分析反编译器,一般来说可能是一种高级编程语言。
2.反编译后的代码不全怎么办,教你一招分分钟解决 这里提供了另外的一个发编译的工具 bytecodeviewer
3.war包进行反编译
tomcat中的 webapps 目录下的应用程序已经是解压缩之后的了,如何使用 jd-gui 进行查看呢?
(1) 创建一个 manifest.mf 文件
(2) 执行文件打包
使用 jar 命令,增加cfm参数,可以将 mapserver 打包成 jarfilename.jar 文件,这样就可以在 jd-gui 中查看全部大的代码了。
1 | jar cfm jarfilename.jar mapserver/manifest.mf mapserver/ |
(3) 使用 bytecode-viewer 打开这个 war 包,并重新进行导出操作。