Как узнать все возможные параметры запуска EXE-файла?

Системный администратор IT и автоматизация бизнеса
← На главную

Часто при автоматизации задач или интеграции стороннего программного обеспечения мы сталкиваемся с ситуацией, когда исполняемый файл (EXE) поддерживает работу через командную строку, но список доступных ключей (параметров) нигде не задокументирован. Связаться с разработчиком не всегда возможно, а стандартные методы не дают результата. В этой статье мы подробно разберем, как «вытянуть» информацию о параметрах запуска из любого приложения, используя методы от простого к сложному.

1. Проверка стандартных ключей вызова справки

Прежде чем приступать к глубокому анализу, проанализируем стандартные возможности самой программы. Большинство разработчиков закладывают базовые флаги для вывода справочной информации. Попробуем запустить файл в консоли cmd.exe со следующими аргументами:

Если программа корректно написана, она может вывести окно со списком команд или отобразить их прямо в консоли. Однако, если приложение графическое (GUI), оно может проигнорировать эти команды или закрыться без вывода текста. В таком случае переходим к следующим шагам.

2. Использование инструментов поиска текстовых строк (Strings)

Внутри любого бинарного файла содержатся текстовые данные: названия функций, сообщения об ошибках и, что самое важное для нас, строки, с которыми программа сравнивает введенные параметры. Рассмотрим использование утилиты Strings из пакета Sysinternals.

Эта утилита сканирует файл и выводит все последовательности символов. Чтобы не листать тысячи строк, воспользуемся фильтрацией. В командной строке выполним команду:


strings.exe -n 3 app.exe | findstr /i /c:"/"
strings.exe -n 3 app.exe | findstr /i /c:"-"

Здесь мы ищем строки длиной не менее 3 символов, которые начинаются со слеша или дефиса. Часто параметры группируются в одном месте кода, поэтому, найдя один известный ключ (например, /verbose), посмотрите на строки рядом с ним — скорее всего, там будут и остальные.

3. Анализ запущенного процесса

Иногда нам нужно узнать не все теоретически возможные ключи, а те, с которыми программа работает в данный момент (например, если она запущена каким-то системным сервисом). Разберем способ мониторинга через Process Explorer или WMIC.

В Process Explorer найдите интересующий процесс, нажмите правой кнопкой мыши и выберите Properties. В поле Command Line будет отображена полная строка запуска. Аналогично это можно сделать через системную консоль Windows:

wmic path win32_process get Commandline,Caption

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

4. Декомпиляция для управляемого кода (.NET и Java)

Если приложение написано на современных языках, таких как C# или VB.NET, нам очень повезло. Такие программы легко превращаются обратно в исходный код. Проанализируем ситуацию с помощью dnSpy или ILSpy.

  1. Откройте EXE-файл в dnSpy.
  2. Найдите точку входа в программу — обычно это метод Main.
  3. Ищите обработку массива args[] или вызовы Environment.GetCommandLineArgs().

В коде вы увидите конструкцию типа switch или набор if...else, где программа поочередно проверяет каждый аргумент. Это даст вам 100% точный список всех ключей и понимание того, за что каждый из них отвечает.

5. Поиск в ресурсах приложения

Некоторые программы хранят справочную информацию в своих ресурсах (String Table). Воспользуемся утилитой Resource Hacker. Откройте файл и перейдите в раздел String Table. Часто там хранятся тексты диалоговых окон, в том числе и тех, которые выводятся при ошибке синтаксиса командной строки. Там можно обнаружить скрытые ключи, такие как /S (тихая установка) или /LOG.

6. Динамический анализ и перехват API

Программы получают аргументы командной строки, обращаясь к функциям операционной системы Windows API. Выясним причину поведения программы, отследив вызовы функций GetCommandLineA и GetCommandLineW. С помощью инструмента API Monitor можно запустить приложение и посмотреть, какие данные оно запрашивает у системы сразу после старта.

Также стоит обратить внимание на Process Monitor (ProcMon). Если программа при запуске с определенным ключом начинает искать файл config.xml или проверять ветку реестра, это может натолкнуть на мысли о предназначении этого параметра.

7. Глубокий реверс-инжиниринг (IDA Pro и x64dbg)

Если ни один из методов не помог, остается «тяжелая артиллерия» — дизассемблирование. Разберем по шагам логику работы в отладчике:

Загрузите файл в x64dbg. Установите точку останова (breakpoint) на системный вызов получения командной строки. После этого пошагово выполняйте код (клавиша F8). Вы увидите, как программа берет строку, которую вы ввели при запуске, и начинает сравнивать её с константами в своей памяти. Например, инструкция REPE CMPSB или вызовы strcmp будут последовательно сравнивать ваш ввод со списком допустимых команд. Эти константы и есть те самые искомые параметры.

Заключение

Поиск параметров запуска — это всегда небольшое исследование. Рассмотрим краткий чек-лист для эффективной работы:

  1. Начните с /? и Strings — это дает результат в 70% случаев.
  2. Если программа от Microsoft или крупного вендора, используйте Process Monitor.
  3. Для .NET приложений всегда используйте dnSpy.
  4. Для сложных нативных приложений (C++/Delphi) используйте IDA Pro или x64dbg.

Помните, что некоторые параметры могут быть «скрытыми» и предназначаться только для отладки разработчиками, поэтому при их использовании стоит соблюдать осторожность, особенно если они касаются удаления данных или изменения системных настроек.

← На главную