syscalo linux cracking 1 - creare e distruggere
Pubblicato da syscalo il 14/05/2000
Livello base
Introduzione
Semplicissimo tutorial sul cracking in Linux: niente piu' niente meno ;-).
Per fare questo semplice tutorial ho scritto un piccolo programma in C che andremo a crackare.
Il codice sorgente del programma e' presente all'interno del tutorial.
Programmi usati
Iniziamo
In questo tutorial crackiamo un programma mooolto semplice scritto per l'occasione, e poi ce ne possiamo tornare ognuno dalla propria ragazza ;-)
Ecco il codice sorgente:
// file linux_tut1.c
#include <stdio.h>
#define STR "\n\t|-\\Primo tutorial per linux by syscalo/-| \
\n\n\t\t->Introduzione ai tool<-\n\n"
#define BRAVO "\nSeriale corretto!\n"
#define MMM "Non ci siamo ;-p\n"
main (void)
{
int i = 0;
int prova = 0;
char dato[10];
printf (STR);
printf ("\nVediamo se indovini: ");
scanf ("%s", dato);
for (i = 0; i < 10 && dato[i] != 0; i++)
prova += dato[i];
if (prova == 301)
printf (BRAVO);
else
printf (MMM);
}
Come potete ben vedere e' molto semplice e non fa altro che sommare il codice ascii dei caratteri del seriale inserito e il valore cosi' ottenuto deve essere uguale a 301 (che io ho ottenuto con il seriale rEv ;)rev@rVm:~/tute1linux > oob linux_tut1 > disassemblato
rev@rVm:~/tute1linux > linux_tut1 |-\Primo tutorial per linux by syscalo/-| -> Introduzione ai tool <- Vediamo se indovini: xxx Non ci siamo ;-p rev@rVm:~/tute1linux >Se il seriale e' sbagliato il programma visualizza il messaggio "Non ci siamo ;-p"! E allora perche' non cercarlo nel disassemblato? Prendete il vostro editor di testo preferito e fate una ricerca della stringa. Di seguito e' riportato solo la parte di codice che ci interessa:
80483c0 ( 90) 817df82d010000 cmpl $0x12d,-0x8(%ebp) (JU 8048390 )
80483c7 ( 97) 7517 jne (to 80483e0 )
80483c9 ( 99) 68c0840408 pushl $0x80484c0 (R ' Seriale corretto! ')
80483ce ( 9e) e8ddfeffff call (to 80482b0 <_init+0x5c>)
80483d3 ( a3) 83c404 addl $0x4,%esp
80483d6 ( a6) eb15 jmp (to 80483ed )
80483d8 ( a8) 90 nop
80483d9 ( a9) 8db42600000000 leal 0x0(%esi,1),%esi
80483e0 ( b0) 68d4840408 pushl $0x80484d4 (JC 80483c7 ) (R 'Non ci siamo ;-p ')
80483e5 ( b5) e8c6feffff call (to 80482b0 <_init+0x5c>)
80483ea ( ba) 83c404 addl $0x4,%esp
80483ed ( bd) 89ec movl %ebp,%esp (JU 80483d6 )
80483ef ( bf) 5d popl %ebp
80483f0 ( c0) c3 ret
Come (fin troppo ;-p) ben specificato nel disassemblato, l'istruzione all'indirizzo 80483e0 viene raggiunta tramite un salto condizionato presente all'indirizzo 80403c7.
80483c0 ( 90) 817df82d010000 cmpl $0x12d,-0x8(%ebp) (JU 8048390 )
80483c7 ( 97) 7517 jne (to 80483e0 )
Casualmente ;-) c'e' una locazione di memoria il cui contenuto viene confrontato con il valore esadecimale 12D che, sempre casualmente ;-p, corrisponde al valore decimale 301.
80483c9 ( 99) 68c0840408 pushl $0x80484c0 (R ' Seriale corretto! ')
80483ce ( 9e) e8ddfeffff call (to 80482b0 <_init+0x5c>)
Ecco qui una stringa molto interessante: "Seriale corretto!". Ora spero che se dico che basta noppare il jne all'indirizzo 80483c7 per fare in modo che il programma mostri sempre la stringa "Seriale corretto!", qualsiasi seriale inseriamo, nessuno mi chieda perche' ;-prev@rVm:~/tute1linux > biew linux_tut1Eccoci in biew; se non ci siete gia' andate in modalita' esadecimale (premere F2 e poi h).
rev@rVm:~/tute1linux > linux_tut1 |-\Primo tutorial per linux by syscalo/-| -> Introduzione ai tool <- Vediamo se indovini: certo! Seriale corretto! rev@rVm:~/tute1linux >Volendo possiamo anche andare a vedere il disassemblato del programma dopo la modifica:
rev@rVm:~/tute1linux > oob linux_tut1 > disassemblato_modificato-|-| disassemblato della parte modificata |-|-
80483c0 ( 90) 817df82d010000 cmpl $0x12d,-0x8(%ebp) (JU 8048390 )
80483c7 ( 97) 90 nop
80483c8 ( 98) 90 nop
80483c9 ( 99) 68c0840408 pushl $0x80484c0 (R ' Seriale corretto! ')
80483ce ( 9e) e8ddfeffff call (to 80482b0 <_init+0x5c>)
Ed ecco le due nop al posto del salto ;-)
Conclusioni
Per il momento questo primo approccio puo' bastare! In fondo in ambiente windows si trovano spesso protezioni che si possono fregare semplicemente modificando un salto... e allora perche' non partire proprio con un esempio di questo tipo ;-)