Windows黑客编程之服务加载器
时间:2023-02-28 17:04 来源:网络整理 作者:默认发布 点击:次
实现一个服务加载器,将exe文件加载为服务运行 前期知识windows字符串处理 Windows中有一个Shlwapi.dll文件,包含了大量的Windows字符串处理方法 第一类是字符串处理函数,通常以Str开头,第二类是路径或者文件夹处理函数,通常以Path开头,第三类是注册表处理函数,通常以SH开头 静态库、动态库和导入库的使用 代码 外壳分别调用启动、停止、卸载、删除服务的函数 #include "stdafx.h" #include "ServiceOperate.h" int _tmain(int argc, _TCHAR* argv[]) { BOOL bRet = FALSE; char szExePath[] = "E:\\Project\\Cpp\\BlackHat\\CreateServiceAsUser\\x64\\Release\\CreateServiceAsUser.exe"; bRet = SystemServiceOperate(szExePath, 0); if (bRet) { printf("INSTALL OK.\n"); } else { printf("INSTALL ERROR.\n"); } // 启动服务 bRet = SystemServiceOperate(szExePath, 1); if (bRet) { printf("START OK.\n"); } else { printf("START ERROR.\n"); } system("pause"); // 停止服务 bRet = SystemServiceOperate(szExePath, 2); if (bRet) { printf("STOP OK.\n"); } else { printf("STOP ERROR.\n"); } // 卸载服务 bRet = SystemServiceOperate(szExePath, 3); if (bRet) { printf("UNINSTALL OK.\n"); } else { printf("UNINSTALL ERROR.\n"); } return 0; } 函数的实现首先打开SCM管理器 通过SCM管理器调用CreateService、StartService、ControlService等函数,创建服务并控制服务状态 #include "stdafx.h" #include "ServiceOperate.h" void ShowError(char* lpszText) { char szErr[MAX_PATH] = { 0 }; wsprintf(szErr, "%s Error!\nError Code Is: ", lpszText, ::GetLastError()); ::MessageBox(NULL, szErr, "ERROR", MB_OK | MB_ICONERROR); } BOOL SystemServiceOperate(char* Path, int Op) { BOOL bRet = TRUE; char szName[MAX_PATH] = { 0 }; ::lstrcpy(szName, Path); ::PathStripPath(szName); SC_HANDLE shOSCM = NULL, shCS = NULL; SERVICE_STATUS ss; DWORD dwErrorCode = 0; BOOL bSuccess = FALSE; shOSCM = ::OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); if (!shOSCM) { ShowError("OpenSCManager"); return FALSE; } if (0 != Op) { shCS = OpenService(shOSCM, szName, SERVICE_ALL_ACCESS); if (!shCS) { ShowError("OpenService"); ::CloseServiceHandle(shOSCM); shOSCM = NULL; return FALSE; } } switch (Op) { case 0: { shCS = ::CreateService(shOSCM, szName, szName, SERVICE_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS | SERVICE_INTERACTIVE_PROCESS, SERVICE_AUTO_START, SERVICE_ERROR_NORMAL, Path, NULL, NULL, NULL, NULL, NULL); if (!shCS) { ShowError("CreateService"); bRet = FALSE; } break; } case 1: { if (!::StartService(shCS, 0, NULL)) { ShowError("StartService"); bRet = FALSE; } break; } case 2: { if (!::ControlService(shCS, SERVICE_CONTROL_STOP, &ss)) { ShowError("ControlService"); bRet = FALSE; } break; } case 3: { if (!::DeleteService(shCS)) { ShowError("DeleteService"); bRet = FALSE; } } default: break; } if (shCS) { ::CloseServiceHandle(shCS); shCS = NULL; } if (shOSCM) { ::CloseServiceHandle(shOSCM); shOSCM = NULL; } return bRet; } 遇到的问题"const char *“ 类型的实参与 “char *” 类型的形参不兼容" 在VS2019中依次点击项目->属性->C/C+±>语言->符合模式,将原来的“是”改为“否”即可 原文地址:https://www.cnblogs.com/z5onk0/p/17153265.html (责任编辑:admin) |