【问题标题】:Reverse Engineering in JavaJava中的逆向工程
【发布时间】:2015-06-12 02:40:45
【问题描述】:

我知道同一个问题在 SO 上已经被问过很多次,而且我已经浏览了大部分主题。不过,我还是没有一个满意的答案,所以我想去社区问问。

我被分配了对模块进行逆向工程的工作,但遇到以下问题:

  1. 团队不知道底层组件到底是什么 (模块是第三方解决方案)
  2. 团队只在测试部分工作,所以他们只能提供给我 有关流程的信息,但起点是什么? 是他们不知道的地方。

现在他们希望我挖掘代码库并提出类图以及序列流等。

在我的职业生涯中,我从来没有在这种不知道从哪里开始以及如何完成这项工作的情况下工作。我唯一拥有的是源代码。

我有两个问题需要帮助:

  1. Eclipse 有没有可以生成类图的插件 自动从源代码?
  2. 遇到这种情况应该采取什么方法?

更新: 我将有权访问源代码。所以我更倾向于完成任务的最佳方法

【问题讨论】:

  • 您有源代码还是只使用.class 文件/罐子?
  • @Chris:我已经告诉我要访问源代码
  • 是的,好问题。我假设没有源代码,但如果有,那么它肯定是一个更简单的解决方案......
  • 逆向工程是在不了解内部结构的情况下重新创建与现有设备执行相同操作的设备。如果您有某些东西的源代码,那么您就不会对其进行逆向工程。你正在重构它,或者记录它。

标签: java reverse-engineering


【解决方案1】:

有几个 Java 反编译器可以帮助您,例如 JD-Core,还有一个 Eclipse 版本。

【讨论】:

  • 了解新的代码库始终是一项艰巨的任务,即使有文档和类图也是如此。我发现从小处着手总是有帮助的。您显然已经使用了该库的一小部分,所以我将从该 API 开始。获取您已经在使用的类的列表,并首先尝试理解它们。类库通常由同一个人或团队编写,因此了解他们如何构建代码将有助于理解整个库。无论您是否使用工具都是如此。
【解决方案2】:

我会从反编译模块开始,并确保反编译的代码可以重新组装成一个工作库。例如,您可以使用JD我现在可以看到您已经获得了源代码。

首先获得可编译的源代码很重要,因为您必须在探索时添加 cmets 和 javadoc。您不必再使用原始二进制文件,只需将反编译的源代码视为文档非常糟糕的正常代码。重命名局部变量和方法参数以使代码更易于阅读也是一个好主意。

.java 文件生成类图应该很容易。

可以通过两种方式了解流程,手动或使用分析器。对于这两种方法,您都需要首先找到入口点,但如果您已经在使用该库,这些应该是相当明显的。然后,您只需调用 API 方法并逐步执行代码。总是记下你遇到的任何有趣的事情。 (在许多方面,探索未知代码类似于在一个古老的冒险游戏中探索地牢。)将这些注释转换为 javadoc cmets,以便您可以在进行过程中生成更多信息丰富的 javadoc。

分析器方法更多的是发现调用的一般模式,但每个分析器都应该有一个可以使用的调用堆栈视图。

【讨论】:

    【解决方案3】:

    问题 (2) 的答案将取决于您对我的评论的回答,但对于问题 (1),请查看 this page,它提供了有关如何使用 eclipse 从源代码生成 UML 类图的教程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-01
      • 2011-07-01
      • 2012-08-26
      • 2015-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多