Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 网络安全 > 黑客技术 > 一个操作本地或者远程主机服务的小程序
【标  题】:一个操作本地或者远程主机服务的小程序
【关键字】:操作,程序,远程,服务
【来  源】:网络

一个操作本地或者远程主机服务的小程序

Your Ad Here /////////////////////////////////////////////////////////////////
//
// Enum Service
//
// File : EnumService.cpp
//
//
// Create by : refdom
// Email : refdom@263.net
// Home Page : www.opengram.com
//
// If you modify the code, or add more functions, please email me a copy.
//
/////////////////////////////////////////////////////////////////
#include "ConnectServer.h"
#include
#include
#include
#include

#pragma comment(lib, "Advapi32.lib")
#pragma comment(lib, "Mpr.lib")

DWORD g_dwManagerAccess = SC_MANAGER_ALL_ACCESS;
DWORD g_dwServiceAccess = SERVICE_ALL_ACCESS;

void ListServices (SC_HANDLE, DWORD);
void MyStartService (SC_HANDLE, LPSTR);
void MyStopService (SC_HANDLE, LPSTR);
void MyViewService (SC_HANDLE, LPSTR);
void Usage(char*);

int main(int argc, char* argv[])
{
int nRetCode = 0;
char szIpc[50] = "";
DWORD dwServiceType;
SC_HANDLE schSCManager;
LPSTR lpUserName, lpPassword, lpServiceName;
NETRESOURCE NET;

if (argc < 2)
{
Usage(argv[0]);
return 0;
}

if (argv[1][0] == "/" && strlen(argv[1]) == 2)
{
switch (tolower(argv[1][1]))
{
case "l":
dwServiceType = SERVICE_WIN32 | SERVICE_DRIVER;
break;
case "d":
dwServiceType = SERVICE_DRIVER;
break;
case "w":
dwServiceType = SERVICE_WIN32;
break;
case "k":
dwServiceType = SERVICE_KERNEL_DRIVER;
break;
case "f":
dwServiceType = SERVICE_FILE_SYSTEM_DRIVER;
break;
case "o":
dwServiceType = SERVICE_WIN32_OWN_PROCESS;
break;
case "h":
dwServiceType = SERVICE_WIN32_SHARE_PROCESS;
break;
case "r":
dwServiceType = -1;
break;
case "s":
case "p":
case "v":
if (argc < 6 && (argc != 3))
{
printf ("Error! Input a service name!\n");
return 0;
}
else if (argc >6)
{
printf ("Error! A wrong service name!\n");
return 0;
}
break;
case "?":
Usage(argv[0]);
return 0;
default:
printf ("Error: Unknow option!\n");
return 0;;
}
}
else
{
printf ("Error: Unknow option!\n");
return 0;
}

//get service name
if (argc == 6)
{
lpServiceName = argv[5];
}
else if (argc == 3)
{
// if ((argv[2][0] != "\\") && (argv[2][1] != "\\"))
// {
if (argv[1][0] == "/" && strlen(argv[1]) == 2)
{
switch (tolower(argv[1][1]))
{
case "l":
case "d":
case "w":
case "k":
case "f":
case "o":
case "h":
case "r":
printf ("Error arguments!\n");
return 0;
default:
lpServiceName = argv[2];
break;
}
}
// lpServiceName = argv[2];
// }
}

if (argc > 3)
{
/* if ((argv[2][0] != "\\") && (argv[2][1] != "\\"))
{
schSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
}
else
{
if (argc == 3)
{
lpUserName = "";
lpPassword = "";
//change access
g_dwManagerAccess = SC_MANAGER_CONNECT;
g_dwServiceAccess = GENERIC_READ;
sprintf (szIpc, "%s", argv[2]);
}
else
{
*/
lpUserName = argv[3];
lpPassword = argv[4];
sprintf (szIpc, "%s\\ipc$", argv[2]);
// }

NET.lpLocalName = NULL;
NET.lpRemoteName = szIpc;
NET.dwType = RESOURCETYPE_ANY;
NET.lpProvider = NULL;

printf ("Connecting %s...",argv[2]);

nRetCode = MyConnectServer(&NET, lpPassword, lpUserName, CONNECT_INTERACTIVE, szIpc);
if (!nRetCode)
printf ("Successfully!\n");
else
{
printf ("Failed!\n");
}
schSCManager = OpenSCManager(argv[2], NULL, SC_MANAGER_ALL_ACCESS);
// }
}
else
{
schSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
}

if (schSCManager == NULL)
{
printf ("%d\n", argc);
printf ("%d\n", GetLastError());
printf ("Open SCManager failed!\n");
return 0;
}

//
switch (tolower(argv[1][1]))
{
case "l":
case "d":
case "w":
case "k":
case "f":
case "o":
case "h":
case "r":
ListServices(schSCManager, dwServiceType);
break;
case "s":
MyStartService(schSCManager, lpServiceName);
break;
case "p":
MyStopService(schSCManager, lpServiceName);
break;
case "v":
MyViewService(schSCManager, lpServiceName);
break;
}

CloseServiceHandle(schSCManager);

if (argc >3 )
{
//close the session with remote server
printf ("\nDisconnecting server...");
nRetCode = MyDisConnectServer(szIpc, CONNECT_UPDATE_PROFILE, TRUE);
if (!nRetCode)
printf ("Successfully!\n");
else
printf ("Failed!\n");
}

return 0;
}

