⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 userdata.cpp

📁 一个邮件监控程序
💻 CPP
字号:
/*

  userData.cpp


  Maneja las opciones elegidas por el usuario.

  Autor: Sergio Scarnatto

*/

#include "stdafx.h"
#include "resource.h"
#include "userData.h"
#include <atlbase.h>

#include "Rijndael.h"
#include <iostream>

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

userData::userData()
{
/* 
* Lleno los valores con lo que esta guardado, o con defaults...
	 */

  char np[17]="\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
  np[0]= 0x70; np[1]= 0x38; np[2]= 0x4E; np[3]= 0x27;
  np[4]= 0x63; np[5]= 0x34; np[6]= 0x71; np[7]= 0x76;
  np[8]= 0x2B; np[9]= 0x2F; np[10]= 0x40; np[11]= 0x62;
  np[12]= 0x50; np[13]= 0x32; np[14]= 0x35; np[15]= 0x3E;
  m_sunvsbillgates = np;
  initData();
}

userData::~userData()
{
}

CString userData::getServidor()
{
  return this->Servidor;
}

CString userData::getUsuario()
{
  return this->Usuario;
}

CString userData::getClave()
{
  return this->Clave;
}

DWORD userData::getGuardarClave()
{
  return this->guardarClave;
}

int userData::setUsuario(CString unUsuario)
{
  this->Usuario = unUsuario;
  return 0;
}

int userData::setServidor(CString unServidor)
{
  this->Servidor = unServidor;
  return 0;
}

int userData::setClave(CString unaClave, DWORD unGuardarClave)
{
  this->Clave = unaClave;
  this->guardarClave = unGuardarClave;
  return 0;
}

/*

  saveUsuario : Salva los datos del usuario en el registro.
                Software\MailMonitor\Defaults\*
*/
int userData::saveUsuario()
{
  CRegKey reg;
  CString _appname;
  CString regBase;
  
  _appname.LoadString(IDS_APP_NAME);
		
  regBase = "Software\\"+_appname + "\\Defaults";
  
  reg.Create(HKEY_CURRENT_USER, regBase);
  reg.SetValue(Usuario, "Usuario");
  reg.SetValue(encrypt(Servidor), "Servidor");
  reg.SetValue(BuscarCada, "BuscarCada");
  reg.SetValue(MailProgramFN, "MailProgramFN");
  reg.SetValue(SoundFN, "SoundFN");
  reg.SetValue(bPlaySound, "bPlaySound");
  reg.SetValue(bIniciarMailPrg, "bIniciarMailPrg");
  reg.SetValue(bUseDefSound, "bUseDefSound");
  
  reg.Close();
  
  CString _sp;
  regBase = "Software\\Microsoft\\Windows\\CurrentVersion\\Run\\";
  DWORD lRet = reg.Create(HKEY_CURRENT_USER, regBase);
  if (lRet == ERROR_SUCCESS)
  {
    if (bIniciarConWindows) 
    {
      _sp = "\"";
      _sp += __argv[0];
      _sp += "\" -m";
      reg.SetValue(_sp, _appname);
    }
    else
      reg.DeleteValue(_appname);
  }
  reg.Close();
  return 0;
}

/*

  saveClave : Salva la clave del usuario y la opci髇 de guardarla para la 
              pr髕ima vez que entre al programa.

*/
int userData::saveClave()
{
  CRegKey reg;
  CString _appname;
  CString regBase;
  
  _appname.LoadString(IDS_APP_NAME);
  regBase = "Software\\"+_appname + "\\Defaults";
  
  reg.Create(HKEY_CURRENT_USER, regBase);
  if (guardarClave == 1)
  {
    reg.SetValue(encrypt(Clave), "Clave");
  }
  else
    reg.SetValue(encrypt(""), "Clave");    
  reg.SetValue(guardarClave, "GuardarClave");
  reg.Close();
  return 0;
}



int userData::setBuscarCada(DWORD vBuscarCada)
{
  this->BuscarCada = vBuscarCada;
  return 0;
}
DWORD userData::getBuscarCada()
{
  return this->BuscarCada;
}


