如何判断一个.EXE文件是否有命令行选项?

67

假设你有一个 .EXE 文件,你想检查它是否具有命令行选项。如何知道 .EXE 文件是否有这种能力。在我的案例中,我知道 Nir Sofers 的 WebBrowserPassView.exe 能够通过 cmd.exe 启动,并使用 WebBrowserPassView.exe /stext output.txt 命令。但是如果我不知道怎么办呢?

7个回答

88
最简单的方法是使用ProcessExplorer,但仍需要一些搜索。
确保你的exe正在运行并打开ProcessExplorer。 在ProcessExplorer中找到你的二进制文件的名称,双击它以显示属性。 点击“Strings”选项卡。 在二进制文件中找到的字符串列表中向下搜索。大多数字符串都是垃圾,可以忽略。搜索任何可能类似于命令行开关的内容。 从命令行测试此开关,看看是否有任何反应。
请注意,可能是你的二进制文件根本没有命令行开关。
以下是对Chrome可执行文件应用上述步骤的参考。可以在列表中看到Chrome接受的命令行开关:

Process explorer analyzing Chrome.exe


7
这篇文章对于找到MalwareBytes的开关非常有帮助。为了加快搜索速度,大多数程序开关都以“/”或“-”开头,因此使用查找对话框(位于上方图像右下角)并输入这些字符可能会更快地找到您要查找的内容。 - Michael Nelson
1
这个进程资源管理器属性面板中的“查找”功能支持哪些特性?正则表达式?通配符?乍一看我似乎无法弄清楚。 - John Suit
3
@JohnSuit,恐怕只有基本搜索了,但您可能会注意到“保存”按钮,它可以让您将列表导出为.txt文件。您可以使用支持RegEx、通配符等的任何文本编辑器打开此文档并进行搜索。 - Adam
转到“图像”选项卡(最左边),您将在“命令行”下的文本框中找到命令行参数。我正在使用Process Explorer v16.43。 - Sarker

26

通过在shell中加上像/?--help这样的参数来调用它。这些都是通常用来获取帮助的开关。


1
它们没有帮助,因为.exe只是启动,没有进一步的输出。 - JohnnyFromBF
嗯,但肯定有一些通过RE或其他技术进行调试的可能性。 - JohnnyFromBF
2
@Ian,你当然可以自由地通过应用程序进行调试并寻找开关。 - yas4891

8

Sysinternals 有一款工具可以使用,Strings.exe

例如:

strings.exe c:\windows\system32\wuauclt.exe > %temp%\wuauclt_strings.txt && %temp%\wuauclt_strings.txt


谢谢@user8027324。我已经对你的答案进行了一些格式化。Strings.exe并不是一个完全可靠的方法来做这件事,但我以前确实用过它来做这个目的。 - Burt_Harris
“Strings”输出也包含在ProcessExplorer中,位于进程“属性”的“Strings”选项卡中。 - Nuno André

5

只需使用IDA PRO(https://www.hex-rays.com/products/ida/index.shtml)对文件进行反汇编,并搜索一些已知的命令行选项(使用搜索...文本)-在该部分中,您通常会看到程序的所有命令行选项 - 例如,下面的截图显示了一个记录的命令行选项(/COM2TAG),但也有一些未记录的选项,如/L。希望这可以帮助您?

enter image description here


3
“仅使用IDA PRO”是我长期以来见过的最大简化。-1 - codaamok

4

这实际上是对Marcin答案的扩展。

但您也可以尝试传递“垃圾”参数,以查看是否会收到任何错误响应。在shell中直接从可执行文件获得任何响应都意味着它可能正在查看您传递的参数,如果出现错误响应,那就几乎可以保证了。

如果仍然失败,您可能需要直接向发布者/创建者/所有者提问......自己嗅探二进制文件似乎对最终用户来说工作量太大了。


这是一个很好的想法,将垃圾作为参数输入,以查看程序的响应。 - Coldblackice

2
除非可执行文件的编写者明确提供了一种显示其提供的所有命令行开关列表的方法,否则没有办法做到这一点。
如Marcin所建议的,显示所有选项的典型开关通常为 /? /help (某些应用程序可能更喜欢Unix风格的语法,分别为 -? -help )。但这只是一个常见的约定。
如果这些不起作用,你就没办法了。你需要检查应用程序的文档,或者尝试反编译可执行文件(如果你知道你要找什么)。

1

这是我在Windows 10控制台中得到的内容:

C:\>find /?
Searches for a text string in a file or files.

FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] "string" [[drive:][path]filename[ ...]]

  /V         Displays all lines NOT containing the specified string.
  /C         Displays only the count of lines containing the string.
  /N         Displays line numbers with the displayed lines.
  /I         Ignores the case of characters when searching for the string.
  /OFF[LINE] Do not skip files with offline attribute set.
  "string"   Specifies the text string to find.
  [drive:][path]filename
             Specifies a file or files to search.

If a path is not specified, FIND searches the text typed at the prompt
or piped from another command.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接