void ListServices(SC_HANDLE schSCManager, DWORD ServiceType)
{
//list services
LPENUM_SERVICE_STATUS_PROCESS lpServices;
DWORD n;
DWORD nSize = 0;
DWORD nServicesReturned;
DWORD nResumeHandle;
DWORD dwServiceType;
nResumeHandle = 0;
dwServiceType = ServiceType;
if (ServiceType == -1)
{
dwServiceType = SERVICE_WIN32;
}

lpServices = (LPENUM_SERVICE_STATUS_PROCESS) LocalAlloc(LPTR, 30720);

if (EnumServicesStatusEx(schSCManager, SC_ENUM_PROCESS_INFO,
dwServiceType, SERVICE_STATE_ALL,
(LPBYTE)lpServices, 30720,
&nSize, &nServicesReturned,
&nResumeHandle, NULL) == NULL)
{
printf ("Enum Error!%d\n",GetLastError());
return;
}
else
{
printf ("Listing service...\n\n");
}

printf ("------------------------------------------------------\n");
printf ("PID \t ServiceName {Service Display Name} \n");
printf ("------------------------------------------------------\n");
for (n = 0; n < nServicesReturned; n++)
{
if (!(ServiceType == -1
&& lpServices[n].ServiceStatusProcess.dwCurrentState != SERVICE_RUNNING))
{
//Show the name of service
printf ("pid:%d.",lpServices[n].ServiceStatusProcess.dwProcessId);
if (lpServices[n].ServiceStatusProcess.dwProcessId == 0 )
{
printf ("\t");
}
printf ("%s\t{%s}", lpServices[n].lpServiceName, lpServices[n].lpDisplayName);
// printf ("\t");
//Show the status of service
switch (lpServices[n].ServiceStatusProcess.dwCurrentState)
{
case SERVICE_STOPPED:
printf ("");
break;
case SERVICE_START_PENDING:
printf ("");
break;
case SERVICE_STOP_PENDING:
printf ("");
break;
case SERVICE_RUNNING:
printf ("");
break;
case SERVICE_CONTINUE_PENDING:
printf ("");
break;
case SERVICE_PAUSE_PENDING:
printf ("");
break;
case SERVICE_PAUSED:
printf ("");
break;
}
printf ("\n");
}
}
return;
}

void MyStartService(SC_HANDLE schSCManager, LPSTR lpServiceName)
{
SC_HANDLE schService;
DWORD dwWaitTime;
DWORD dwOldCheckPoint = 0;
DWORD dwStartTickCount;
SERVICE_STATUS ssStatus;
LPQUERY_SERVICE_CONFIG lpConfig;
DWORD dwSize;

schService = OpenService(schSCManager, lpServiceName, SERVICE_ALL_ACCESS);
if (schService == NULL)
{
printf ("Open service failed!\n");
return;
}

if (!QueryServiceStatus(schService, &ssStatus))
{
CloseServiceHandle(schService);
printf ("Query service status failed!\n");
return;
}
if (ssStatus.dwCurrentState == SERVICE_RUNNING
|| ssStatus.dwCurrentState == SERVICE_START_PENDING)
{
CloseServiceHandle(schService);
printf ("The service is running or starting!\n");
return;
}

lpConfig = (LPQUERY_SERVICE_CONFIG) LocalAlloc(LPTR, 1024);
if (!QueryServiceConfig(schService, lpConfig, 1024, &dwSize))
{
CloseServiceHandle(schService);
printf ("Query service config failed!\n");
return;
}
if (lpConfig->dwStartType == SERVICE_DISABLED)
{
printf ("The service is disabled!\n");
printf ("Try to change the service"s start type...");
if (!ChangeServiceConfig(schService,
SERVICE_NO_CHANGE,
SERVICE_DEMAND_START,
SERVICE_NO_CHANGE,
NULL, NULL, NULL, NULL, NULL, NULL,NULL))
{
CloseServiceHandle(schService);
printf ("Failed!\n");
return;
}
else
printf ("Successfully!\n");
}

printf ("starting the service
IIS5_IDQ命令行溢出程序源代码:【上一篇】
在桌面建立快捷方式:【下一篇】
【相关文章】
  • IIS5_IDQ命令行溢出程序源代码
  • 怎样启动一个程序而不显示它
  • 网络敏感程序的编制
  • 程序大战
  • 编写Linux服务器远程管理程序
  • 三级上机考试复习技巧之C语言程序设计
  • 服务器端的包含指令
  • 脚本对象与服务器组件的比较
  • 第三方服务器组件
  • 程序调试—发现及处理错误
  • 【随机文章】
  • vim手册
  • 软件设计师的要求
  • Google打不开的解决方法和IP地址表
  • 逐行读写文本的Demo程序
  • Win32教程35-RichEdit控件.语法高亮显示 二
  • OWB中对目标表的Insert/Update 和 Update/Insert的区别
  • gaim1.0.3 + OpenQ0.3.1
  • PMyBaseDebug (清凉级Debug工具单元)
  • 《仙境传说RO》玩过台服的人说RO最有前途的东西
  • 以前的某个程序安装已在安装计算机上创建挂起的文件操作
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.