int userData::setMailProgramFN(CString vMailProgramFN)
{
  this->MailProgramFN = vMailProgramFN;
  return 0;
}
CString userData::getMailProgramFN()
{
  return this->MailProgramFN;
}

int userData::setSoundFN(CString vSoundFN)
{
  this->SoundFN = vSoundFN;
  return 0;
}
CString userData::getSoundFN()
{
  return this->SoundFN;
}

int userData::setbIniciarConWindows(DWORD value)
{
  this->bIniciarConWindows = value;
  return 0;
}
DWORD userData::getbIniciarConWindows()
{
  return this->bIniciarConWindows;
}
int userData::setbPlaySound(DWORD value)
{
  this->bPlaySound = value;
  return 0;
}
DWORD userData::getbPlaySound()
{
  return this->bPlaySound;
}
int userData::setbIniciarMailPrg(DWORD value)
{
  this->bIniciarMailPrg = value;
  return 0;
}
DWORD userData::getbIniciarMailPrg()
{
  return this->bIniciarMailPrg;
}

int userData::setbUseDefSound(DWORD value)
{
  this->bUseDefSound = value;
  return 0;   
}
DWORD userData::getbUseDefSound()
{
  return this->bUseDefSound;
}

bool userData::getEsPrimerCheck()
{
  return this->bEsPrimerCheck;
}

void userData::initRegMsgs()
{
  DWORD lRet;
  CString regBase;
  DWORD dwIndex = 0;
  DWORD dwSize = 255;
  char valor[255];
  CRegKey reg;
  CString _appname;
  _appname.LoadString(IDS_APP_NAME);
  
  regBase = "Software\\"+_appname+"\\"+ encrypt(Servidor) + "\\"+ Usuario +"\\mc\\";
  
  lRet = reg.Open(HKEY_CURRENT_USER, regBase);
  if (lRet != ERROR_SUCCESS)
    bEsPrimerCheck = true;
  else
    bEsPrimerCheck = false;
  reg.Close();

  lRet = reg.Create(HKEY_CURRENT_USER, regBase);
  valor[0] = '\0';
  
  lRet = RegEnumValue(reg.m_hKey, dwIndex++, valor, &dwSize, NULL, NULL, NULL, NULL);	
  while (lRet == ERROR_SUCCESS && lRet != ERROR_NO_MORE_ITEMS)
  {
    reg.SetValue("0", valor);
    valor[0] = '\0';
    dwSize = 255;
    lRet = RegEnumValue(reg.m_hKey, dwIndex++, valor, &dwSize, NULL, NULL, NULL, NULL);	
  }
  reg.Close();
}

void userData::removeRegMsgs()
{
  DWORD lRet;
  CString regBase;
  DWORD dwIndex = 0;
  DWORD dwSize = 255;
  DWORD dwSize2 = 255;
  char valor[255];
  char valor2[255];
  CString s;
  CRegKey reg;
  CString _appname;
  _appname.LoadString(IDS_APP_NAME);
  
  regBase = "Software\\"+_appname+"\\"+ encrypt(Servidor) + "\\"+ Usuario +"\\mc\\";
  
  lRet = reg.Create(HKEY_CURRENT_USER, regBase);
  valor[0] = '\0';
  
  lRet = RegEnumValue(reg.m_hKey, dwIndex++, valor, &dwSize, NULL, NULL, NULL, NULL);	
  while (lRet == ERROR_SUCCESS && lRet != ERROR_NO_MORE_ITEMS)
  {
    reg.QueryValue(valor2, valor, &dwSize2);
    s = valor2;
    if (s == "0")
      reg.DeleteValue(valor);
    valor[0] = '\0';
    dwSize = 255;
    lRet = RegEnumValue(reg.m_hKey, dwIndex++, valor, &dwSize, NULL, NULL, NULL, NULL);	
  }
  reg.Close();
}

