elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Seguridad
| | |-+  Criptografía (Moderador: kub0x)
| | | |-+  fuerza bruta AES modo ECB
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: fuerza bruta AES modo ECB  (Leído 2,546 veces)
eberfalu2

Desconectado Desconectado

Mensajes: 7


Ver Perfil
fuerza bruta AES modo ECB
« en: 21 Septiembre 2015, 01:43 am »

Hola gente, ando en busca de otro par de ojos basicamente. Tengo que encontrar, a traves de una ataque de fuerza bruta, cual es la clave con la que fue cifrado el texto.
Me dieron un parte de la llave (11caracteres de 16) y tengo q hacer fuerza bruta sobre el resto, mi idea fue descifrar el texto con cada una de las llaves y ver si los caracteres que me dio como resultado pertenecen al rango ascii (se que el texto fue codificado en ascii). trabaje con cripto++ y mi codigo tarda muchas horas (unas 18 si lo hago en paralelo si no mas) cuando se que mis compañeros lo han podido hacer en menos.

aca les dejo el codgio
Código:
string decodifica(byte key[16], string hexa){
AutoSeededRandomPool prng;
string recovered="";
ECB_Mode< AES >::Decryption d;
try{
d.SetKey(key, 16);
CryptoPP::StringSource ss(hexa, true,
new CryptoPP::HexDecoder(
new CryptoPP::StreamTransformationFilter( d,
new CryptoPP::StringSink( recovered ), StreamTransformationFilter::NO_PADDING)));
}catch(const CryptoPP::Exception& e) {
cerr << e.what() << endl;
exit(1);
}
return recovered;
}

int valido(string aux){
int resul=1, h=0;
int tam=sizeof(aux);
int ac;
for(h=0;h<tam;h++){
if (!((int)aux[h]>0 && (int)aux[h]<257)){
resul=0;
h=25;
}
}
return resul;
}
int main(int argc, char* argv[])
{
byte key[16]={'K','e','y','2','G','r','o','u','p','2','1',' ',' ',' ',' ',' '};

string hexa1,hexa2,hexa3,hexa4,hexa5,hexa6,hexa7,hexa8,hexa9,hexa10,hexa11,hexa12,hexa13,hexa14,
hexa15,hexa16,hexa17, recovered, aux;
hexa1="D35A20289C43003A96AB32EA8556CCA6";
hexa2="D53D335BF8D2E51772743893113457CE";
hexa3="135648BEC5B8DB824965FA877EC683C2";
hexa4="A4D5FAAD25A0C83866721949B7F70504";
hexa5="E650333AFA48741C38E7B3A97A4936E7";
hexa6="4D3CFE5BC2A6AD8B82C253B98AF621DF";
hexa7="F99BC9752FF5B083858E1F4B9981B4A4";
hexa8="BB54DB4CAB1019F6769457C4F4F2B3FF";
hexa9="DE1932B09AAB1D101CDCF0216D629D17";
hexa10="6872F5DB771864533A0EEDBE2A1CC262";
hexa11="5816109CD62656B0573A03F2E7F2ACAE";
hexa12="DA538E5AADC720AD0D6C2ACC30A71BFA";
hexa13="C80F8D5FA7D9E6D94623311F1E7BB0C8";
hexa14="D3C00CABA5BB42C9AF1444D8B613DBB0";
hexa15="1963DD4D2897B7F15638F37C1E0D44FE";
hexa16="B3C4B6AB1566CD68F94E806957E04261";
hexa17="749F5A324D381008150710891496EFDF";


int i,j,k,l,m;
for(i=33; i<127; i++){
for(j=33; j<127; j++){
std::cout << (char)i << (char)j << "\n" << std::endl;
for(k=33; k<127; k++){
for(l=33; l<127; l++){
for(m=33; m<127; m++){
key[11]=(char)i;
key[12]=(char)j;
key[13]=(char)k;
  key[14]=(char)l;
key[15]= (char)m;
key[16]='\0';

aux.clear();
aux=decodifica(key, hexa1);
  if (valido(aux)==1){
  aux.clear();
  aux=decodifica(key, hexa2);
  if (valido(aux)==1){
  aux.clear();
  aux=decodifica(key,hexa3);
  if (valido(aux)==1){
  aux.clear();
  aux=decodifica(key, hexa4);
  if (valido(aux)==1){
  aux.clear();
  aux=decodifica(key,hexa5);
  if (valido(aux)==1){
  aux.clear();
  aux=decodifica(key, hexa6);
  if (valido(aux)==1){
  aux.clear();
  aux=decodifica(key,hexa7);
  if (valido(aux)==1){
  aux.clear();
  aux=decodifica(key, hexa8);
  if (valido(aux)==1){
  aux.clear();
  aux=decodifica(key,hexa9);
  if (valido(aux)==1){
  aux.clear();
  aux=decodifica(key, hexa10);
  if (valido(aux)==1){
  aux.clear();
  aux=decodifica(key,hexa11);
  if (valido(aux)==1){
  aux.clear();
  aux=decodifica(key, hexa12);
  if (valido(aux)==1){
  aux.clear();
  aux=decodifica(key,hexa13);
  if (valido(aux)==1){
  aux.clear();
  aux=decodifica(key, hexa14);
  if (valido(aux)==1){
  aux.clear();
  aux=decodifica(key,hexa15);
  if (valido(aux)==1){
  aux.clear();
  aux=decodifica(key, hexa16);
  if (valido(aux)==1){
  aux.clear();
  aux=decodifica(key,hexa17);
  if (valido(aux)==1){
  std::cout << "Esta es la llave: "<<key << std::endl;
  i=j=k=m=l=128;
  time_t tiempo = time(0);
  struct tm *tlocal = localtime(&tiempo);
  char output[128];
  strftime(output,128,"%d/%m/%y %H:%M:%S",tlocal);
  printf("%s\n",output);
}
}
}}}}}}}}}}}}}}}}
}
}
}
}

std::cout << "fin de ejecucion - " << key << std::endl;

return 0;
}

como es ecb cada bloque es independiente por eso si el primer bloque pertenece al "rango" ascii pruebo con el seg.
No me dio resultado.

Me dieron la idea de desencriptarlo y volverlo a cifrar con cada una de las llaves pero eso no lo he podido hacer (porque eso me daria lo mismo, lo que me hace pensar no termine de entender la idea que me dieron.

Gracias


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Fuerza Bruta En VB
Programación Visual Basic
Cicklow 6 7,579 Último mensaje 24 Agosto 2005, 22:51 pm
por 5v5
Fuerza bruta « 1 2 3 »
Programación Visual Basic
vivachapas 25 12,861 Último mensaje 22 Enero 2008, 03:06 am
por vivachapas
Fuerza bruta
Programación Visual Basic
aaronduran2 4 3,059 Último mensaje 28 Junio 2008, 21:09 pm
por aaronduran2
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines