Beispiel #1
0
/***
	Retorna o nome do cliente que instalou o produto.
***/
char*
GetName()
{
	// Nao preciso de variavel estatica auxiliar pois na
	// estrutura ja tem o \0. Nao preciso calcular os des-
	// locamentos aqui.
	if( !iIsDecrypt ){
		return( NULL );
	}
	return( NOME( str_pers ) );
}
Beispiel #2
0
u_ocor(char *pre, char *pos)
{

 char *q, *get_rand();
 int i, u, n, j, max, seq, nseq;
 OSET r, x, *p = &set_aux; 
 
 seq = 0;
 troca = OP_1_CAST;
 por = OP_1_CAST;

 Operador = U_OCOR;
 if (g_tab_operador[Operador].percent==0) return;

  set_new_inic(&r,"char\0unsigned char\0int\0float\0unsigned\0unsigned int\0short\0short int\0long\0long int\0unsigned long\0unsigned long int\0double\0long float\0");

   set_new_inic(&x, "char\0unsigned char\0int\0float\0unsigned\0short\0long\0unsigned long\0double\0");

 
 u = sym.no;
 max = g_tab_operador[Operador].maximum; 
 if (max ==0) max--;
 

   if (expre_pos.topo >= 0)
     {
       ex_aux = expre_pos;

       for (i = 0; i <= ex_aux.topo; i++)
         {		/* procura operador do tipo desejado */
	   if (ex_aux.no[i].tipo != troca ||
		 set_inn(&r, NOME((&ex_aux), i)) < 0) 
			continue;

 
           set_dup(&x, p);
           nseq = set_card(p);
           

           for (n = max, q = get_rand(p, Operador); 
		q != NULL && n != 0;	q = get_rand(p, Operador),n--)
            {	/* troca pelos outros operadores */

               	if (expre_pos.no[i].tipo == por && 
                    strcmp(NOME((&expre_pos), i), q) == 0)
		{
			n++;
		 	continue;
		}
		seq = set_inn(&x, q);

		expre_pos.no[i].tipo = por;
		expre_pos.no[i].nome = expre_pos.livre;
		strcpy(&(expre_pos.buf[expre_pos.livre]), q);
		expre_pos.livre += strlen(q)+1;
 
		if (expre_valida(&expre_pos))
		{
		  monta_in_expre(&expre_pos, 0, expre_pos.topo); /* monta infixa */
		  strcpy(bufmen, pre);
		  strcat(bufmen, expre_pos.buf);
                  sprintf(bufmen, "%s %s ",pre, expre_pos.buf);
		  strcat(bufmen, pos);
		  add_descritor(sym.inicio, sym.comprimento, u, bufmen);
  		  sorteia_grupoU(Operador, Seq[Operador] + seq);
	         }
		 else
		   n++;
		 expre_pos = ex_aux;
            }
	    set_free(p); 
            Seq[Operador] += nseq;
           }
	set_free(&r); set_free(&x);

      }
}
Beispiel #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 );
}
Beispiel #4
0
void DirVarRepLoc(char *pre, char *pos)
{
SIMBOLO *q, *var_get_rand();
int     i, j, n, max, seq, nseq;
int     u, k, t;
VAR_SET	*p = &var_set_aux, *r;
char	*var_name;

   Operador = DIR_VAR_REP_LOC;
   if (g_tab_operador[Operador].percent == 0)
        return;

   u = sym.no;
   max = g_tab_operador[Operador].maximum;
   if (max == 0)
	max--;

   if (expre_pos.topo >= 0)
   {

       expre_completa(&expre_pos);     /* completa expressao */
       ex_aux = expre_pos;

       for (i = 0; i <= expre_pos.topo; i++)
       {            /* procura referencia do tipo desejado */

           j = root_of_ref(&expre_pos, i);
           if ( j < 0 || expre_pos.no[j].tipo != VARIAVEL || 
		! e_interface(NOME((&expre_pos), j)) )
               continue;
	   expre_exec_tipo(&expre_pos, expre_pos.no[i].final, i, tipo, ptar);

	   r = &setL;
	   var_set_dup(r, p);
	   nseq = var_set_card(p);		
	   for (n = max,q = var_get_rand(p, Operador); 
		     n != 0 && q != NULL; q = var_get_rand(p, Operador), n--)
	   {
		if ( ! compara_tipos(tipo, ptar, q->tipo, q->ptar))
		{
		   n++;
		   continue;
		}
	   	seq = var_set_inn(r, q->nome);
		expre_substitui(&expre_pos, i, q->nome, VARIAVEL);

                if (! expre_valida(&expre_pos) || 
                        compara_expre(&expre_pos, &ex_aux))
		{
		   n++;
                   expre_pos = ex_aux;
		   continue;
		}
		
           	monta_in_expre(&expre_pos, 0, expre_pos.topo); 
                sprintf(bufmen, "%s IF_MUTA(%s, ", pre, expre_pos.buf);
                expre_pos = ex_aux;
                monta_in_expre(&expre_pos, 0, expre_pos.topo);
		strcat(bufmen, expre_pos.buf);
		strcat(bufmen, ")");
		strcat(bufmen, pos);
           	add_descritor(sym.inicio, sym.comprimento, u, bufmen);
		sorteia_grupo1(Operador, Seq[Operador]+seq);

           	expre_pos = ex_aux;
	   }
	   var_set_free(p);
	   Seq[Operador] += nseq;
	}
   }