// Verifica si el mensaje es nuevo
bool userData::IsNewMail(CString vUIDL)
{
  CString regBase;
  CRegKey reg;
  DWORD dwSize = 255;
  char valor[255];
  CString s;
  CString _appname;
  _appname.LoadString(IDS_APP_NAME);
  
  regBase = "Software\\"+_appname+"\\"+ encrypt(Servidor) + "\\"+ Usuario +"\\mc\\";

  reg.Create(HKEY_CURRENT_USER, regBase);
  valor[0] = '\0';
  reg.QueryValue(valor, vUIDL, &dwSize);
  s = valor;
  reg.SetValue("1", vUIDL);
  reg.Close();
  
  if (s == "" && bEsPrimerCheck == false)
    return true;
  else
    return false;
}
/*

  initData : Recupera los datos del usuario, zona, dispositivo y telefonos.
  
*/
void userData::initData()
{
  CString _appname;
  CString regBase;
  
  _appname.LoadString(IDS_APP_NAME);
  regBase = "Software\\"+_appname + "\\Defaults";
  
  LONG lRet;
  DWORD dwSize = 255;
  CRegKey reg;
  char valor[256];
  DWORD iValor;
  DWORD dwIndex = 0;
  
  lRet = reg.Open(HKEY_CURRENT_USER, regBase);
  if (lRet != ERROR_SUCCESS)
  {
    // Es la primera vez que corre... creo los defaults!
    reg.Close();
    initRegistry();
  }
  
  lRet = reg.Create(HKEY_CURRENT_USER, regBase);
  valor[0] = '\0';
  
  dwSize = 255;
  lRet = reg.QueryValue(valor, "Servidor", &dwSize);
  Servidor = decrypt(valor);
  
  // Obtengo el nombre de usuario.
  dwSize = 255;
  lRet = reg.QueryValue(valor, "Usuario", &dwSize);
  Usuario = valor;
  
  // Obtengo su seteo de gardar clave
  lRet = reg.QueryValue(iValor, "GuardarClave");
  guardarClave = iValor;
  
  if (guardarClave)
  {
    // Recupero su clave
    // Obtengo su clave
    dwSize = 255;
    lRet = reg.QueryValue(valor, "Clave", &dwSize);
    Clave = decrypt(valor);
  }
  
  iValor = 5;
  lRet = reg.QueryValue(iValor, "BuscarCada");
  BuscarCada = iValor;
  
  dwSize = 255;
  valor[0]= '\0';
  lRet = reg.QueryValue(valor, "MailProgramFN", &dwSize);
  MailProgramFN = valor;
  
  dwSize = 255;
  valor[0]= '\0';
  lRet = reg.QueryValue(valor, "SoundFN", &dwSize);
  SoundFN = valor;
  
  iValor = 1;
  lRet = reg.QueryValue(iValor, "bPlaySound");
  bPlaySound = iValor;
  
  iValor = 0;
  lRet = reg.QueryValue(iValor, "bIniciarMailPrg");
  bIniciarMailPrg = iValor;
  
  iValor = 1;
  lRet = reg.QueryValue(iValor, "bUseDefSound");
  bUseDefSound = iValor;
  reg.Close();
  
  regBase = "Software\\Microsoft\\Windows\\CurrentVersion\\Run\\";
  lRet = reg.Create(HKEY_CURRENT_USER, regBase);
  if (lRet == ERROR_SUCCESS)
  {
    CString s;
    dwSize = 255;
    valor[0] = '\0';
    reg.QueryValue(valor, _appname, &dwSize);
    s = valor;
    if (s == "")
    {
      reg.DeleteValue(_appname);
      bIniciarConWindows = false;
    }
    else
      bIniciarConWindows = true;
  }
  reg.Close();
}

/*

  initRegistry : Iniciliza todas entradas al registro.

*/
void userData::initRegistry()
{
  CString _appname;
  CString _sufijo;
  CString regBase;
  CRegKey reg;
  
  _appname.LoadString(IDS_APP_NAME);
  regBase = "Software\\" + _appname;
  
  reg.Create(HKEY_CURRENT_USER, regBase);
  reg.Close();
  reg.Create(HKEY_CURRENT_USER, regBase + "\\Defaults");
  reg.SetValue(encrypt(""), "Clave");
  reg.SetValue("", "Usuario");
  reg.SetValue((DWORD)0, "GuardarClave");
  CString sdef;
  sdef.LoadString(IDS_SERVIDORWEBMAIL);
  reg.SetValue(sdef, "Servidor");
  reg.SetValue((DWORD)5, "BuscarCada");
  reg.SetValue("", "MailProgramFN");
  reg.SetValue("", "SoundFN");
  reg.SetValue((DWORD)1, "bPlaySound");
  reg.SetValue((DWORD)0, "bIniciarMailPrg");
  reg.SetValue((DWORD)1, "bUseDefSound");
  
  reg.Close();
}

