Пример #1
0
/***
	Funcao para o instalador
***/
_LBSFUNC BOOL WINAPI
CheckKey(LPDLLCALLPARAMS parms)
{
   // Chega aqui serial@chave

   char *key;

   key = strchr( parms->lpszParam, '@' );
   if( !key )
   {
       MessageBox( NULL, "Erro grave na instalação.", "Erro!", MB_OK );
       return TRUE;               // Doideira, nao veio a virgula
   }

   *key = 0;
   ++key;   // key agora aponta para o inicio da chave de ativacao.

   if( ValidKey( parms->lpszParam, key ) )
       return FALSE;
    
   return TRUE;
}
Пример #2
0
//-------------------------------------------------------------------------------------------------
bool KeyValues::KeyJumpCheck( const char *key ) {
	bool badkey = false;

	if( ValidKey( key ) ) {
		if( !JumpToKey( key, false ) ) {
			badkey = true;
			
		} else if( current_section->values[current_index].section ) {
			badkey = true;
		}

	} else {
		if( current_index >= current_section->values.size() ) {
			badkey = true;
		}
		if( current_section->values[current_index].section ) {
			badkey = true;
		}
	}

	return !badkey;
}
Пример #3
0
/***
	Personaliza um arquivo dado.
	Parametros:
		FileName: Nome do arquivo a personalizar
		Name: Nome do usuario
		Company: Nome da compania
		Serial: Serial Number
		ActKey: Chave de ativacao
	Inportante:
		· O número serial deve estar na forma 11.222222.3333.444444
		  com pontos separando os campos. Ele deve sempre ter o
		  strlen() <= 32.
		. O campo 1 eh de tamanho fixo. Os demais sao de tamanho variavel
		  ate o limite maximo de 32 caracteres.
		· 11 = tipo da cópia
		· 222222 = Data. Se começar com número > 0 é data absoluta.
		  Se começar (ATENCAO) com 0 é time bomb e se começar com letra
		  indica cópia não demo.
		· 3333 = Número de terminais
		· 444444 = Um número serial
	Retorna:
		PE_DATA: Chave com data absoluta ja expirou
		PE_TYPE: Tipo nao bate
		PE_ACTKEY: Chave de ativacao nao bate
		PE_SERIAL: Numero de serie com formacao ou tamanho errado
		PE_PARAM: Parametros invalidos
		PE_TIMEBOMB: Tentando personalizar copia time-bomb de novo. Deve Re-instalar
		PE_LOCALIZA: Nao achou marca no arquivo
		PE_POSERROR: Falhou no seek
		PE_WRITEERROR: Falhou ao tentar escrever no arquivo
		PE_OK: Ok
***/
int
Personalize( char *szFileName, char *szName, char *szCompany, char*szSerial, char *szActKey )
{
	char	data_hoje[MAXDATAINST+1];
	time_t	time_aux;
	FILE	*fp;
	int	check = 0;
	char	data[MAXDATA+1];
	char	szBufAux[MAXDATA+1];
	struct tm	*dma;
	long		tloc;
	


	if( szFileName == NULL || szName == NULL || szCompany == NULL || szSerial == NULL || szActKey == NULL ){
		return( PE_PARAM );
	}
	if( strlen( szSerial ) > MAXSIZESERIAL ){
		return( PE_SERIAL );
	}
	if( !ValidKey( szSerial, szActKey ) ){
		return( PE_ACTKEY );
	}
	// Calculo os deslocamentos variaveis em relacao ao serial passado
	if( CalculaDeslocamentos( szSerial ) != PE_OK ){
		return( PE_SERIAL );
	}

	// Verifico se eh uma data absoluta e se ja expirou.
	if( isdigit( szSerial[DESLOCDATA] ) && szSerial[DESLOCDATA]>'0' ){
		/* Eh uma copia demo com data absoluta. VAMOS VERIFICAR!!! */
		time( &tloc );
		dma = localtime( &tloc );
		sprintf( szBufAux, "%04.2d%02.2d",
			dma->tm_year + 1900,
			dma->tm_mon + 1
		);
		// MAXDATA deve ser 6 ; yyyymm. Assim mesmo nos protegemos procurando o '.'
		istrncpychar( data, szSerial+DESLOCDATA, MAXDATA, '.' );
		if( strncmp( szBufAux, data, MAXDATA ) > 0 ) {
			return( PE_DATA );
		}
	}

	/* procura a estrutura str_pers
	 */
	if( (fp = localiza( szFileName, str_pers )) == NULL ) {
		return( PE_LOCALIZA );
	}

	// Verifico TIPO da copia antes de decriptografar pois esta em
	// area nao criptografada.
	if( strncmp( TIPO( str_pers ), szSerial+DESLOCTIPO, MAXTIPO ) != 0 ){
		return( PE_TYPE );
	}

	if( PERS( str_pers ) == PE_PERS ) {
		/* Jah passou o "person" por aqui antes.
		 * decriptografo a estrutura, para nao perder as
		 * demais informacoes nela contidas: data_instalacao, num_serie, etc.
		 */
		Decriptografa( DATAINST(str_pers), CHECKSUM( str_pers ) );
		iIsDecrypt = TRUE;
	}
	
	if( szSerial[DESLOCDATA] == '0' ){
		// Eh um numero de serie time-bomb
		if( PERS( str_pers ) == PE_PERS ){
			/* Tentando fazer person de time bomb sobre uma copia
			 * previamente personalizada. Nao deixo!!!! Que o filho
			 * da mae re-instale o produto.
			 */
			fclose( fp );
			return( PE_TIMEBOMB );
		}
	}


	// Posiciono no inicio da marca para gravar estrutura de
	// personalizacao
	if( fseek( fp, lPosicao, 0 ) == -1 ) {
		fclose( fp );
		return( PE_POSERROR );
	}

	// Monto a estrutura de personalizacao
	time_aux = time( &time_aux );
	strftime( data_hoje, sizeof( data_hoje ), "%Y%m%d", localtime( &time_aux ) );
	istrncpy( DATAINST( str_pers ), data_hoje, MAXDATAINST );
	istrncpy( NOME( str_pers ), szName, MAXNOME );
	istrncpy( NAMECOMPANY( str_pers ), szCompany, MAXCOMPANY );
	istrncpy( SERIE( str_pers ), szSerial, MAXSIZESERIAL );

	// O tipo da copia ja vem pre-gravado e nao preciso colocar.

	/* indica que o produto estah personalizado */
	PERS( str_pers ) = PE_PERS;

	check = Criptografa( DATAINST( str_pers ), CHECKSUM( str_pers ) );
	CHECKSUM( str_pers )[ 0 ] = ( check & 0xFF00 ) >> 8;
	CHECKSUM( str_pers )[ 1 ] = ( check & 0x00FF );

	if( fwrite( (char *) str_pers, sizeof str_pers, 1, fp ) != 1 ) {
		fclose( fp );
		return( PE_WRITEERROR );
	}
	fclose( fp );
	return( PE_OK );
}