`

几个处理 Java 的 class 文件的工具(转载)

阅读更多

本文转载自:http://qixinglu.com/post/some_handle_java_class_file_tools.html

 

一般来说手动修改二进制文件是件苦差事,有源码在手不如直接修改重新编译。但有些软件是不开源的,又想修改它的功能以便更好使用,就想反编译,但很 多代码都是混淆过的,反编译后几乎不能阅读,如果要改的的地方不是很多,比如最常做的是反转条件和替换字符串,这还能直接从字节码下手。

反编译器

JD Java Decompiler

试了几个,觉得这个最好用,反编译首选。可惜是闭源的,但非商用免费,版本也比较新。用 C++ 写成的,有 GUI,用的是 wxWidgets,所以跨平台,独立程序,就一个文件,速度还很快。支持直接打开 jar 文件,批量保存,代码高亮,多标签,字符串查找。还有 eclipse 的插件版本。

下载地址

JAD Java Decompiler

下载地址

这个比较老牌编译器了,命令行的,这个也是闭源的,非商用免费,很多编译器都是都是它的一个前端而已,会命令的话直接用它好了,选项也很丰富,尤其是输出格式。但对新版的 Java 特性不如 JD,所以候选。它也有开源的 eclipse 插件 JadClipse

jode

下载地址

开源也有 jode,但是太古老了,不推荐了,反正我是上面两个配合用,都反编译一份,以 JD 为首选,对于个别错误的地方参考 JAD 的结果,然后手工收复,试过把 microemulator 的 demo 反编译然后重新编译,运行通过。

字节码处理

javap

下载地址

这个命令是,jdk 自带的,作用就是输出字节码,偶然配合 grep 来看看也好。

jclasslib bytecode viewer

下载地址

jclasslib 是修改 class 文件的 java 库,可是我还不会用,但它自带了一个字节码查看器,可以说是 javap 的 GUI。分门别类显示 class 里面的元素,还带点击跳转链接。不带编辑功能,还得用十六进制编译器参照 JVM 的指令代码来修改。

Java Bytecode Editor

下载地址

简称 JBE,这个就是上面的修改版,就是多加一个编辑功能,免去查指令代码的痛苦。非常使用,不需要用到 jclasslib 库的下载这个好了。

Java Class File Editor

下载地址

虽然版本有点古老,但是还是个功能非常强大的修改器,能修改 class 的方方面面,最常用的是修改常量,比如字符串,用法比较简单,相信程序员也会用。也可以改字段、方法的属性,很强悍。

也有字节码查看功能,虽然可编辑的,但不知道为什么保存不了。

总结

上面几个各有优缺点,配合来用互补,对于混淆过的代码反编译后难以阅读,更不用说编译回去,但起码能参考一下,方便定位要改的地方,改好后在反编译一次,diff结果,看看影响到那些代码。

最后顺便纪念一下逝去的 Sun,这个伟大的公司。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics