Всем здрасьте! Поставили передомной такую задачу, нужно разработать код который должен уметь распозновать запущенные приложения и жестко их прибивать. Пытаюсь выстроить алгоритм, но загвоздка в том, что непонимаю каким образом идентифицировать приложение. Понятно что можно производить идентификацию по хэшу исполняемого(-их) файла(-ов), но опять же бинарники могут обновляться - значит это не решение. Народ, посдажите мне темному человеку, в какую сторону рыть, как идентифицировать приложение? Может быть кто-то сталкивался с подобной ситуацией, за помощь буду ОЧЕНЬ ПРИЗНАТЕЛЕН(!) за любую инфу по теме...
Clear__Energy, Могут, но! Как отследить что именно этот бинарник был изменен, а если приложение было обнавлено и бинарник переименован, если был подставлен другой бинарник с аналогичным именем..? В чем и загвоздка, я тоже думал попростому решить эту задачку, но не так все просто(
ну, подробностей вы не уточняли =) вы бы описали ситуацию и назначение вообщем, может, найдутся другие методы.
Задача: Запретить запуск/выполнение определенных программ. Компоненты программы: 1. Тулза при помощи котрой можно "обучать" ProcessTerminator тому, что он должен прибивать. (?) Непонятно к чему привязываться (бинарнику, локейшену, данным реестра или ко всему сразу). 2. Сам ProcessTerminator, который должен по какой-то логике идентифицировать приложение и прибивать его. 3. Демон, контролирующий создание/изменение/удаление приложений и файлов. (?) Как корректно отследить изменения в приложений/исполняемых файлов. (?) Как корректно исключить возможность "обмана" юзером этой ф-ции.
Есть список с названиями приложений и бинарников, при первом их запуске ProcessTerminator должен (по моей логике) на них настроиться и в дальнейшем прибивать. Соответственно имя, путь, размер, хэш ... - можно получить после первого запуска.
ATX Ну если у пользователя есть возможность изменить содержимое бинаря, испортив тебе малину с хешами, то к чему ты еще можешь привязаться? Путь, имя, размер - тоже всё выходит величины непостоянные. Можно например хешировать поблочно, например отдельно хидер, отдельно каждую секцию, или менее укрупненно (пропуская при этом разные паддинги, versioninfo, ресурсы и прочие данные, которые можно изменить, не нарушив работоспособность). Т.е. тут выходит что ты с очень хорошей вероятностью можешь сказать что это тот же файл, даже если чексум всего файла тебе подсунут другой. Что тут еще придумать - хз, разве может еще написать эмулятор и смотреть на продукты жизнедеятельности )))) но думаю это ужо выходит за рамки твоей задачи)
Привязывайся к иконкам и импорту. Знаю, звучит смешно, но ведь работает! Тебе ж не будут каждый раз присылать на 100% измененный софт. Наверняка иконки, ресурсы - все это останется прежним. Как вариант - может в 10 произвольных местах секции кода найти 10 сигнатур по 10-30 байт каждая. Если в файле совпали хотя бы 4/10, то это определенно нужный тебе файл.
Самое простое напрашивается. Гуглить на тему "Image File Execution Options" "ntsd -d". Второе. Заюзать какой-нибудь эвристический антивирьный движок с возможностью создания правил.
делать фильтр фс и фильтрацию запускаемых приложений(PsSetCreateProcessNotifyRoutine например) в фс фильтре - в какой то базе хранить связку: хеш(это избавит от проблем с различными путями, именами, попытками создания копии и тп), количество копий файла(при добавлении 1), какие-то идентификаторы(например первоначальное имя файла, что-то еще что нужно чтобы объяснить пользователю в чем именно он не прав) - при модификации файла с хешем из базы, если это разрешено - пересчитать хеш (добавить новую запись, для записи со старым хешем количество копий -=1) - при удалении - количество копий в базе-=1( ?(==0) - удалить запись) при фильтрации приложений - при запуске - проверить хеш связанного с процессом файлового объекта по базе - сделать что нужно ?
ohne, Здравая логика, все верно! Остается още один необработанный и черезвучайно важный момент - ситуация с фальсификацией файла. Например: у юзера есть некоторое приложение в виде бинарника, имя, хэш ... которого мы храним в базе. Допустим юзер решил если не решить проблему с блокированием приложения, то по крайней мере испортить жизнь админу, для того от берет какой-нить нужный (тот же exсel.exe) файл и переименовывает его в файл подлежащий блокировке. Какова будет логика в этом случае, добавлять ли хэш этого бинарника в базу на основании аналогичного имени!?
нет новый объект в базу может добавить только администратор новая запись добавлена автоматически может быть только если файл, описатель которого уже был в базе был, изменен ну и вобще я сразу написал что не привязываюсь к имени и пути - объект однозначно описывает только содержимое(либо хеш от содержимого для уменьшения размера базы, как в данном случае) в любом случае решения в общем виде нет для списка запрещенных приложений - только разве что запретить создание новых файлов, но вам наверное не подойдет =), а поэтому лучше не тратить время зря). лучше привязываться к полному пути, имени и хешу от содержимого файла одновременно и сделать список не запрещенного к запуску софта, а разрешенного(тогда и фильтр фс отпадает), но это тоже конечно может не устроить по тз, но работать должно без проблем. а что это такое вобще? родительский контроль?
если есть конкретное тз - то лучше сделать по нему ) там если и не учли что-то, то это не ваша проблема а если в ваши обязанности входит и разботка тз - то лучше это кому-то другому передать)
В качестве "чёрной метки" можно использовать все текстовые строки длиннее, скажем, 16 байт. Особое внимание обращать на строчки со значками "Цопыригхт", "ТМ", "(R)" и т.п.
Четкого ТЗ нету, только постановка задачи. Белый список рабочих приложений невозможен, также присутствие администратора тоже, софтинка должна настраиваться на изменения файлов сама. Конечно стандартного и наверное 100% решения тут нету. Но впролне подойдет вариант некоторой комбинированной технологии. Главная сложность в том, что алгоритм должен учитывать возможность подмены файла, чтобы ввести аппу в заблуждение. Оригинальное решение предложил MSoft, мой респект! Как мне представлется, логичным будет двигаться в этом направлении. Вопрос остается открытым, к каким же ресурсам имеет смысол привязываться: - Иконки (может быть) - Диалоги (точно нет) - Библиотеки импорта/экспорта (тоже нет) а к чему еще...? P.S. Решение делается для организации, дабы решить вопрос с учетом рабочего времени (это вам не это и пофиксить всякий дрянной софт. А отказаться от работы можно всегда, но разве ВАМ не интересно решение подобной задачи!?!?
точнее, к алгоритму обращения левая прога врядли будет орудовать с ними. а если и будет, то иначе, чем оригинальный софт