//Function to convert unsigned char to string of length 2
void userData::Char2Hex(unsigned char ch, char* szHex)
{
	unsigned char byte[2];
	byte[0] = ch/16;
	byte[1] = ch%16;
	for(int i=0; i<2; i++)
	{
		if(byte[i] >= 0 && byte[i] <= 9)
			szHex[i] = '0' + byte[i];
		else
			szHex[i] = 'A' + byte[i] - 10;
	}
	szHex[2] = 0;
}

//Function to convert string of length 2 to unsigned char
void userData::Hex2Char(char const* szHex, unsigned char& rch)
{
	rch = 0;
	for(int i=0; i<2; i++)
	{
		if(*(szHex + i) >='0' && *(szHex + i) <= '9')
			rch = (rch << 4) + (*(szHex + i) - '0');
		else if(*(szHex + i) >='A' && *(szHex + i) <= 'F')
			rch = (rch << 4) + (*(szHex + i) - 'A' + 10);
		else
			break;
	}
}    

//Function to convert string of unsigned chars to string of chars
void userData::CharStr2HexStr(unsigned char const* pucCharStr, char* pszHexStr, int iSize)
{
	int i;
	char szHex[3];
	pszHexStr[0] = 0;
	for(i=0; i<iSize; i++)
	{
		Char2Hex(pucCharStr[i], szHex);
		strcat(pszHexStr, szHex);
	}
}

//Function to convert string of chars to string of unsigned chars
void userData::HexStr2CharStr(char const* pszHexStr, unsigned char* pucCharStr, int iSize)
{
	int i;
	unsigned char ch;
	for(i=0; i<iSize; i++)
	{
		Hex2Char(pszHexStr+2*i, ch);
		pucCharStr[i] = ch;
	}
}

#define ENCRYPT_BLOCK_SIZE 80

CString userData::encrypt(const char * szCad)
{
 
	char szHex[ENCRYPT_BLOCK_SIZE*2+1];
  
	//One block testing
	CRijndael oRijndael;
  oRijndael.MakeKey(m_sunvsbillgates, CRijndael::sm_chain0, 16, 16);

	char szDataIn[ENCRYPT_BLOCK_SIZE+1];
  char szDataOut[ENCRYPT_BLOCK_SIZE+1];
  memset(szDataIn, 0, ENCRYPT_BLOCK_SIZE+1);
  memset(szDataOut, 0, ENCRYPT_BLOCK_SIZE+1);
  strcpy(szDataIn, szCad);
  oRijndael.Encrypt(szDataIn, szDataOut, ENCRYPT_BLOCK_SIZE, CRijndael::ECB);
	CharStr2HexStr((unsigned char*)szDataOut, szHex, ENCRYPT_BLOCK_SIZE);

  CString s;
  strcpy(s.GetBuffer(ENCRYPT_BLOCK_SIZE*2),szHex);
  s.ReleaseBuffer();
  return s;
}

CString userData::decrypt(const char * szCad)
{
 
	//One block testing
	CRijndael oRijndael;
  oRijndael.MakeKey(m_sunvsbillgates, CRijndael::sm_chain0, 16, 16);

	char szDataIn[ENCRYPT_BLOCK_SIZE+1];
  char szDataOut[ENCRYPT_BLOCK_SIZE+1];
  memset(szDataIn, 0, ENCRYPT_BLOCK_SIZE+1);
  memset(szDataOut, 0, ENCRYPT_BLOCK_SIZE+1);
  HexStr2CharStr(szCad, (unsigned char*) szDataIn, ENCRYPT_BLOCK_SIZE);
  oRijndael.Decrypt(szDataIn, szDataOut, ENCRYPT_BLOCK_SIZE, CRijndael::ECB);

  CString s;
  strcpy(s.GetBuffer(ENCRYPT_BLOCK_SIZE),szDataOut);
  s.ReleaseBuffer();
  return s;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -