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

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 7 8 9 10 11 [12] 13 14 15 16
111  Programación / ASM / Re: Ayuda con funcion "Split" en: 28 Marzo 2013, 15:56 pm
Por si te sirve lo hice en C. Si te da una idea o si quieres usarla en tu codigo de ASM.

http://foro.elhacker.net/programacion_cc/c_funcion_split-t386651.0.html

Sa1uDoS
112  Programación / Programación C/C++ / [C] Funcion Split en: 28 Marzo 2013, 14:46 pm
Espero que a alguien le sirva. Yo no he visto fallos, si los encontrais, comentadlos por favor.

Código
  1. #include <stdio.h>
  2. #include <malloc.h>
  3. #include <string.h>
  4.  
  5. int len_palabra(char *cadena, int inicio, char separador);
  6. char **split(char *cadena, char separador);
  7.  
  8. int main()
  9. {
  10. char cadena[]="MrBlood.split.crea.funcion";
  11. int i;
  12. char **retorno=split(cadena, '.');
  13. for(i=0;retorno[i]!=NULL;i++)
  14. {
  15. printf("%s\n", retorno[i]);
  16. free(retorno[i]);
  17. }
  18. free(retorno);
  19. return 0;
  20. }
  21.  
  22. int len_palabra(char *cadena, int inicio, char separador)
  23. {
  24. int len=0, i=inicio;
  25. while(cadena[i]!=separador&&cadena[i]!='\0')
  26. {
  27. len++;
  28. i++;
  29. }
  30. return len;
  31. }
  32.  
  33. char **split(char *cadena, char separador)
  34. {
  35. int num_palabras=1, len_cadena=strlen(cadena), i, j=1, *inicios;
  36. for(i=0;i<len_cadena;i++)
  37. {
  38. if(cadena[i]==separador)
  39. {
  40. num_palabras++;
  41. }
  42. }
  43. inicios=malloc(sizeof(int)*num_palabras);
  44. inicios[0]=0;
  45. for(i=1;i<len_cadena;i++)
  46. {
  47. if(cadena[i]==separador)
  48. {
  49. inicios[j]=i+1;
  50. j++;
  51. }
  52. }
  53. char **retorno=malloc(sizeof(char *)*num_palabras+1);
  54. retorno[num_palabras]=NULL;
  55. for(i=0;i<num_palabras;i++)
  56. {
  57. j=len_palabra(cadena, inicios[i], separador);
  58. retorno[i]=(char *)malloc(sizeof(char)*j);
  59. strncpy(retorno[i], &cadena[inicios[i]], j);
  60. retorno[i][j]='\0';
  61. }
  62. free(inicios);
  63. return retorno;
  64. }
  65.  

Sa1uDoS

EDITO: Ahora se libera la memoria reservada con malloc.
113  Programación / Ingeniería Inversa / Re: Aqui os presento mi nuevo Crackme hecho por mi,haber quien lo descifra. en: 28 Marzo 2013, 13:03 pm
Y no hay mensaje de Felicidades?

Sa1uDoS
114  Programación / Programación C/C++ / Re: Libreria Juego Online en OpenGL en: 23 Marzo 2013, 16:57 pm
O crea tu propia libreria, si se compila en Win las funciones son de un modo, y en Linux funcionan de otra forma.

Sa1uDoS
115  Programación / Programación C/C++ / Re: Es posible hacer esto sin arreglos? en: 23 Marzo 2013, 12:48 pm
Si he entendido bien el problema no es que no pueda hacerlo con arrays, es que aun no los han dado.



