Ver Mensaje Individual
  #5  
Antiguo 21-10-2014
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Reputación: 20
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(charSerialcharSalidacharRango)
{
  
int L strlen(Serial);
  
int R strlen(Rango);
  
int n;
  for(
n=0n<Ln++) Salida[n] = *Rango;
  
Salida[n] = 0;
  for(
n=0n<Ln++){
    for(
int r=0r<Rr++){
      
Salida[n] = Rango[r];
      if(
Salida[n] == Serial[n]) break;
    }
  }
}
//--------------------------------------------------------------

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

   
bool retval;
   
bool error=false//bandera para la verificacion de la cadena
   
double tiempoInicialtiempoFinal;

   
//Podemos asegurarnos de que el valor de cadena es hexa antes de seguir para evitar problemas
   
for(int i 0strlen(Serial) && error != truei++)
   {
      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(SerialSalidaRango);

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

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


Saludos.
Responder Con Cita