Ver Mensaje Individual
  #5  
Antiguo 21-10-2014
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.211
Reputación: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Fíjate en este código usando char* y funciones C:

Código PHP:
bool FuerzaBruta(char* Serial, char* Salida, char* Rango)
{
  
int L = strlen(Serial);
  
int R = strlen(Rango);
  
int n;
  for(
n=0; n<L; n++) Salida[n] = *Rango;
  
Salida[n] = 0;
  for(
n=0; n<L; n++){
    for(
int r=0; r<R; r++){
      
Salida[n] = Rango[r];
      if(
Salida[n] == Serial[n]) break;
    }
  }
}
//--------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
   
char* Rango = "0123456789ABCDEF";
   
char* Serial = "FAAF"; //Cadena hexa a buscar. No puede ser mayor que "FFFFFFFF"
   
char* Salida = new char[strlen(Serial)+1];

   
bool retval;
   
bool error=false; //bandera para la verificacion de la cadena
   
double tiempoInicial, tiempoFinal;

   
//Podemos asegurarnos de que el valor de cadena es hexa antes de seguir para evitar problemas
   
for(int i = 0; i < strlen(Serial) && error != true; i++)
   {
      if(!
isalnum(Serial[i])){
         
ShowMessage(AnsiString().sprintf("La cadena %s no es hexadecimal", Serial));
         
error = true;
      }
   }

   
//Tambien deberiamos asegurarnos de que el largo de la cadena no exceda del maximo
   
if(strlen(Serial) > 8)
   {
      
ShowMessage(AnsiString().sprintf("El largo de cadena excede del largo máximo.\nLargo actual: %d\nLargo máximo permitido: %d", strlen(Serial),8));
      
error = true;
   }

   if(
error != true) //Si no se produjo ningun error seguimos adelante
   
{
      
Form1->WindowState = wsMinimized; //Minimizamos el form para que el usuario no pueda pulsar el boton ni nada

      
tiempoInicial = GetTickCount(); //Obtenemos el tiempo de entrada

      
retval = FuerzaBruta(Serial, Salida, Rango);

      if(
retval == false){ //Si no se encontró avisamos
         
ShowMessage("No se encontró el valor");
      }else{
         
tiempoFinal = GetTickCount(); //obtenemos el tiempo de salida

         
ShowMessage( AnsiString().sprintf( "Valor hexadecimal: %s\n"
                                            "Se han tardado %s segundos en encontrarlo."
,
                                            
Salida, FormatFloat("0.000",(tiempoFinal - tiempoInicial) /1000)));
      }
      
Form1->WindowState = wsNormal; //volvemos a restaurar el form
   
}
   
delete [] Salida;
} 

Saludos.
Responder Con Cita