Como que no es posible sin arrays? No es eficiente ni limpio, pero posible es.

Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5.    int num;
  6.    char num0=0, num1=0, num2=0, num3=0, num4=0, num5=0, num6=0, num7=0, num8=0, num9=0, i;
  7.    puts("Introduce 10 numeros\n");
  8.    for(i=0;i<10;i++)
  9.    {
  10.        scanf("%i",&num);
  11.        fflush(stdin);
  12.        switch(num)
  13.        {
  14.            case 0:
  15.                num0++;
  16.                break;
  17.            case 1:
  18.                num1++;
  19.                break;
  20.            case 2:
  21.                num2++;
  22.                break;
  23.            case 3:
  24.                num3++;
  25.                break;
  26.            case 4:
  27.                num4++;
  28.                break;
  29.            case 5:
  30.                num5++;
  31.                break;
  32.            case 6:
  33.                num6++;
  34.                break;
  35.            case 7:
  36.                num7++;
  37.                break;
  38.            case 8:
  39.                num8++;
  40.                break;
  41.            case 9:
  42.                num9++;
  43.                break;
  44.        }
  45.    }
  46.    if(num0>0)
  47.    {
  48.        printf("El 0 se repite %i veces\n", num0);
  49.    }
  50.    if(num1>0)
  51.    {
  52.        printf("El 1 se repite %i veces\n", num1);
  53.    }
  54.    if(num2>0)
  55.    {
  56.        printf("El 2 se repite %i veces\n", num2);
  57.    }
  58.    if(num3>0)
  59.    {
  60.        printf("El 3 se repite %i veces\n", num3);
  61.    }
  62.    if(num4>0)
  63.    {
  64.        printf("El 4 se repite %i veces\n", num4);
  65.    }
  66.    if(num5>0)
  67.    {
  68.        printf("El 5 se repite %i veces\n", num5);
  69.    }
  70.    if(num6>0)
  71.    {
  72.        printf("El 6 se repite %i veces\n", num6);
  73.    }
  74.    if(num7>0)
  75.    {
  76.        printf("El 7 se repite %i veces\n", num7);
  77.    }
  78.    if(num8>0)
  79.    {
  80.        printf("El 8 se repite %i veces\n", num8);
  81.    }
  82.    if(num9>0)
  83.    {
  84.        printf("El 9 se repite %i veces\n", num9);
  85.    }
  86.    getchar();
  87.    return 0;
  88. }
  89.  

Otro modo mas eficiente seria algo como:

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main()
  5. {
  6.    int num, i;
  7.    char repes[10];
  8.    memset(repes, 0, 10);
  9.    puts("Introduce 10 numeros\n");
  10.    for(i=0;i<10;i++)
  11.    {
  12.        scanf("%i",&num);
  13.        fflush(stdin);
  14.        repes[num]++;
  15.    }
  16.    for(i=0;i<10;i++)
  17.    {
  18.        if(repes[i]>0)
  19.        {
  20.            printf("Numero %i repetido %i veces\n", i, repes[i]);
  21.        }
  22.    }
  23.    getchar();
  24.    return 0;
  25. }

Aunque pueda mejorarse ;).

Sa1uDoS
116  Programación / Ingeniería Inversa / Re: [Keygenme] Aspid en: 21 Marzo 2013, 16:40 pm
Bueno, como nadie mas se anima posteo el codigo.
Tuve que retocar la PE Section y cifrar la funcion felicita().

Para compilar
Código
  1. fasm funcion.asm
  2. gcc crackme.c funcion.obj -o crackme.exe

