Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-10-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 14
aguml Va por buen camino
pues solo queria ver como hacer eso, era solo por ver como era, no es por algo en concreto. Yo por ejemplo en estos ejemplos a la cadena valida solo le he sumado 10 a cada caracter y esa es la cadena que busco despues en el bucle de fuerza bruta haciendo la misma operacion con cada cadena posible y comparando con la válida y si coincide ya tendrias el serial bueno. Ahora mismo no lo necesito para nada pero para seriales pequeños la fuerza bruta es muy válida.
Responder Con Cita
  #2  
Antiguo 21-10-2014
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.941
Poder: 27
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Bueno, el primer paso es tener claro cual es el problema. Y no veo claro cual es.
__________________
El malabarista.
Responder Con Cita
  #3  
Antiguo 22-10-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 14
aguml Va por buen camino
bueno, a ver si ahora lo entiendes, imagina una aplicacion que para acceder a ella necesitas una clave de 8 caracteres y solo admite caracteres hexadecimales. Entonces examinas y ves que coge el serial que introduces y le aplica un md5 y al resultado lo compara con un md5 que tiene guardado. Solo si son iguales podras acceder a la aplicacion y no puedes modificar el binario. Como sabras, el md5 es irreversible asi que la unica solucion seria crear un bucle de fuerza bruta que sea capaz de probar todos los seriales posibles aplicando el md5 a cada uno y comparar el resultado con el md5 bueno. Esa seria la idea y es util cuando no es muy largo es serial. Ahora con las nuevas gpu y cuda la cosa es mucho mas rapida con lo que se podrian atacar a claves mas largas. Otra opcion es atacar a la clave desde varios ordenadores repartiendo el trabajo, por ejemplo, si son 16 ordenadores podria uno atacar desde 000000000 a 0FFFFFFFF, otro desde 111111111 hasta 1FFFFFFFF y asi el resto disminuyendo los tiempos. Habia una aplicacion que se usa para eso en cuda y que era configurable pero mi gpu no soporta cuda asi que no pude probarla.
Responder Con Cita
  #4  
Antiguo 22-10-2014
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.941
Poder: 27
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Ah! Estas intentando hacer un "Ataque de arcoiris".

Eso se hace con un https://en.wikipedia.org/wiki/Rainbow_table.

Una explicacion del algoritmo:

http://crypto.stackexchange.com/ques...ble-generation

Como notas, se genera una *tabla*. Si eres listo, no la computas cada vez, sino que la pre-generas. Como pa' rematar sabes *exactamente* de donde hasta adonde va el rango de ataque pan comido. Asi que guardas la tabla pregenerada (ej: En sqlite o un motor sql o lo que sea), y solo tienes que hacer un "SELECT Clave FROM Rainbow WHERE Hash=EsteHash). Eso debe salir rapidisimo (osea, el buscar).

Asi que generas un funcion que te retorne el rango de hexadecimales validos, lo haseahs, lo guardas en la tabla y luego le haces hash al que quieres atacar y lo buscas en tu tabla de ataques. *Pufff* Sale en milisegundos. No tienes que hace CUDA ni nada raro con esto.
__________________
El malabarista.
Responder Con Cita
  #5  
Antiguo 22-10-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 14
aguml Va por buen camino
lo que dices es buena solucion pero tiene varias pegas. La primera es que crear una rainbow table se demoraria incluso mas que la brute force convencional ya que al tener que realizar las mismas operaciones y ademas tener que ir guardando los resultados en la tabla hace que demore mas aun. La otra pega es el tamaño de las rainbow tables, he llegado a ver tablas hasta de 40 gigas por lo que su portabilidad se complica y mucho. Cuando estuve tocando ese tema vi que habia paginas que tenian tablas listas para descargar y tambien habia programas preparados para crearlas pero las dos razones que comento son suficientes como para pensarselo.

Última edición por aguml fecha: 22-10-2014 a las 19:25:51.
Responder Con Cita
  #6  
Antiguo 22-10-2014
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.941
Poder: 27
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Pero tienes el rando de busqueda acotado, asi que no debe ser tan grande. Ademas con fuerza bruta tienes un algoritmo sequencial donde pagas lo mismo por cada vez que lo ejecutes. Solo es rapido si apuestas a que la respuesta esta al inicio del rango de busqueda. Ademas estas buscando integers. Eso se puede almacenar super-eficiente.
__________________
El malabarista.
Responder Con Cita
  #7  
Antiguo 23-10-2014
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.211
Poder: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Entiendo que aguml solo ha pretendido experimentar. Al principio no entendí bien lo que pretendía y escribí un código muy simple que evidentemente no era lo que él buscaba. Siguiendo con la causa original del hilo me permito aportar un código usando C, sin ayuda de cadenas estilo delphi, como él usa, mucho más eficiente.

He usado un serial como éste: FAB1AF04. La función de aguml ha dado con el resultado en 262,875 segundos, mientras que la función que propongo ha tardado 8,656 segundos en un i7. La diferencia es más que notable: 30 veces más rápido, y dedicándole un poco más de tiempo, seguro que se le puede hacer rendir algo más:

Código PHP:
bool FuerzaBruta(charSerialcharSalidacharRango)
{
  
int L strlen(Serial);
  
int R strlen(Rango);
  
int ni;
  
bool Error true;

  for(
n=0n<Ln++) Salida[n] = *Rango;
  
Salida[n] = 0;
  
int f;
  for(
int r=0; ; r++){
    *
Salida Rango[r%R];
    
//acarreo
    
for(int c=0Salida[c]==*Rango && r>1c++){
      for(
i=0Rango[i] && Rango[i]!=Salida[c+1]; i++);
      
Salida[c+1] = Rango[(i+1)%R];
    }
    if(!(
Error strcmp(SalidaSerial))) break;
  }
  return !
Error;

Saludos.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Seleccionar un determinado rango de caracteres en un memo ErikMdqqq C++ Builder 7 02-08-2013 03:51:49
Es posible crear bucle controlado José Luis Garcí Varios 5 05-07-2011 10:04:54
Crear codigo de Fuerza Bruta kurono Varios 12 31-01-2011 16:46:26
Como crear un bucle con TEdit's axlrafael OOP 12 08-05-2008 19:22:48
Cerrar Form "fuerza bruta" MaMu Varios 3 22-05-2007 19:59:50


La franja horaria es GMT +2. Ahora son las 05:11:08.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi