java反编译软件jd-gui.exe以及使用javassist修改class文件 .

(2012-11-13 13:39:45)

杂谈

上周实验室的一个去年完成的项目出bug了,负责这个项目的人有很多,但杯具的是只剩我还在实验室了。。只好我来调,但更杯具的是,竟然找不到源代码了。。汗。。

只好求助志哥,还好志哥经验丰富,推荐用jd-gui,以下是他教我的。

jd-gui的反编译效果还真不错,是我目前为止见过最好的了,能反映出所有源码的层次,而且代码基本还原了,除了原来的一些泛型显示不出来或者多次重新定义了变量外,基本没问题。

用这个软件反编译出来后,我确定问题的类,修改完成后,我新建一个同样的工程,Java Project 或者Web

Project,把原来lib包里的jar导入,

然后把原来的class文件(对应无源码的那部分)用winrar压缩成一个jar,是的,确实可以压缩成一个jar包,在压缩过程中把后缀名改下就行。把这个jar包导入。

然后在刚刚建的工程里面新建一个类,把之前改好的那个类的内容copy过去,然后编译,编译完后直接把生成的对应的class文件复制到服务器上对应类的目录,然后重新运行查看效果,当然你也可以在本地重新建立服务器,在本地测。直至成功。

很有意思的是,这次工程还运行了一段R脚本,导致我还得重新调R脚本,在这次调试中,志哥给我带来了很大的积极影响,就是,脚本不过是脚本,完全

可以在一个脚本解释器里面一步一步执行这些脚本,查看有哪些错误,虽然脚本的语法我不知道,但足以从这段脚本中窥得一二,而且编程语言万变不离其宗,定义

的方式都那么样,完全不用担心看不懂,学了这么多编程语言,看到一段脚本,基本能知道是啥意思。一步一步执行,写了几行,自然就知道了。

最后,感谢一下志哥。

对了,他昨天又给我露了一手,调试一个python源码,一个大包,太大了,所以来了个破坏性调试,把某些代码/文件夹移走,一报错自然就知道哪个地方调用了哪个模块了,哈哈