Как программа может быть определена как запущенная? - PullRequest
1 голос
/ 19 июня 2009

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

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

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

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

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

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

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

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

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

Ответы [ 5 ]

2 голосов
/ 19 июня 2009

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

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

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

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

2 голосов
/ 19 июня 2009

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

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

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

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

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

0 голосов
/ 10 апреля 2010

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

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

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

0 голосов
/ 19 июня 2009

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

0 голосов
/ 19 июня 2009

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

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