2015-08-06 3 views
1

Я сделал простую программу в Visual Basic, затем дал ей расширение JPG и настроил его для запуска из ярлыка с командной строкой cmd.exe /c my_program.jpg, в соответствии с this и this руководствами.Выполнить EXE как JPG

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

Я знаю, что такая вещь возможна, потому что я могу запускать программы из документов PDF, RTF или Word, потому что большинство PDF-файлов имеют JS API-функции, а документы Microsoft Office поддерживают VBA и макросы. Может быть, какая-то стеганография может сделать трюк?

+1

?? !!?! Преобразование EXE-файла в JPG? Это, должно быть, шутка века. Конечно, исполняемые файлы - это изображения ... но не THOSE изображения! =) –

+1

См. Это: http://security.stackexchange.com/questions/81677/how-is-it-possible-to-embed-executable-code-in-an-image –

ответ

4

Это трудно поверить, но на самом деле это правда. Мое расследование (с помощью Rohitab API Monitor) показывает, что при обнаружении файла cmd.exe сначала вызывает CreateProcessW - , и только если это не удается (в данном случае с ошибкой 193 == ERROR_BAD_EXE_FORMAT), пытается ShellExecuteW.

Это поведение фактически зарегистрировано в KB811528 - Command Prompt (Cmd.exe) Runs Files That Do Not Have Executable File Name Extensions. Конечно, в статье упоминается попутно, что это может привести к выполнению вирусов (как будто это ничего особенного).

Это не относится к Проводнику Windows/shell32 диалогов/большинство других программ, которые открытые файлы - поскольку они взывают ShellExecute сразу. Но это обычно относится к программам, которые выполняют командные строки с system или CreateProcess! (Вы помните процессы, подобные setup.tmp во время установок на основе InstallShield? Они являются примерами.)

Не все программы, выполняющие произвольные команды, затронуты. Например. Total Commander - нет: он вызывает ShellExecute даже для командной строки.


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

Итак, у вас есть два варианта:

  1. запустить программу через другую программу (с ярлыком или иным образом), но заменить cmd с чем-то, что не создает окно консоли. wscript Приходит на ум.
  2. Используйте некоторый «интеллектуальный» формат изображения, который должен содержать исполняемый код. Я не знаю ни одного image - в конце концов, изображения должны содержать картинки, а не код!
    • Есть, конечно, больше, чем несколько соединения/«интеллектуальные» форматы (из которых вы назвали несколько). Тем не менее, они, как правило, налагают строгие ограничения, когда код внутри них может быть вызван и что ему разрешено делать. Я узнаю, что эти ограничения были введены конкретно как ответ другим, которые делают то, что вы пытаетесь сделать.
+0

Спасибо за ответ. –

1

У меня возникли проблемы с верой в то, что, учитывая то, что вы сказали.

CMD выполнит любой файл изображения (это файл программы, такой как exe - вообще ничего не делать с картинками), который имеет распознанное исполняемое расширение или имеет неизвестное расширение. jpg известны как файл типа документа, поэтому они открываются в виде документа в фотоальбоме Windows. Проводник не выполнит неизвестное расширение. Оба CMD и Explorer используют базу данных расширений файлов Explorer для разработки способов открытия файлов документов.

Поэтому вам нужно объяснить, почему он работает на вашем компьютере, когда он не будет работать на стандартном настроенном компьютере под управлением Windows.

+0

В Windows XP в виртуальном ПК vmware в соответствии с к этому учебнику: https://www.youtube.com/watch?v=Y4A_BtxJJb4 и этот учебник: https://www.youtube.com/watch?v=-3UZn8dN6MQ –