带可执行jar的Java项目;运行并从中检索数据

时间:2011-11-17 14:04:38

标签: java executable-jar decompiling

在工作中,我使用Java应用程序(我在C驱动器上找到了编译/可执行的jar文件)。我希望能够通过代码从这个应用程序中获取一些信息。应用程序本身可能不存储信息,因此它必须以某种方式与遗留系统进行通信,我不知道如何,我已经看到了Servlet的痕迹(?)因此,我怀疑该应用程序还具有内置的“加密”( ?)

我不想参与加密和登录程序等,所以我想我可以围绕当前的可执行jar构建一个Java项目,并像往常一样启动应用程序(通过“主”条目点,“Start.jar”,但在执行后调用我想要的函数(即应用程序只在后台运行)...

这可能吗?还有另外一种方法吗?例如,可以连接已经执行的Java应用程序并发出命令吗?

到目前为止我尝试了什么

  1. 下载了Eclipse,并创建了一个新项目
  2. 制作Eclipse“引用”外部罐子(Eclipse中有一个向导)
  3. 在我的新项目中创建了一个新类,我在其中启动“主”可执行jar的“主”入口点(所有jar的结构弹出“IntelliSense”)。我还发现我需要使用JD-GUI(Java Decompiler)向主程序提供哪个参数......
  4. 似乎从主程序内部调用另一个程序,该程序驻留在另一个jar中,在Eclipse的调试窗口中我只看到一个错误,这让我怀疑我当前的方法是否可行..也许问题出现了,因为命令是从编译的jar发出的? “类路径”会出现问题吗?这根本不是解决方案吗?但话说回来,我没有Java经验(主要是VBA和一些C#)。

2 个答案:

答案 0 :(得分:2)

您可以使用选项启动应用程序的JVM,从而启用远程调试。然后,您可以将eclipse调试器连接到此JVM。

http://www.eclipsezone.com/eclipse/forums/t53459.html

答案 1 :(得分:1)

根据您的问题,我猜你的应用程序没有可以编码的Java API。那当然是最简单的方法。所以,如果你还没有检查过,那就先做。

假设您没有可用于编码的API,我认为您的方法是正确的。但这可能很难,因为你基本上是盲目地试图找出应用程序在做什么。远程调试可能会解决部分问题。

如果您确定通过网络发送请求,可能会有一个稍微简单的解决方案。您可以使用Wireshark之​​类的工具来查看它正在创建的内容。然后,您可以让应用程序创建看起来像这样的请求并将它们发送到该目标。这当然假设请求未加密。在那种情况下,你可能运气不好。