PDA

Просмотр полной версии : AppToService


Ch3ck
14.01.2007, 20:30
Кто-то спрашивал как сделать, чтобы консольное окно программы не мозолило глаза...
Сегодня поднял старую подшивку Хакера и нарвался на это(отрывок):
В тексте статьи остался один нераскрытый вопрос: как замаскировать BNC и windrop в чужой Windows-системе? Понятно, что оставлять консольное окошко с работающим приложением нельзя, так как его сразу заметит пользователь. Самый простой выход из этой ситуации — запустить приложение как сервис, тем самым мы убьем сразу двух зайцев. Во-первых, приложение легко затеряется среди многочисленных служб винды, в которых обычный пользователь никогда не станет копаться. А во-вторых, с умом обеспечим автоматический запуск проги во время запуска системы, на случай, если компьютер будет перезагружен или выключен. Единственная проблема заключается в том, что по умолчанию возможности запуска ircproxy и windrop как сервиса нет, поэтому нам придется прибегнуть к помощи сторонних приложений. Я рекомендую использовать консольную утилиту AppToService (www.basta.com/ProdAppToService.htm). Отмечу, что ее последние версии стали платными, поэтому лучше будет не мучиться с регистрацией и скачать вариант постарее (www.3dnews.ru/documents/1143/AppToService.zip). Если запустить программу без каких-либо ключей, AppToService выдаст краткую справку, которой вполне достаточно, чтобы составить команду для запуска нашего приложения. Вот пример:
C:\IRCPROXY>apptoservice /Install "IRCPROXY.EXE" /AbsName:"System service" /Startup :A
P.S Если честно, до этого сам не знал, как такое реализовывается...

Deem3n®
14.01.2007, 21:02
Программная реализация:#include <iostream>
#include <windows.h>
#include <winsvc.h>

main()
{
SC_HANDLE MdaService, SCManager;

SCManager = OpenSCManager(0, 0, SC_MANAGER_CREATE_SERVICE);
if(!SCManager)
{
std::cout << "Error" << std::endl;
return 1;
}

//////////////////////////////////////////////////
// запуск (установка) обычной программы как сервис
//////////////////////////////////////////////////
MdaService = CreateService(
SCManager,
"MdaServiceInternalName",
"Mda Service External Name",
SERVICE_ALL_ACCESS,
SERVICE_WIN32_OWN_PROCESS,
SERVICE_DEMAND_START,
SERVICE_ERROR_NORMAL,
"C:\\MdaService.exe",
0,0,0,0,0);

if(!MdaService)
{
CloseServiceHandle(SCManager);
std::cout << "Error" << std::endl;
return 1;
}

//////////////////////////////////////////////////
// ну а это - удаление сервиса (если понадобится)
//////////////////////////////////////////////////
/*
MdaService = OpenService(
SCManager,
"MdaServiceInternalName",
DELETE);


if(!MdaService)
{
CloseServiceHandle(SCManager);
std::cout << "Error" << std::endl;
return 1;
}

if (!DeleteService(MdaService))
{
CloseServiceHandle(SCManager);
std::cout << "Error" << std::endl;
return 1;
}
*/

CloseServiceHandle(MdaService);
CloseServiceHandle(SCManager);

return 0;
}