RamMerLabs
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Victor_VG, KLASS Эх, ну что ж Вы, передовые мейнтейнеры всея суперхакерского ПО, даже не посмотрели в не самый сложный код так активно обсуждаемого коммита? Дело в том, как PH определяет эти самые "Default Services": - добавили фильтр для TreeView: >>MicrosoftFilterEntry = PhAddTreeNewFilter(PhGetFilterSupportServiceTreeList(), PhMwpMicrosoftServiceTreeFilter, NULL); - в коллбеке фильтра ( PhMwpMicrosoftServiceTreeFilter ) уже достаточно понятно написано, что проверка идёт по имени подписавшей исполняемый модуль стороны (*): >>static PH_STRINGREF microsoftSignerNameSr = PH_STRINGREF_INIT(L"Microsoft Windows"); >>if (!PhIsNullOrEmptyString(serviceNode->ServiceItem->VerifySignerName)) { >>if (PhEqualStringRef(&serviceNode->ServiceItem->VerifySignerName->sr, µsoftSignerNameSr, TRUE)) { ... Откуда берётся VerifySignerName см. в srvprv.c Логика проста: файл найден? файл подписан? подпись обозвана (*) "Microsoft Windows"? Отрицательный ответ на любой их вопросов - фильтр не срабатывает. Вот только вся загвоздка в определении этого исполняемого модуля. Если коротко, служба может быть запущена как самостоятельный процесс или внутри разделяемого же процесса (контейнер, только не для процессов, а служб). Если процесс общий - смотрим то, что PH называет "Service DLL" в свойствах службы - это и есть исполняемый модуль. Путь и имя файла к такому модулю берётся из одноимённой записи о службе в реестре Windows. Для службы EventLog процесс разделяемый, но имя исполняемого модуля в некоторых версиях Windows PH получить не может, т.к. в реестре немного отличается путь к значению ServiceDll - если для остальных служб он лежит в "подключе" HKLM\SYSTEM\CurrentControlSet\Services\<ИМЯ_СЛУЖБЫ>\Parameters\ , то в EventLog - на уровень выше (т.е. сразу в ключе HKLM\SYSTEM\CurrentControlSet\Services\EventLog) или отсутствует вовсе. И, как Вы уже догадались, условие в теле фильтра TreeView в PH оборачивается неудачей - сравнивать не с чем. Кроме того, для некоторых служб в некоторых версиях Windows имя подписавшей стороны (*) может отличаться от "Microsoft Windows", абсолютно несмотря на то, что они входят в дистрибутив Windows. Соответственно, фильтр тоже их пропустит. (*) - на самом деле в PH проверяется так называемый аттрибут OPUS (OID 1.3.6.1.4.1.311.2.1.12), точнее его опциональная запись programName. В ASN.1 это выглядит так: SpcSpOpusInfo ::= SEQUENCE { programName [0] EXPLICIT SpcString OPTIONAL, moreInfo [1] EXPLICIT SpcLink OPTIONAL } | Всего записей: 94 | Зарегистр. 24-02-2007 | Отправлено: 20:18 05-04-2021 | Исправлено: RamMerLabs, 20:32 05-04-2021 |
|