Syscalo Linux cracking 1 |
||
14-05-2000 |
by "syscalo" |
|
|
Published by Quequero |
|
Linux |
Oleeeeeeee :) menomale qualcuno che si dedica a linuxxxx bravo sys :))))) |
xuniL |
UIC's form |
|
UIC's form |
Difficoltà |
(X)NewBies ( )Intermedio ( )Avanzato ( )Master |
Semplicissimo tutorial sul cracking in Linux: niente piu' niente meno ;-)
Introduzione |
Tools usati |
URL o FTP del programma |
Il codice sorgente del programma e' presente all'interno del tutorial.
Essay |
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:
-|-|-| inizio programma |-|-|-
// 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);
}
-|-|-| fine programma |-|-|-
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 ;)
Per compilare il programma:
rev@rVm:~/tute1linux > gcc -o linux_tut1 linux_tut1.c
Passiamo a disassemblare:
rev@rVm:~/tute1linux > oob linux_tut1 > disassemblato
Ora andiamo a vedere cosa fa in esecuzione il programma:
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:
-|-|-| inizio disassemblato |-|-|-
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
-|-|-| fine disassemblato |-|-|-
Come (fin troppo ;-p) ben specificato nel disassemblato, l'istruzione all'indirizzo
80483e0 viene raggiunta tramite un salto condizionato presente all'indirizzo 80403c7.
Andiamo quindi a vedere cosa c'e' a questo indirizzo:
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 ;-Þ, corrisponde al valore decimale 301.
Poi viene effettuato un salto se il valore nella locazione e' diverso da 301 e viene
visualizzata la stringa "Non ci siamo ;-p".
Scendiamo un po' piu' in basso nel codice e vediamo che c'e':
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' ;-Þ
Procediamo alla modifica vera e propria del programma: l'opcode delle istruzioni e'
gia' presente nel disassemblato, quindi non ci resta che aprire il file con un editor
esadecimale e modificare il 7517 in 9090.
Eseguiamo il tutto con biew:
rev@rVm:~/tute1linux > biew linux_tut1
Eccoci in biew; se non ci siete gia' andate in modalita' esadecimale (premere F2 e poi
h).
Premete F5 (Goto), e premete F2 fino a selezionare Virtual e nel campo Type new shift:
inserite l'indirizzo riportato nel disassemblato cioe' 80483c7 e premete invio.
Vi trovate proprio l'opcode 7517 della jne. Ma va?! 8-)
Passiamo alla modifica: premete F4 (Modify) e scrivete 9090 al posto di 7517. Ora premete
F2 (Update) per salvare i cambiamenti (nel caso invece non voleste salvarli premete F10
(Quit)).
Il cracking del programma e' terminato!
Proviamo la nostra modifica:
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 ;-)
-x bye to all x-
syscalo
÷ all rights reVerSed ÷
|
Il prossimo tutorial sara' piu' interessante, lo prometto ;-Þ Ma 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 ;-)
Disclaimer |
UIC's page of reverse engineering, scegli dove andare: |
Home Anonimato Assembly CrackMe ContactMe Forum Iscrizione |
Lezioni Links Linux NewBies News Playstation |
Tools Tutorial Search UIC Faq |
UIC |