将 EXE 执行为 JPG

Execute EXE as JPG

我在 Visual Basic 中制作了一个简单的程序,然后给它 JPG 扩展名,并根据 this and this 使用命令行 cmd.exe /c my_program.jpg 的快捷方式将其设置为 运行指南。

到目前为止一切都很好,但我想 运行 我的程序来自图像而不打开命令提示符。

我知道这样的事情是可能的,因为我可以 运行 从 PDF、RTF 或 Word 文档编写程序,因为大多数 PDF 文件具有 JS API 功能,而 Microsoft Office 文档具有 VBA 和宏支持。也许一些隐写术 thingamajig 可以做到这一点?

鉴于你所说的,我很难相信。

CMD 将执行任何具有可识别的可执行扩展名或未知扩展名的图像文件(这是一个类似于 exe 的程序文件 - 与图片完全无关)。 jpg 被称为文档类型文件,因此 Windows 照片库将它们作为文档打开。资源管理器不会执行未知扩展。 CMD 和 Explorer 都使用 Explorer 的文件扩展名数据库来计算如何打开文档文件。

因此您需要解释为什么它在标准配置的 Windows 计算机上无法运行时在您的计算机上运行。

这难以置信,但确实如此。我的调查(使用 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 Explorer/shell32 dialogs/most 其他 打开文件的程序 - 因为它们调用 ShellExecute 马上。但这通常适用于 使用 systemCreateProcess 执行命令行 的程序! (您还记得在基于 InstallShield 的安装过程中像 setup.tmp 这样的过程吗?它们是示例。)

并非所有 运行 任意命令的程序都会受到影响。例如。 Total Commander 不是:它甚至对命令行调用 ShellExecute


现在,关于你的具体问题。第二个指南实际上展示了一个 exploit(假设这不仅仅是一个骗局)——作者特意制作了图像以利用 Windows 照片库中的一些漏洞(可能已经修补) by now) 使其执行包含的代码。这通常是不可能的。

所以,你有两个选择:

  1. 通过另一个程序(使用快捷方式或其他方式)启动您的程序, 但将 cmd 替换为不会创建控制台的内容 window。 wscript 想到了。
  2. 使用一些应该包含可执行代码的 "intelligent" 图像格式。我不知道有任何 image - 毕竟,图像应该包含图片,而不是代码!
    • 当然,还有很多 复合/"intelligent" 格式(您列举了其中的几个).然而,它们倾向于对何时可以调用其中的代码以及允许执行的操作施加严格的限制。 我会让你知道这些限制是专门作为对其他人做你想做的事情的回应而引入的。