02月 1st, 2010几个处理Java的class文件的工具
关注我的Twitter的同学基本上都知道我最近干的好事,这里总结一下用过的处理Java字节码(bytecode)的工具,供以后参考。
一般来说手动修改二进制文件是件苦差事,有源码在手不如直接修改重新编译。但有些软件是不开源的,又想修改它的功能以便更好使用,就想反编译,但很多代码都是混淆过的,反编译后几乎不能阅读,如果要改的的地方不是很多,比如最常做的是反转条件和替换字符串,这还能直接从字节码下手。
反编译器
- JD Java Decompiler
- JAD Java Decompiler
试了几个,觉得这个最好用,反编译首选。可惜是闭源的,但非商用免费,版本也比较新。用C++写成的,有GUI,用的是wxWidgets,所以跨平台,独立程序,就一个文件,速度还很快。支持直接打开jar文件,批量保存,代码高亮,多标签,字符串查找。还有Eclipse的插件版本。

这个比较老牌编译器了,命令行的,这个也是闭源的,非商用免费,很多编译器都是都是它的一个前端而已,会命令的话直接用它好了,选项也很丰富,尤其是输出格式。但对新版的Java特性不如JD,所以候选。它也有开源的Eclipse插件JadClipse。
开源也有jode,但是太古老了,不推荐了,反正我是上面两个配合用,都反编译一份,以JD为首选,对于个别错误的地方参考JAD的结果,然后手工收复,试过把microemulator的demo反编译然后重新编译,运行通过。
字节码处理
- javap
- jclasslib bytecode viewer
- Java Bytecode Editor
- Java Class File Editor
这个命令是,jdk自带的,作用就是输出字节码,偶然配合grep来看看也好。
jclasslib是修改class文件的java库,可是我还不会用,但它自带了一个字节码查看器,可以说是javap的GUI。分门别类显示class里面的元素,还带点击跳转链接。不带编辑功能,还得用十六进制编译器参照JVM的指令代码来修改。

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

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

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

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



02月 22nd, 2010 at 09:29
最近我也要写Java代码了,工作需要啊,写多了ruby再写java是个折磨
[回复]