JAR скрыт внутри EXE?

Minecraft, игра на Java, бесплатно в эти выходные. Версия Windows загружается как exe файл. Мне было любопытно, что делает EXE файл и где он распаковывает и запускает реальный JAR игры. Поэтому, используя команду, я нашел аргументы командной строки для запуска javaw.exe-процесса; и, как ни странно, он был запущен с classpath, указывающим на исполняемый файл! (то есть, файл .exe действовал как банка). Действительно, после переименования Minecraft.exe в Minecraft.jar, я смог открыть его и посмотреть файлы классов загрузчика и т.д., Как если бы это был обычный JAR файл, а не EXE вообще.

Как это возможно? И как я могу сделать это с помощью своих JAR файлов?

Ответы

Ответ 1

Это использовалось ранее, чтобы быть очень распространенным - особенно в дни гибких дисков, где пространство было драгоценным, и было утомительно, чтобы программа unzip была на другом диске, чем zip файл.

Причина, по которой это может быть сделано, состоит в том, что структура инвентаризации zip файла находится в конце zip файла, а не спереди, поэтому zip файл может содержать большое количество начальных нерелевантных байтов, если структура инвентаря не указывает на них (и, соответственно, на jar файлы). Очень часто для этого требовалось заключить небольшую программу, которая может распаковывать ZIP файл.

Одной утилитой для добавления такой программы является unzipsfx. Вот для него справочная страница: http://linuxcommand.org/man_pages/unzipsfx1.html

Похоже, Minecraft использует другую добавленную программу, которая вызывает Java на себе.


РЕДАКТИРОВАТЬ: Просмотрен с помощью шестнадцатеричного редактора. Minecraft.exe завернут Launch4j.

Ответ 2

после переименования Minecraft.exe в Minecraft.jar, я смог открыть его и посмотреть файлы классов загрузчика и такие

Некоторые EXE файлы фактически являются самораспаковывающимися ZIP файлами. Файлы JAR, в свою очередь, являются обычными ZIP файлами со специальной файловой структурой. Готов поспорить, что вы просто открыли его с помощью ZIP-инструмента после его переименования. Обратите внимание, что некоторые инструменты ZIP автоматически интегрируются в проводник Windows (или наоборот), чтобы он выглядел прозрачно.

Ответ 3

Формат файла ZIP (и по расширению, JAR) является гибким, поскольку он позволяет встраивать архив в другой формат файла. Это то, что делает самораспаковывающиеся ZIP-архивы возможными (некоторый небольшой код встроен в области, которые параметры файла ZIP игнорируются утилитами unzip). Он также использовался и для некоторых особенно подлых эксплойтов.

Я предполагаю, что Minecraft также использовал возможность сделать архив действительным исполняемым и добавленным кодом Windows для запуска JVM с самим собой в пути к классам.

Смотрите также: Википедия: объединение ZIP с другими форматами файлов

Ответ 4

Launch4J делает это. Это действительно впечатляет.

Ответ 5

Если вы хотите быстрое решение, не слишком много размышляя и используя обертку, Jsmooth хорошо выполняет свою работу.