Выполнение Java во время выполнения exe-оболочки в байтовом массиве

У меня есть этот код, который копирует исполняемый файл в байтовый массив.

    //winmine.exe
    Path path = Paths.get("winmine.exe");
    byte[] bin = Files.readAllBytes(path);

Я хочу динамически выполнить массив без использования файла. К примеру мне нужно что-то вроде этого:

    Runtime app = Runtime.getRuntime();
    String currentDir = new File(".").getAbsolutePath();
    Process p = app.exec_WRAP_BINARY(bin);   //Not exixts

Цель этого - запретить пользователю доступ к файлу winmine.exe.

Обновление: я уверен, что это должно быть возможно как-то. Если мы считаем, что это исполнение: сначала он читает файл, а затем полностью загружает его в память... Я не вижу, потому что он не может сделать это отдельно.

2 ответа

То, что вы хотите, не совсем возможно, в общем. Системный компоновщик должен будет связать двоичный файл и загрузить его до того, как он запустится, и на большинстве (почти на всех, кого я знаю и, конечно, на Windows/Linux) это означает, что вам понадобится файл в файловой системе.

Конечно, вы всегда можете записать его там, возможно, во временный каталог, выполнить его как файл, а затем удалить его позже.

Даже если бы вы писали на чистом C, вы не могли бы легко это сделать.

(Предостережение. В Windows вы / можете / теоретически делаете это с помощью исполняемого файла формата.com. Но серьезные ограничения на этот формат делают его устаревшим.)

В Linux вы также можете попытаться найти двоичный файл системного загрузчика и выполнить его, передав весь двоичный файл в него через канал. Это работает, потому что он функционирует как своего рода "двоичный интерпретатор". Но я бы не рекомендовал такой подход.

Может быть, я понимаю, что вы спрашиваете совершенно неправильно, но если то, что вы пытаетесь достичь, это иметь "приватный".exe-файл ", возможно, вам следует поместить это как ресурс в".jar ", который я Предположим, вы хотите сгенерировать, а затем извлечь его во временную папку, "скрытую" для пользователя, и вызвать его оттуда с помощью простого вызова процесса, а затем, когда вы закончите, удалить этот файл, не снимая блокировки с него, чтобы пользователь не смог доступ к нему, но все это для "ленивого" пользователя, вы должны понимать, что если кто-то действительно хочет получить доступ к этому exe, ОНИ БУДУТ, то это причина, по которой Window по-прежнему так легко пиратствовать, и все это чтобы создать Java-приложение, которое работает только на Windows, поэтому вам нужно добавить еще одну "библиотеку / приложение", чтобы сделать это для вас в *NIX (на случай, если вы хотите добавить поддержку нескольких систем)

Другие вопросы по тегам