Código
  1. format coff
  2.  
  3. public _asm_comp
  4.  
  5.        _asm_comp:
  6.                push ebp
  7.                mov ebp, esp
  8.  
  9.                xor eax, eax ;Limpiamos los registros
  10.                xor ecx, ecx
  11.  
  12.                mov ebx, dword[esp+8] ;Movemos a ebx la direccion de felicita
  13.                mov ebx, dword[ebx]
  14.                mov edx, dword[esp+12] ;Movemos a edx la pass
  15.                bucle:
  16.                        xor dword[edx+ecx], ebx ;desciframos felicita
  17.                        add ecx, 4 ;Sumamos al contador un DWORD
  18.                        cmp ecx, 0x18 ;Comparamos el contador con 24
  19.                        jne bucle ;Si no es igual salta a bucle
  20.                cmp word[edx+5], 0xC718 ;Comparamos la firma (edx+5) para ver si la clave fue correcta
  21.                je exit ;Si es igual salimos (eax=0)
  22.                inc eax ;Incrementamos eax
  23.  
  24.                exit:
  25.                leave
  26.                ret
  27.  
  28.  

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <time.h>
  5.  
  6. int comp(char *cadena);
  7. void felicita();
  8. int asm_comp(void *buff, void *func);
  9.  
  10. int main()
  11. {
  12.        srand(time(NULL));
  13.        unsigned int ID=rand()%(9999-1000)+1000, i;
  14.        char buffer[100];
  15.        unsigned int pass;
  16.        printf("ID> %i\nPass> ", ID);
  17.        scanf("%8x%s", &pass, buffer);
  18.        if(comp(buffer)==1)
  19.        {
  20.                printf("Wrong pass\n");
  21.                getchar();
  22.                return 1;
  23.        }
  24.  
  25.        for(i=2;i<strlen(buffer);i++)
  26.        {
  27.                ID-=buffer[0]+buffer[i];
  28.        }
  29.        if(ID==0)
  30.        {
  31.                if(asm_comp(&pass, felicita)==0)
  32.                {
  33.                                felicita();
  34.                                return 0;
  35.                }
  36.                printf("Wrong pass\n");
  37.                getchar();
  38.                return 1;
  39.        }
  40.        printf("Wrong pass\n");
  41.        getchar();
  42.        return 1;
  43. }
  44.  
  45. int comp(char *cadena)
  46. {
  47.        int i;
  48.        for(i=0;i<strlen(cadena);i++)
  49.        {
  50.                if(!((cadena[i]>='0' && cadena[i]<='9') || (cadena[i]>='A' && cadena[i]<='F')))
  51.                {
  52.                        return 1;
  53.                }
  54.        }
  55.        return 0;
  56. }
  57.  
  58. void felicita()
  59. {
  60.        printf("Registered\n");
  61.        getchar();
  62. }
  63.  

Gracias a los que participaron! Que les parecio? Muy simple?

Sa1uDoS

P.D.: Se me complico un poco la semana, siento no haberlo publicado el Domingo.
117  Programación / Ingeniería Inversa / Re: [Keygenme] Aspid en: 14 Marzo 2013, 19:25 pm
Era por que durara mas el reto xD. En unos dias (sobre el Domingo) publico el codigo en este mismo post.

Sa1uDoS
118  Programación / Ingeniería Inversa / Re: [Keygenme] Aspid en: 14 Marzo 2013, 18:53 pm
Espero que os haya gustado!



MCKSys Argentina Para entrar a la funcion de registrar deberias hacer una shellcode inyectarla, descifrar esa sección y cambiar la RET_Addr por la Addr de la funcion.

Por privado significa por Mensaje Privado ;).

Sa1uDoS
119  Programación / Ingeniería Inversa / [Keygenme] Aspid en: 13 Marzo 2013, 15:04 pm
Bueno, aqui les traigo un Keygenme nuevo.

Dificultad: [3/10] Me parece a mi...
Compilador: GCC
Objetivo: Hacer un Keygen.

Los Keygen por privado por favor.

Crackme

Espero que os guste y no lo reventeis en menos de 10 min jaja.



Hall of Fame
  • MCKSys Argentina
  • tincopasan
Sa1uDoS
120  Programación / Programación General / Re: Video Ejecutable en: 24 Febrero 2013, 10:48 am
Si quieres algo sencillo, el autorun ejecuta el .exe. El .exe tiene una ventana en la que se reproduce el video, cuando pulses cualquier tecla se abre por X segundos una ventana para escribir una contraseña.

Te recomiendo hacerlo en Visual Basic o algun lenguaje de alto nivel para que no te compliques mucho.

Sa1uDoS
Páginas: 1 2 3 4 5 6 7 8 9 10 11 [12] 13 14 15 16
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines