检查 .exe 是否实际上是包含在 .exe 中的 .jar

逆向工程 反编译 爪哇 聚乙烯
2021-07-05 02:31:03

假设我有一个 .jar 文件,并使用任意数量的免费实用程序将其包装到 .exe 中,例如JSmooth

仅凭 .exe,是否有可能判断它是否是使用 .jar 文件中的一个此类实用程序生成的?

4个回答

我用 JSmooth 做了一个快速测试,它只是将整个 .jar 文件放在一个资源中。您可以通过使用Resource Hacker打开一个 JSmooth 可执行文件轻松看到这一点,如下面的屏幕截图所示(我使用了 java lib 文件夹中的 sun 的 deploy.jar):

Resource Hacker 将 jar 显示为资源的屏幕截图

对于其他实用程序,它可能会有所不同,但您可以使用binwalk 之类的工具来查找 exe 中的 jar/zip 签名。

如果可执行文件本身没有打包或混淆,您通常可以通过在解压缩实用程序(例如 7-zip)中打开它来找到 jar 或类文件。

以 7-zip 格式打开的 Minecraft 启动器 exe

exe 可能只是一个小的附加组件,它将在一组打包类上执行 java 解释器。我不知道有关他们如何开展工作的更多详细信息,但是 jar 文件很有可能在生成的 exe 中未修改

您可以使用十六进制查看器查看生成的文件,您很有可能会找到 jar 签名(要找出创建一个小 jar 文件,使用十六进制查看器查看它,将其打包并搜索特定内容)来自打包文件中的原始 jar)

您可以简单地 grep 文件以获取 " javaw.exe" 或java.exe... 这通常是一个很好的指标,该程序是否是 Java 包装器。

archenoth@Hathor ~/apps/Minecraft $ grep javaw.exe /host/Windows/notepad.exe 
archenoth@Hathor ~/apps/Minecraft $ grep javaw.exe ./Minecraft.exe 
Binary file ./Minecraft.exe matches
archenoth@Hathor ~/apps/Minecraft $ 

这是因为包装器通常包含以下内容:

在此处输入图片说明