Как можно определить, что программа запущена?

StackOverflow https://stackoverflow.com/questions/1016031

  •  06-07-2019
  •  | 
  •  

Вопрос

Я написал программу, которая является своего рода неофициальным автономным плагином для приложения.Это позволяет клиентам получить услугу, которая является более дешевой альтернативой, чем услуга, принадлежащая поставщику.Моя программа не является незаконной, запрещенной к каким-либо разрешениям, и уж точно не является вирусом, рекламным ПО или чем-то подобным.При этом поставщик, конечно, не в восторге от того, что я участвую в его конкурсе, и пытается заблокировать запуск моего приложения.

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

Сначала он проверил, запущена ли моя программа, найдя открытое окно с правильным заголовком.Я противодействовал этому, произвольно меняя название программы при запуске.

Затем он поискал имя запущенного процесса.Я противодействовал этому, заставляя приложение копировать само себя при запуске как [случайная строка].exe, а затем запуская это.

В любом случае, мой вопрос заключается в следующем:что еще он может сделать, чтобы определить, запущена ли моя программа?Я знаю, что вы можете читать текст окна (т.е. строку состояния, ярлыки).Я готов противостоять этому, заменив метки изображениями (тьфу, любым другим способом?).

Но что там еще есть?Можете ли вы определить , что именно .библиотеки DLL, загруженные программой?Если да, то можно ли решить эту проблему путем рандомизации имен dll перед их загрузкой?

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

Даже при том, что это довольно дерьмово с его стороны, это в некотором роде весело.Это похоже на занудный кулачный бой.

Редактировать: Когда я сказал, что это плагин, это просто (неправильный) термин, который я использовал.Это автономный исполняемый файл."API" между моей программой и другой моей - это простой ввод данных в элементы управления (например, текстовые поля и т.д.).

Это было полезно?

Решение

Я чувствую себя немного не в своей тарелке, отвечая на этот вопрос, но уже поздно, и я жду завершения копирования с диска, поэтому....

Он мог бы использовать контрольную сумму для идентификации вашего исполняемого файла / dll.Это позволяет обойти хитрости с переименованием.

Вы можете обойти это, случайным образом изменяя биты в программе при запуске (например, меняя ресурс, играя со встроенной версией и т.д.).

Если бы я был на его месте, я бы тоже начал искать закономерности сетевого трафика;например, если вы направляете клиентов к конкурентам, вы ищете эту информацию откуда-то, поэтому остановите процесс и / или выгрузите библиотеку, если плагин обращается к сайту, который находится в черном списке.

Если вы зайдете в игру в кошки-мышки достаточно далеко (например, воспользуетесь перехватом оболочки для повторного создания вашего исполняемого файла / библиотеки, если он будет удален), антивирусное программное обеспечение, вероятно, пометит вас как вирус.

Другие советы

Не очень спортивно со стороны вашего конкурента.

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

Затем скомпилируйте код на клиентском компьютере, используя CSharpCodeProvider для компиляции вашего кода.Вы можете генерировать случайные сборки с абсолютно случайными сигнатурами функций (я предлагаю использовать большой словарь реальных, распространенных слов вместо того, чтобы быть полностью случайными.Вы можете объединить их вместе для большего удовольствия.например ,Живой, Виртуальный, Космический, Офисный, Сетевой, Коммунальный.Space.Live.Network.dll , Полезность.Virtual.Live.dll ).

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

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

  • Является ли ваша программа EXE-файлом или библиотекой DLL?
  • Вы называете это плагином:к чему подключается?
  • Как запускается ваша программа?
  • Что делает ваша программа для "подключения"?
  • Каков API-интерфейс между вашей программой и другой программой?

Это не ответ на ваш последний вопрос, а скорее на описанную проблему.

Как насчет исправления другого приложения?Найдите строку, которую он ищет, в заголовках и измените в ней какую-нибудь букву.

Сообщите своим клиентам, в чем заключается проблема, предоставив им исправление для другого приложения, а не для вашего собственного.

@ryeguy ...Лучшая защита - это хорошее нападение, имхо.Сделайте все возможное, чтобы отключить его процесс до того, как он отключит ваш.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top