Usuario: Contraseña:
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

Autor Tema: Bug en codigo escrito en C,solo cuando se compila bajo Cygwin.  (Leído 1411 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Coeman76

  • Desarrolladores
  • Trade Count: (0)
  • *****
  • Mensajes: 353
  • Colaboraciones +82/-1
  • Sexo: Masculino
  • Wifiiu fiuuuu!!!
Bug en codigo escrito en C,solo cuando se compila bajo Cygwin.
« en: 07 de Diciembre de 2013, 03:35:27 pm »
  • Publish
  • Hola a tod@s

    Antes que nada decir que he buscado un subforo de programacion pero no lo he encontrado,disculpadme si no es el sitio adecuado y que sea movido por favor si procede.

    Resulta que tengo por aqui un codigo en C que he escrito que os quiero mostrar.
    El source en cuestion,cuando se compila bajo linux nativo,nos generara un binario que rulará a la perfección...

    Me explico...

    El programa será un generador de claves HEX longitud 10...el cual tiene como principal premisa no repetir mas de dos caracteres iguales seguidos y ademas no repetir mas de tres caracteres iguales a lo largo de la key...cosa que se puede hacer que yo sepa solamente con wg.pl(pesimos resultados,penaliza enormemente la velocidad y no abarca todas las keys posibles),pero eso es tema aparte.

    Lo que quiero comentar,es que este codigo rula a la perfeccion compilado bajo linux nativo,pero....y si utilizamos cygwin para crear un .exe y poderlo rular en windows???

    Pues bien...cygwin lo compilara sin problema alguno,tendreis un .exe,y cuando lo lanceis generará las claves....pero se pasará la reduccion por el forro de los ****  ;D ;D

    Si alguno lo prueba a compilar bajo cygwin que no se confunda cuando se generan las claves,ya que la primera clave generada sera AABABBCCDD si o si ....así que que se fije en lo que he puesto mas arriba  8)...no repetir mas de dos caracteres iguales seguidos y ademas no repetir mas de tres caracteres iguales a lo largo de la key...y vereis lo que quiero decir y el problema al rular el .exe

    Aquí os dejo el codigo comentado para aquellos que quieran entender algo y por si alguien que se haya encontrado con este problema sepa por donde van los tiros...


    Código: [Seleccionar]
    #include <stdio.h> 
    #include <stdlib.h>
    #include <string.h>
    #include <regex.h>

    #define MAX_PASS 11


    // By Coeman76 (2013)
    // Generador de 10 caracteres HEX
    // Reducido a no mas de 2 caracteres iguales repetidos
    // Reducido a no mas de 3 caracteres iguales a lo laro de la key
    // Inicio de key a elegir
    // compilar con 'gcc -Wall -o technicolor technicolor.c'


    void introNum(int argc, char *argv[]); // declaramos la funcion para filtrar los caracteres de inicio

    int main (int argc, char *argv[]){ // principal
     
      introNum(argc,argv); // llamamos a la funcion para filtrar los caracteres de inicio
     
      short int a,b,c,d,e,f,g,h,i;  // contadores

      char var[] = {'A','B','C','D','E','F','0','1','2','3','4','5','6','7','8','9'}; // array de caracteres para la key
      char regex_no2charrep[] = "([A-F0-9])\\1{2,}"; // primera regex: no mas de dos caracteres iguales repetidos
      char regex_no3longcharrep[] = ".*([A-F0-9]).*\\1.*\\1.*\\1.*"; // segunda regex: no mas de tres caracteres a lo largo de la key
      char pass[11]; // array para la pass
      regex_t mi_regex; // llamamos a la funcion regex
      regex_t mi_regex1; // llamamos a la funcion regex1
      a = 0; // pongo los contadores de inicio asi para que inicie de la primera clave que mostraria despues de las regex
      b = 0;
      c = 1;
      d = 0;
      e = 1;
      f = 1;
      g = 2;
      h = 2;
      i = 3;
     
      regcomp(&mi_regex,regex_no2charrep,REG_EXTENDED); // compilamos la expresion
      regcomp(&mi_regex1,regex_no3longcharrep,REG_EXTENDED); // compilamos la 2 expresion
     
      while( a <= 15 ){  // mientras contador sea menor a numero de caracteres posibles
        while( b <= 15 ){
          while( c <= 15 ){
    while( d <= 15 ){
      while( e <= 15 ){
        while( f <= 15 ){
          while( g <= 15 ){
    while( h <= 15 ){
      while( i <= 15 ){
        snprintf(pass,MAX_PASS,"%s%c%c%c%c%c%c%c%c%c",argv[2],var[a],var[b],var[c],var[d],var[e],var[f],var[g],var[h],var[i]); // pasamos a la variable pass la clave generada
        if ( (regexec(&mi_regex,pass,0,NULL,0)) ){ // si cumple la primera expresion pasa a la segunda
          if ( (regexec(&mi_regex1,pass,0,NULL,0)) ){ // si cumple la  segunda regex
    puts(pass); // imprime la pass
          }     
        }
        ++i; // aumentamos   
      }
      i = 0; // y ya fuera del bucle reiniciamos...lo hago asi para poder pasar parametros al bucle,tales como por cual key debe de empezar
      ++h;         
    }
    h = 0;
    ++g;     
          }
          g = 0;
          ++f;   
        }
        f = 0;
        ++e;   
      }
      e = 0;
      ++d;     
    }
    d = 0;
    ++c;   
          }
          c = 0;
          ++b;   
        }
        ++a; 
      }
     
      return 0;  // salimos del programa
     
    }

    void introNum(int argc, char *argv[]){ // funcion de deteccion de caracteres de inicio
     
      if( argc != 3 || strcmp(argv[1],"-i") != 0 || ( strcmp(argv[2],"A") && strcmp(argv[2],"B") &&
                                                      strcmp(argv[2],"C") && strcmp(argv[2],"D") &&
                                                      strcmp(argv[2],"E") && strcmp(argv[2],"F") &&
                                                      strcmp(argv[2],"0") && strcmp(argv[2],"1") &&
                                                      strcmp(argv[2],"2") && strcmp(argv[2],"3") &&
                                                      strcmp(argv[2],"4") && strcmp(argv[2],"5") &&
                                                      strcmp(argv[2],"6") && strcmp(argv[2],"7") &&                                                                                                           
                                                      strcmp(argv[2],"8") && strcmp(argv[2],"9") ) != 0 ){ // si no hay 3 argumentos y si el segundo argumento no es -i...
                                                                                                           // ... y el tercer argumento no es un digito hex...
                                                     
        fprintf(stderr,"\nUso: ./technicolor -i <CARACTER_DE_INICIO>\n\n"); // ...muestra la ayuda
     
      exit(1); // salimos del programa
     
      }
     
    }



    Es muy probable que nadie me de una solucion,ya que soy yo quien deberia de darla,jaajjaj....pero he aquí un motivo del porque muchas aplicaciones las hago solo para linux y si rulan en windows pues suerte jejeej

    Un saludo

    Desconectado d1k0v

    • Awireless Elite Developer
    • Trade Count: (0)
    • *****
    • Mensajes: 2431
    • Colaboraciones +61/-1
    • Sexo: Masculino
    • Loco por el Wifi
    Re:Bug en codigo escrito en C,solo cuando se compila bajo Cygwin.
    « Respuesta #1 en: 07 de Diciembre de 2013, 10:30:35 pm »
  • Publish
  • lo he compilado en linux y luego hice technicolor -i B y me da esto, y mucho mas

    BAABAB97E7
    BAABAB97E8
    BAABAB97E9
    BAABAB97FC
    BAABAB97FD
    BAABAB97FE
    BAABAB97FF
    BAABAB97F0
    BAABAB97F1
    BAABAB97F2
    BAABAB97F3
    BAABAB97F4
    BAABAB97F5
    BAABAB97F6
    BAABAB97F7
    BAABAB97F8

    si no son mas de 3 no repite pero lo he cortado porque no se lo que tardara en acabar,
    cuanto tarda??

    en el tema que comentas de windows ni idea pero en linux mas de 4 iguales no me hizo

    Desconectado kcdtv

    • Elite Friends
    • Trade Count: (0)
    • *****
    • Mensajes: 1226
    • Colaboraciones +20/-1
    • visita www.wifi-libre.com
      • www.wifi-libre.com
    Re:Bug en codigo escrito en C,solo cuando se compila bajo Cygwin.
    « Respuesta #2 en: 08 de Diciembre de 2013, 12:19:30 am »
  • Publish
  • C es muy rapido, depurando asi digamos que quitas un 40% del peso de un diccionario completo...  16^10
    el tiempo de escribir algo como 100 000 000 000 llaves quizas un poco menos.

    depende del procesador y esto pero creo que puedes esperar algo como 20 MB/segundos  ...
    alrededor de 14 horas
    Y cuentas 10bytes plus el retorno de carro, onze bytes por linea = mas o menos 1 100 000 000 000 bytes > 1,00044 TB , o sea necesitas un disco de 1,5 TB
     
     

    Desconectado Coeman76

    • Desarrolladores
    • Trade Count: (0)
    • *****
    • Mensajes: 353
    • Colaboraciones +82/-1
    • Sexo: Masculino
    • Wifiiu fiuuuu!!!
    Re:Bug en codigo escrito en C,solo cuando se compila bajo Cygwin.
    « Respuesta #3 en: 08 de Diciembre de 2013, 12:49:31 am »
  • Publish
  • lo he compilado en linux y luego hice technicolor -i B y me da esto, y mucho mas

    BAABAB97E7
    BAABAB97E8
    BAABAB97E9
    BAABAB97FC
    BAABAB97FD
    BAABAB97FE
    BAABAB97FF
    BAABAB97F0
    BAABAB97F1
    BAABAB97F2
    BAABAB97F3
    BAABAB97F4
    BAABAB97F5
    BAABAB97F6
    BAABAB97F7
    BAABAB97F8

    si no son mas de 3 no repite pero lo he cortado porque no se lo que tardara en acabar,
    cuanto tarda??

    en el tema que comentas de windows ni idea pero en linux mas de 4 iguales no me hizo

    Notaras que bajo linux no sacas mas de 2 caracteres iguales repetidos y 3 iguales a lo largo de la clave...eso esta probado ;)
    ...lo que pregunto es porque si compilo bajo cygwin windows no hace la reduccion....ese es el tema a debatir...
    El generador estara sobre el terabyte o mas como bien dice kc...pero solo es un "ejemplo" para que veais claramente en el codigo,y luego en su ejecucion la diferencia windows/linux y si alguien tiene una respuesta ;)

    Un saludo

    Desconectado Coeman76

    • Desarrolladores
    • Trade Count: (0)
    • *****
    • Mensajes: 353
    • Colaboraciones +82/-1
    • Sexo: Masculino
    • Wifiiu fiuuuu!!!
    Re:Bug en codigo escrito en C,solo cuando se compila bajo Cygwin.
    « Respuesta #4 en: 08 de Diciembre de 2013, 07:58:23 pm »
  • Publish
  • TEMA SOLUCIONADO

    La solucion para que los codigos con regex.h funcionen correctamente bajo windows compilados en cygwin es NO usar la bandera REG_EXTENDED en la funcion regcomp(),sustituyendo la flag por 0 (REG_BASIC) y escapando los signos especiales tales como //(//) o //{//} (ejemplo ya escapados) cuando declaramos la expresion regular.

    Gracias al compi del foro lampiweb Mike79 por la ayuda

    Podeis cerrar el tema

    Un saludo

    P.D.: Ale a fabricar aplis pa windows xDD

    Desconectado maripuri

    • WWAuditor-PRO developer
    • Moderador Global
    • Trade Count: (0)
    • *****
    • Mensajes: 4813
    • Colaboraciones +235/-4
    • Sexo: Femenino
    • Scripting Girl
      • WirelessWindows
    Re:Bug en codigo escrito en C,solo cuando se compila bajo Cygwin.
    « Respuesta #5 en: 08 de Diciembre de 2013, 08:16:02 pm »
  • Publish

  • Citar
    La solucion para que los codigos con regex.h funcionen correctamente bajo windows
    ¿Mande..?

    Parece que tocará sacar una ONO Netgear Stop & Go..      :)
    WWAuditor-PRO developer
    No preguntes sobre temas del foro por privado, participa en el

    Desconectado Coeman76

    • Desarrolladores
    • Trade Count: (0)
    • *****
    • Mensajes: 353
    • Colaboraciones +82/-1
    • Sexo: Masculino
    • Wifiiu fiuuuu!!!
    Re:Bug en codigo escrito en C,solo cuando se compila bajo Cygwin.
    « Respuesta #6 en: 08 de Diciembre de 2013, 09:19:24 pm »
  • Publish

  • Parece que tocará sacar una ONO Netgear Stop & Go..      :)

    oido cocina!!

    ....marchando una de Netgear para la señorita ;) ;)


     

    Dumpper All V.x.x

    DUMPPER WPS PENTESTING

    Facebook Comments