【问题标题】:Decompile compiled Java file with proprietary headers使用专有标头反编译已编译的 Java 文件
【发布时间】:2010-11-11 05:48:28
【问题描述】:

我有一个使用专有程序编译的二进制 java 文件。我试图在一些标准的反编译器中打开它,但它们不会识别它。

我怀疑这是因为添加了一些特定的专有标头,基于在十六进制编辑器中查看文件。有什么方法可以检测 java 字节码在这个文件中的开始和结束位置,或者如何提取它以便我可以通过像 this 这样的反编译器运行它?非常感谢任何帮助。

[编辑]

顺便说一句,我想知道这是如何实现的,换句话说,Java 的哪些设施/功能允许您以这样的自定义方式使用他们的编译器?

附言如果您在另一个选项卡中打开它,图像会更大。

【问题讨论】:

  • 这看起来不像 java 类文件。在十六进制编辑器中打开它,前 4 个字节应该是 CA FE BA BE。也许是罐子?尝试将其作为 zip 文件打开。
  • 这不是 jar 文件 -- jar 文件应该以 'PK' 开头。
  • 尝试十六进制转储(或在十六进制编辑器中打开并捕获屏幕)。不可能看到你的图像上的那些字符是什么。
  • @J-16 SDiZ:我在上面的帖子中添加了部分十六进制转储屏幕截图。
  • 经过进一步分析,我怀疑这个文件可能被加密和/或打包,7 Zip 报告它的打包方法是 LZMA:17 但导出一个空文件。我尝试创建一个新的受密码保护的 7-zip 文件并进行比较,但它们看起来完全不同,可能是因为这是使用 Java 7 zip 库创建的。

标签: java decompiling


【解决方案1】:

我的猜测是它是一个加密的 jar。编译后的代码仍然必须是 Java 字节码才能在 JVM 上运行,除非他们自己编写,这是极不可能的。该过程的专有部分可能是 jar 的加密,因此如果没有正确的解密密钥,它就不会运行。

如果是这种情况,则包的另一部分必须同时具有正确的密钥和解密机制。您说它是二进制 Java 文件,但这可能意味着 .class 文件或 jar 文件。

这段代码是如何执行的?您是否必须自己启动 jvm(“c:/>java com.mystery.App”)或者它是否是其他可执行文件(exe、jar、批处理等)使用的模块?

【讨论】:

  • 好问题。此文件是桌面应用程序的插件模块。此应用程序允许您编写一些 Java 代码并在应用程序本身内对其进行编译。编译后,它会创建文件 *.jfx,其中包含您在屏幕截图中看到的内容。此编译文件是可移植的,该应用程序允许您注册放在文件夹中的 .jfx 文件。
  • 尝试将 *.jfx 文件添加到 Eclipse 项目中,看看 Eclipse 是否可以显示公共字段/方法(如果它是类)或包和类(如果它是 jar)。跨度>
【解决方案2】:

你试过unpack200吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-12
    • 1970-01-01
    • 2020-08-22
    • 1970-01-01
    相关资源
    最近更新 更多