附加jar中某些类的源代码

时间:2011-01-05 08:11:01

标签: java jar reverse-engineering decompiling decompiler

对于我们的项目,我们正在进行逆向工程。 为此,我们必须调试第三方jar。

我尝试使用DJ,JAD对该jar进行反编译,但是输出是带有编译时错误的源代码(比如返回类型在方法原型中是boolean,但是返回int,为循环打破等等)。

现在,在这个损坏的源代码中,有几个.java文件,我想调试。 我想将这几个文件的源代码与jar中相应的类相关联。

我用Google搜索了这个,但没有找到任何有用的东西。 ????

3 个答案:

答案 0 :(得分:2)

阻止程序是反编译器很可能无法使用正确的行号重写源文件。因此,即使编译的lib具有适当的行号信息,使用开箱即用的反编译输出也不起作用。

即使没有源代码,您也可以在方法中设置断点(只要编译的类文件中有行号信息)。您甚至可以读取局部变量的值(同样,如果已经使用调试信息编译了类),但是您必须查看反编译器输出并希望最好,反编译方法足够接近真实的代码。

这不是不可能,但需要一些“手动”工作。

答案 1 :(得分:0)

您没有提到您用于调试的IDE。如果尝试调试仅在类窗体中可用的类,Eclipse会询问源代码。主要问题是Andreas_D已经提到了不匹配的行号。

我会尝试以下方法。

  1. 删除所有已反编译的java文件 在工作状态下被反编译。
  2. 尝试编译每个工作 使用反编译的java文件 类路径中的原始JAR。这个 允许您生成新类 具有正确行信息的文件 调试。
  3. 现在替换中的类文件 JAR文件与您拥有的文件 成功重新编译。另外添加 java文件。你的调试IDE 应该自动识别 然后是源文件。

答案 2 :(得分:0)

在java代码中附加类的源代码:

  • 右键点击所需的课程

  • 转到公开声明 [F3]
    类文件编辑器将打开单击Attach Source按钮

  • 浏览具有源代码

  • 的jar
  • 点击<确定>
    完成上述步骤后,Open Declaration将打开包含源代码的.class文件。