Это трудно поверить, но на самом деле это правда. Мое расследование (с помощью 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 (вероятно, было исправлено к настоящему времени), чтобы выполнить исполняемый код. Это, как правило, невозможно.
Итак, у вас есть два варианта:
- запустить программу через другую программу (с ярлыком или иным образом), но заменить
cmd
с чем-то, что не создает окно консоли. wscript
Приходит на ум.
- Используйте некоторый «интеллектуальный» формат изображения, который должен содержать исполняемый код. Я не знаю ни одного image - в конце концов, изображения должны содержать картинки, а не код!
- Есть, конечно, больше, чем несколько соединения/«интеллектуальные» форматы (из которых вы назвали несколько). Тем не менее, они, как правило, налагают строгие ограничения, когда код внутри них может быть вызван и что ему разрешено делать. Я узнаю, что эти ограничения были введены конкретно как ответ другим, которые делают то, что вы пытаетесь сделать.
?? !!?! Преобразование EXE-файла в JPG? Это, должно быть, шутка века. Конечно, исполняемые файлы - это изображения ... но не THOSE изображения! =) –
См. Это: http://security.stackexchange.com/questions/81677/how-is-it-possible-to-embed-executable-code-in-an-image –