C++ Скрыть программу от диспетчера
В данной статье рассмотрим небольшой код о том как можно скрыть программу от диспетчера задач. Мы будем использовать функции WinAPI, подгружая библиотеку KERNEL32. Основная суть в том, что мы будем выдавать наш процесс за сервис, используя функцию RegisterServiceProcess. Итак создаем консольное приложение:
#include <iostream.h> #include <windows.h> BOOL (WINAPI *RegisterServiceProcess)(DWORD dwProcessId,DWORD dwType); int main(){ HINSTANCE hKernel; int i=1; //Пытаемся получить идентификатор загруженной библиотеки hKernel=LoadLibrary("KERNEL32.DLL"); if(hKernel){ //Идентификатор загруженной библиотеки был успешно получен cout<<"Success load library kernel32.dll"<< endl; RegisterServiceProcess=(int(__stdcall*)(DWORD,DWORD)) GetProcAddress(hKernel,"RegisterServiceProcess"); if(RegisterServiceProcess){ //Указатель на функцию RegisterServiceProcess был //успешно получен. cout<<"Success to have address of the specified exported dynamic-link library (DLL) function"<< endl; if(RegisterServiceProcess(GetCurrentProcessId(),i)) cout<<"Success registers the process as a service process"<< endl; //Процесс был успешно зарегестрирован как сервис }else{ //Указатель на функцию RegisterServiceProcess не //был успешно получен. cout<<"Failed to have address of the specified exported dynamic-link library (DLL) function"<< endl; cin>>i; return 0; } }else{ //Идентификатор загруженной библиотеки не был получен cout<<"Failed load library kernel32.dll"<< endl; cin>>i; return 0; } cout<<"Registers the process as a service process:1"<< endl; cout<<"Unregisters the process as a service process:0"<< endl; cin>>i; if (RegisterServiceProcess(GetCurrentProcessId(),i)){ cout<<"Success"<< endl; }else{ cout<<"Failed"<< endl; } cin>>i; return 0; }} |
Чтобы в процессе сборки не было недоразумений проверьте на вкладке Link поле Object libraries/modules, оно должно быть пустым.
Понравилась статья? Жми: | Поделиться в соц. сетях |