Приветствую всех,братья по разуму Вообщем задача такова: пропатчить файл одной из служб NT/2000 таким образом, чтобы при запуске этого сервиса (службы), он в свою очередь создавал/запускал мой сервис. Короче говоря, с пропатчиванием проблем нет но вот при создании/запуске начинается нечто интересное: OpenSCManager - все нормально СreateService - уходит в затуп навсегда. Исходный сервис, который пропатчен, соответственно, - отваливается по таймауту, в логах: "Таймаут (30000 мс) ожидания для подключения службы" Если же, "создать" свой сервис "вручную" тогда: OpenSCManager - OK OpenService - OK StartService - тот же самый затуп. Но самое веселое в том, что если точно также патчить не сервис а просто EXEшник (например calc.exe ) - то и первая и вторя схемы работают нормально. Какие варианты господа?
первое: The ServiceMain function should immediately call the RegisterServiceCtrlHandlerEx function to specify a HandlerEx function to handle control requests. Next, it should call the SetServiceStatus function to send status information to the service control manager. After these calls, the function should complete the initialization of the service. Do not attempt to start another service in the ServiceMain function второе: The SCM locks the service control database during initialization, so if a service attempts to call StartService during initialization, the call will block. When the service reports to the SCM that it has successfully started, it can call StartService. If the service requires another service to be running, the service should set the required dependencies. вывод: самое простое - оригинальный сервис ставишь в ручной запуск, свой ставишь в автомат и прописываешь в _своем_ зависимость от оригинального. Либо как вариант попробовать оригинальному поставить зависимость от тебя. В первом случае ты стартанешь непосредственно перед жертвой, во втором сразу после. Неизвестна дальнейшая цель, поэтому трудно посоветовать что-либо конкретное.
я тут нарыл кое чего еще: первое: - патчим файл так, чтобы запуск производился ПОСЛЕ всего этого. - ServiceMain вызавается несколько раз. При вызове CreateService/StartService в следующий раз ПОСЛЕ инициализации исходного сервиса - все работает нормально. второе: - все просто: проверяем QueryServiceLockStatus, если база не заблокирована запускаем наш сервис. Все работает нормально. Но, при попытке запустить сервис из WINLOGON, или LSASS - исходный сервис умирает (уходит в затуп или как красиво сказано the call will block) еще при OpenSCManager ?? - это не вирус. Скорее наоборот. Это что-то типа IDS, короче монитор, который должен вести наблюдение оставаясь незамеченным => вариант с зависимостями отпадает. - checksum под контролем - да и не в этом дело, ведь сарвис все-таки запускается.
ну дык прицепись к любому сервису - тому-же winlogon, в смысле поставь его себе в зависимость - будешь стартовать перед ним. Создашь event и поыиснешь на нем. А в жертву внедри код, который просто сигналить event будет ну и там адреса нужные передавать и отваливать. А ты по event-у захучишь то что тебе там надо. Ну и пошлешь обратно event что типа жертву можно отпустить на выполнение. Все красиво и штатно будет.