Syscalo Linux cracking 1
(creare e distruggere)

 

14-05-2000

by "syscalo"

 

 

UIC's Home Page

Published by Quequero 

Linux

Oleeeeeeee :) menomale qualcuno che si dedica a linuxxxx bravo sys :)))))

xuniL

UIC's form
Home page: http://syscalo.cjb.net
E-mail: [email protected]
UIC's form

Difficoltà

(X)NewBies ( )Intermedio ( )Avanzato ( )Master

 

Semplicissimo tutorial sul cracking in Linux: niente piu' niente meno ;-)


syscalo Linux cracking 1

(creare e distruggere)
Written by syscalo

Introduzione

Per fare questo semplice tutorial ho scritto un piccolo programma in C che andremo a crackare.

Tools usati

oob: (ottimo ;-) disassemblatore
biew: editor esadecimale
(li trovate su packetstorm)

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 ÷

Note finali

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

Nulla da dichiarare ;-)

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