Charla de Introducción al cracking en GNU/Linux

Pongo a vuestra disposición el material de la charla que dí sobre cracking en GNU/Linux dentro de los Cursillos de Julio del e-ghost, el grupo de Software Libre de la Universidad de Deusto. Lo de siempre, si tenéis cosas que añadir o comentar, estaré encantado de escucharos 😉

Ejemplos utilizados durante la charla:

Números de serie:

  • Ejemplo en C:
    #include <stdio.h>
    #include <string.h>
    
    int main( int argc, char *argv[] )
    {
            char pass[] = "topsecret";
            char input[10];
            int ok;
    
            printf("Password? ");
            scanf("%s", &input);
    
            ok = !strncmp(input, pass, 10);
    
            if(ok)
            {
                    printf("Aqui se ejecuta el juego :-)\n");
            }
            else
                    printf("UNREGISTERED!!\n");
    
            return 0;
    }
  • Ejemplo en C++:
    #include <iostream>
    #include <string>
    using namespace std;
    
    int main()
    {
        string pass("topsecret");
        string input;
    
        cout << "Password? ";
        cin >> input;
    
        if(pass == input)
            cout << "Aqui se ejecuta el juego :-)" << endl;
        else
            cout << "UNREGISTERD!!" << endl;
    
        return 0;
    }
  • Ejemplo en ASM:
    extern scanf
    extern strcmp
    
    section         .text
    
    global _start
    
    _start:
            mov     eax,04h                 ;write(1,msgPass,lenPass);
            mov     ebx,01h
            mov     ecx,msgPass
            mov     edx,lenPass
            int     80h
    
            push    dword scanf_a           ;scanf("%s", &scanf_a);
            push    dword scanf_s
            call    scanf
    
            push    dword scanf_a           ;strmcmp(scanf_a, secret);
            push    dword secret
            call    strcmp
    
            cmp     eax,00h
            jne     BAD
    
    OK:
            mov     eax,04h                 ;write(1,msgOK,lenOK);
            mov     ebx,01h
            mov     ecx,msgOK
            mov     edx,lenOK
            int     80h
            jmp     exit
    
    BAD:
            mov     eax,04h                 ;write(1,msgBAD,lenBAD);
            mov     ebx,01h
            mov     ecx,msgBAD
            mov     edx,lenBAD
            int     80h
    
    exit:
            mov     eax,01h                 ;exit(0)
            xor     ebx,ebx                 ;
            int     80h                     ;call kernel
    
    section         .data
    
    msgPass db      'Password? '            ;mensaje
    lenPass equ     $ - msgPass             ;longitud
    msgOK   db      'Aqui se ejecutaria el juego ;-)', 0Ah  ;mensaje
    lenOK   equ     $ - msgOK               ;longitud
    msgBAD  db      'UNREGISTERED!!', 0Ah   ;mensaje
    lenBAD  equ     $ - msgBAD              ;longitud
    
    scanf_s db      '%s',0
    scanf_a db      0,0,0,0,0,0,0,0,0,0,0
    
    secret  db      'topsecret'

Discos llave:

  • Ejemplo de lectura de un fichero llave:
    #include <stdio.h>
    #include <string.h>
    
    int main( int argc, char *argv[] )
    {
            char pass[] = "topsecret";
            char input[9];
            FILE *file;
            int ok;
    
            file = fopen("./file.key", "r");
            fread(input, sizeof(char), 9, file);
    
            ok = !strncmp(input, pass, 9);
    
            if(ok)
            {
                    printf("Aqui se ejecuta el juego :-)\n");
            }
            else
                    printf("UNREGISTERED!!\n");
    
            return 0;
    }
  • Ejemplo de lectura de un diskette llave:
    #include <stdio.h>
    #include <string.h>
    
    #define FS "/dev/loop0"
    #define FS "./fd0"
    
    int main( int argc, char *argv[] )
    {
            char pass[] = "topsecret";
            char input[9];
            FILE *file;
            int ok;
    
            file = fopen(FS, "r");
            fseek(file,0,SEEK_SET);
            fread(&input[0], sizeof(char), 1, file);
            fseek(file,10,SEEK_SET);
            fread(&input[1], sizeof(char), 1, file);
            fseek(file,16,SEEK_SET);
            fread(&input[2], sizeof(char), 1, file);
            fseek(file,18,SEEK_SET);
            fread(&input[3], sizeof(char), 1, file);
            fseek(file,21,SEEK_SET);
            fread(&input[4], sizeof(char), 1, file);
            fseek(file,23,SEEK_SET);
            fread(&input[5], sizeof(char), 1, file);
            fseek(file,25,SEEK_SET);
            fread(&input[6], sizeof(char), 1, file);
            fseek(file,27,SEEK_SET);
            fread(&input[7], sizeof(char), 1, file);
            fseek(file,32,SEEK_SET);
            fread(&input[8], sizeof(char), 1, file);
    
            ok = !strncmp(input, pass, 8);
    
            if(ok)
            {
                    printf("Aqui se ejecuta el juego :-)\n");
            }
            else
                    printf("UNREGISTERED!!\n");
    
            return 0;
    }
    
  • Fichero llave.
  • Imagen del diskette llave comprimida con GZIP.

Ejemplo más complejo:

Descárgate la presentación:

Descárgate el audio:

6 pensamientos en “Charla de Introducción al cracking en GNU/Linux

  1. txipi

    Vaya, el reproductor de flash me reproduce el MP3 como los pitufos makineros. ¿A alguien le suena bien el flash con el reproductor? Si a todo el mundo le va mal, lo quito directamente 😀

    Responder
  2. txipi

    Muchas gracias por el betatesting 😉

    Quito el Flash Player este. Quizá tenga que ver con el tipo de MP3 que puede reproducir o algo así. Seguiremos investigando…

    Responder
  3. gip

    Aupa aspaldiko!

    Estuve en la Euskal iba a saludarte pero tuve que pirarme a toda leche! Siento por este acto tan descortes :P. Zaitu ai! Ea ni ere blog-arekin animatzen naizen 🙂

    Responder
  4. txipi

    Aupa gip!!!

    Aspaldiko, bai! ¿Qué es de tu vida? Ya me dijo Hey_neken que piras a Barcelona a seguir estudiando y tal. La verdad es que cuando ví en una intro una mención a Dust Inc. me acordé de vuestras creaciones y vuestras rayadas en la Euskal 😉

    Ondo pasa Bartzelonan, ea elkar ikusten dogun laster 😛

    Responder

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *