2014-11-08 157 views
0

在Tomcat浏览器中有一个正在Windows上运行的Web应用程序。 应用程序用户.jar文件的数量作为其逻辑的存储。编译或不编译.class文件

当我打开一个jar文件,我需要改变一个逻辑,我看到一堆.class文件。 (我认为是Java编译的类)。当我尝试在文本编辑器中打开.class文件时,我看到一个半可读的乱码。

当我将这个编译后的.class提供给像showmycode.com这样的服务时,我可以看到实际的java代码。 在这一点上,我根据自己的需要更改代码,并希望将更新的.class文件供应用程序使用(将其放回到jar中)。

是强制性的,我将.class文件编译为“半可读的乱码”,或者我可以把它作为源代码文件(可能不是,但认为我会问以防万一)。 如果我必须编译atered代码,我可以在没有在某个Java IDE中启动项目的情况下执行它,只需通过命令行将其编译到.class中?

+1

为什么要进行反编译 - 编译 - 重新编译周期?你不应该这样做。只需处理原始的,记录在案的未经模糊处理的源代码,并在您的代码准备就绪后进行编译。这样你总是有可读的,记录在案的代码。 – 2014-11-08 12:44:47

+0

看到你的背景是C# - 你在做什么类似于反编译.NET DLL/EXE,编辑代码,然后重新编译它们。作为一个工作流程没有多大意义。如果你需要反编译一个文件 - 执行_once_,然后记录下来,理解它,然后从这一点开始使用source_。 – 2014-11-08 12:46:17

+0

我在更改一个我无法访问源的应用程序。 – 2014-11-08 13:01:22

回答

0

有两种主要的编辑应用程序的方法,你没有它的源代码。

第一个,你发现是反编译,编辑,重新编译。好处是你不必知道字节码的任何内容,因为它只是反编译为Java。主要缺点是即使是最好的反编译器也不能保证产生可重编译的代码。如果应用程序完全被混淆,则可以忘记重新编译。

另一种方法是反汇编,编辑,重组。我建议Krakatau这(披露,我写了它)。另一种选择是ASM,但是它是为了编程修改而设计的,而不是手动编辑,而且它更笨拙。

字节码编辑的主要优点是,即使应用程序被模糊处理,它仍然可以正常工作。缺点是它显然要求你理解并能够直接用字节码编程。