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

仅给出.exe就可以判断是否是使用一个这样的实用工具从.jar文件生成的?

评论

您的标题说的是一件事,而问题正文是另一回事。您能说明哪个是真正的问题吗?

#1 楼

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



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

评论


好的答案,当然其他工具可能不会使用相同的方法。无论如何,这个问题还是有点含糊,所以我认为回答特定的实现是正确的方法。

–乔丹
13年3月22日在13:37

#2 楼

如果可执行文件本身未打包或混淆,则通常可以通过简单地在7-zip之类的解压缩实用程序中打开jar或class文件来找到它们。



评论


您可以使用7-zip之类的文件解压缩jar文件,但问题已得到澄清,是从exe中提取jar,而不是从jar中提取exe。

– amccormack
13年3月27日在1:00

我明白这个问题。您可以打开7-zip中的exe来查找jar / class文件。

–亨利·海基宁(Henry Heikkinen)
13 Mar 27 '13在7:37

#3 楼

exe可能只是一个小插件,它将在一组打包的类上执行java解释器。我不了解有关他们工作方式的更多详细信息,但是jar文件很有可能未经修改地放在生成的exe文件中

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

#4 楼

您可以简单地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 $ 

/>这是因为包装程序通常包含以下内容: