Hacker,cracker,hax0r, lamer, etc.

 
 
 
Diventare Hacker?!

 

Ho preparato questo intervento perché più volte, alcuni ragazzi, mi hanno chiesto come si diventa hacker.

Hacker? Cazzo….. e perché?
Perché vorrei capirci di più, per poter buttar fuori qualcuno dalla chat quando ti sta sulle palle; entrare comunque il quel sito che chiede l’autenticazione o per installare programmi senza conoscerne i seriali.

Non sono proprio cose nobili ed edificanti e le posso capire, ma poi, come la mettiamo con quegli altri, quei ragazzi un pò meno smanettoni che invece stanno chiedendo il contrario?
Come posso navigare con maggiore privacy? Esiste una password non rintracciabile? Il testo della mia tesi, come fare perché non venga copiata on line?   
Come vedete, l’aiuto per l’uno va a discapito dell’altro e viceversa.
Penso serve a poco dire ben venga, se poi dite che hacker significa anche voler capire, essere curiosi, voler veder al di là di certe cose o essere in grado di… perchè è sbagliato l’approccio, sono sbagliati i fini per i quali si chiede di voler imparare certe cose.
Bisogna rendersi conto che nella vita a tutti piacerebbe togliersi dai piedi chi sta antipatico, trovare porte sempre aperte, strade accessibili solo per noi o ottenere gratuitamente quello che ci va.
Nella vita bisogna imparare a saper rispettare, ad affrontare le situazioni o a saper rinunciare quando lo si deve.
Se tutti fossimo hacker cosa accadrebbe….. tutti sulla stessa barca…. punto e a capo!
Se invece lo chiedete solo per qualche sciocchezzuola, del tipo "ti rovino il blog", allora, e con maggior ragione, vi dico di lasciar stare e di usare quel tempo per fare qualcosa di più costruttivo ed importante per il vostro futuro.
O forse volete diventare proprio dei grandi ed abili hacker o cracker?
Siete dei fanatici del tutto "free", che tutto è di tutti o contro ogni copyright e regola civile?
Rispondetemi tra qualche anno, quando esperti di informatica sarete stati chimati a creare un programma o un sito o quando avrete creato un qualcosa di tutto vostro e vorreste giustamente venderlo per guadagnare e vivere. 
Conoscete qualche grande hacker che non è stato ancora rintracciato dalle polizie di tutto il mondo?
Se la passione inizia con lo scopo di conoscere ed avvisinarsi all’informatica, allora secondo me non sareste nemmeno qui a chiedere certe cose. Avreste deciso di studiare informatica o stareste già con la testa su libri e riviste di informatica.
Mentalmente, hacker si nasce non si diventa e chi lo diventa non lo dice e non lo chiede.
Ricordate che niente è facile e che niente arriva dal niente. Se veramente volete impegnarvi occorreranno tempo, sacrifici e volontà.
A quante persone piacerebbe suonare uno strumento? A tutti lo so, ma poi, quando ci si rende conto che sarà possibile suonarlo con un pò di professionalità solo dopo alcuni anni, e che prima occorre studiare solfeggio e musica, poi si passa, si lascia, si rifiuta.
Qui è la stessa cosa ragazzi!
Oggi, qualcuno si meraviglia delle mie conoscenze in campo hardware, ma certamente non sa delle notti insonne passate ad installare un sistema operativo o delle intere giornate spese ad aggiustare un computer non funzionante.
Non rimpiango certo il tempo perso, anzi lo rifarei perché mi piace farlo!
Ecco passione, volontà e pazienza.
Comunque stiano le cose, l’informatica e la conoscenza del computer stanno al primo posto.
Si inizia da lì, da come funziona il computer, dal linguaggio macchina e poi con qualche assembly.
Volenti o dolenti dovrete imparare qualche linguaggio di programmazione: C , C++ , Perl , PHP , TCL , QBasic, Java, etc.
Oggi si dice che a molti ragazzi (futuri hacker??) piace il linguaggio Phyton, Perl o Lift, mentre la conoscenza di Python, C/C++, Java, Perl, e LISP messi insieme da una preparazione globale.
E ci credo!
Imparare un linguaggio non significa leggere solo qualche libro specifico, ma creare da subito dei piccoli programmi e poi leggere quelli degli altri. Una volta imparato il primo linguaggio, il successivo sarà più facile da capire e da imparare.
La maggior parte degli smanettoni utilizza Linux come sistema operativo perchè con esso la programmazione con qualsiasi linguaggio è possibile da subito, mentre Windows non mette a disposizione niente e si può programmare un poco col Qbasic e in HTML soltanto.
Linux vi consentirà di installare un server WEB , un FTP , un Sendmail , consentire il telnet sul vostro PC , un pop3 , insomma pernette di giocarci tanto!
E piu’ ci si gioca piu’ si capisce cosa sta dietro alla rete, tanto per pensare con la testa di un eventuale hacker in erba!
Oggi internet da molte possibilità di conoscere e imparare cose che prima occorreva tempo e soldi per farlo.
Ma bisogna essere curiosi ed avere una buona conoscenza dell’inglese.
La lingua dell’hacker è l’inglese, qualunque nazionalità si abbia!

 

IL LINGUAGGIO MACCHINA

Ad ogni buon conto, questo intervento non ha l’intento di insegnare un linguaggio o di entrare nel merito del funzionamento del computer, cose che come detto richiedono tempo e che potete fare da soli con l’aiuto di libri, riviste e internet, ma, per chi è completamente a digiuno, esso vuole solo indicare la via e accennare l’abc.

Una volta entrati nel merito vi renderete conto che in un simile spazio, non potevo davvero fare di più.
Partendo dall’abc, a parte il noto sistema numerico decimale, avrete sentito parlare del sistema numerico binario, ovvero quello formato solo dalle due cifre "0-1" detta cifra binaria (BIT). Pertanto 1 bit contiene solo il minimo dell’informazione possibili 0-0 o 1-1.
Se non conoscete tale sistema di numerazione, tenete presente che esso procede da sinistra a destra, che la posizione del numero determina il suo valore e che lo zero equivale sempre e comunque a zero. Pertanto il numero binario 11111111 equivale a 255 decimali così come 01101001 equivale a 105. Infatti, tenendo conto delle posizioni:

128  64  32  16  8  4  2  1  decimale

   1    1     1    1   1  1  1  1 =  255 
   0    1     1    0   1  0  0  1 = 
105   

 
Tale sistema numerico creato dal matematico tedesco G. Leibniz fu poi perfezionato dal matematico inglese G. Boole. E proprio grazie alla semplicità di realizzare fisicamente un elemento con due stati anziché un numero superiore e alla corrispondenza con i valori logici vero e falso, che questo sistema fu scelto per la rappresentazione interna dei numeri in campo informatica, dove qualunque elemento elettrico può assume solo due stati (spento o acceso, off e on, falso o vero, ovvero 0 e 1).
Altro sistema numerico usato in campo informatico è quello esadecimale (base 16) detto hex.
Il sistema esadecimale è molto usato in informatica, per la sua relazione diretta tra una cifra esadecimale e quattro cifre binarie. È spesso usato come intermediario, oppure come sistema numerico a sé stante. Per esempio, è possibile esprimere un BYTE (8 bit) con esattamente due cifre esadecimali (invece che con più cifre binarie o 3 decimali, e lasciando gran parte dell’intervallo non utilizzato). La memoria del computer, per esempio, lavora in hex!
 
 binario      hex      decimale
 0000  =     0      =    0
 0001  =     1      =    1
 0010  =     2      =    2
 0011  =     3      =    3
 0100  =     4      =    4
 0101  =     5      =    5
 0110  =     6      =    6
 0111  =     7      =    7
 1000  =     8      =    8
 1001  =     9      =    9
 1010  =     A      =   10
 1011  =     B      =   11
 1100  =     C      =   12
 1101  =     D      =   13
 1110  =     E      =   14
 1111  =     F      =   15
 
 
LA CPU
 
Bene, prima di dire altro sul linguaggio macchina occorre introdurre qualcosa sul computer.
Il computer (l’elaboratore) è solo un ammasso di componenti elettrici e l’unica parte capace di eseguire delle operazioni, se sollecitata, è il processore.
Il processore o CPU è formato da sottilissime sfoglie di silicio (wafer), sostanza scelta per essere un materiale disponibile e un buon semiconduttore. I wafer trattati chimicamente e ritagliati, formeranno i chip che col processo della fotolitografia verranno incisi per contenere la parte logica e le connessioni. Tale tipo di transistor viene chiamato MOS (Metal Oxide Semiconductor) il cui compito è quello di reagire al passaggio di corrente, ovvero aprendo e chiudendo un circuito (on, off). 
Nelle CPU vengono già racchiuse (codificate) le operazioni elementari (set di istruzioni) che dovranno eseguire e che sono di tipo aritmetiche (tutte le operazioni che conosciamo), logiche (AND, OR, NOT, etc.) e relazionali (maggiore,minore,uguale, etc.).
In merito ai valori booleani, vi dò una rinfrescata dicendo che il valore AND per esempio, sarà vero (valore 1) solo quando entrambi gli ingressi (valori o porte) saranno veri (ovvero vi sarà tensione =1); mentre una porta "OR" darà, per esempio, un valore 1 solo se almeno uno dei due valori sarà 1 (avrà tensione). 
La componente interna alla CPU predisposta per tali compiti si chiama ALU (Arithmetic-Logic-Unit) e più ALU formano una Pipeline.
Ogni ALU è predisposta per eseguire una istruzione alla volta e un istruzione base raccoglie sempre le tre operazioni: FETCH (lettura)  –  DECODE (decodifica) – EXECUTE (esecuzione). Un programma non farà altro che far eseguire in seguenza tale istruzione base (ciclo macchina). Praticamente, i processori ricevono segnali binari (0-1) li manipolano eseguendo le istruzioni ricevute (in numero di milioni di operazioni al secondo), restituendo poi il risultato (un valore) in forma binaria.
Immaginate che per ogni operatore booleano vi sia un transistor dedicato, chiamato porta logica, l’insieme di tutte le porte logiche formerà un chip che in uscita può dare solo due valori, 0 e 1, a seconda che rilasci o meno corrente. Nel caso in cui un chip abbia solo due porte di ingresso, esso potrà
 gestire solo 4 combinazioni binarie:
0-0; 0-1; 1-1; 1-0
E, in base alla numerazione binaria sappiamo che:
0+0 = 1;  0+1 = 1
1+1= 10; 1+0 = 1  

Ora, supponiamo che un chip debba effettuare la somma 0+1; bene, affichè esso dia il risultato dovuto =1, dovrà utilizzare la porta logica "OR" che, come detto, rilascia un uscita "vera" solo se uno dei due segnali è vero e quindi in questo caso rilascerà tensione (on =1).
Nel caso della somma binaria 1+1, la situazione è più complessa perchè c’è il riporto e quindi se venisse utilizzata la sola porta OR i suoi risultati possibili (0 o 1) non sarebbero validi e allora ecco che si abbinano altre porte (AND e NOT per esempio), per tener conto del riporto e ridare poi il risultato binario esatto (in questo caso =10).
Il processore o CPU è quindi quella componente hardware del computer che è in grado di eseguire i programmi scritti in linguaggio basato sul sistema binario e che per questo viene detto linguaggio macchina.
Come nel linguaggio naturale, nel linguaggio macchina i simboli dell’alfabeto utilizzato (1 e 0) sono organizzati in "parole" che a loro volta costituiscono "frasi". Le frasi del linguaggio macchina sono dette istruzioni; ognuna di esse ordina al processore di eseguire un’azione elementare afferente allo stato interno del computer, come la lettura di una locazione di memoria oppure il calcolo della somma dei valori contenuti in due registri. Le frasi sono generalmente costituite da una parola iniziale detta codice operativo iniziale, che indica il tipo di azione da eseguire, seguita da altre parole che specificano gli eventuali parametri (o dati) a cui l’azione deve essere applicata (per esempio "SOMMA"-"15"-"20"). Se consideriamo l’istruzione data, come "verbo" della frase, possiamo dire per analogia che il linguaggio macchina prevede solo verbi all’imperativo; non a caso, i linguaggi di programmazione che presentano questa caratteristica sono detti proprio linguaggi imperativi.
La frequenza con cui i Cicli macchina si succedono, viene scandita dall’orologio interno (clock) del computer e generalmente ad ogni impulso di clock il processore esegue un ciclo. La velocità di tale esecuzione (frequenza) viene misurata in Hertz ed ecco perché uno dei dati caratteristici dei processori è la velocità di frequenza, oggi arrivata a migliaia di Gigahertz al secondo.
Le più piccole unità di memoria delle CPU con tempi di accesso brevissimi, si chiamano REGISTRI e sono le zone dove vengono memorizzate le informazioni per eseguire un’istruzione o il suo risultato parziale. Le ALU devono quindi operare insieme ai Registri, prelevando e depositando il risultato delle singole operazioni logico-matenatiche effettuate. I registri sono organizzati in una struttura detta stack e quando si dice che una CPU è a 64 bit vuol dire che i suoi egistri possono memorizzare solo 64 bit di dati per volta (8 registri da 1 byte).
Altro componente importante delle CPU è la Memoria Cache, ovvero un ulteriore memoria (molto veloce) che conserva alcuni dati (i risultati di alcune istruzioni) per evitare all’ALU di ri-effettuare un’operazione già effettuata in precedenza.
 
LINGUAGGI DI PROGRAMMAZIONE
 
Pertanto, le istruzioni che possono comparire in un programma descrivono azioni semplici quali "somma", "sottrai", "dividi", "moltiplica", "preleva" (dalla memoria), "deposita" (in memoria) o istruzioni di salto traducibili con "passa all’istruzione N", dove N rappresenta un indirizzo di memoria in cui è memorizzata un’istruzione (in assenza di salti, il processore esegue le istruzioni del programma sequenzialmente) e cose del genere.
Scrivere però un linguaggio simile utilizzando il solo sistema binario, non era semplice e pratico, oltre che presentare degli errori, così, dopo svariati studi, alla fine degli anni ’50 un gruppo di esperti della IBM mise a punto un "linguaggio simbolico" chiamato FORTRAN (FORmula TRANslation) con il quale dietro semplici parole, cui accennavao prima, era già stata codificata la relativa istruzione binaria da eseguire. Analoghe caratteristiche tecnico-scientifiche ale vevano anche i successivi linguaggi come l’ALGOL e il PASCAL. In seguito, per facilitare i programmatori per un ambito più commerciali e per avere un linguaggio più attinente al campo amministrativo, venne creato il linguaggio COBOL (Common Business Oriented Language), per esempio.
In generale qualunque linguaggio che avesse bisogno di una traduzione e che quindi non era strettamente quello macchina, venne definito di tipo ASSEMBLER a cui succedettero poi quelli definiti ad "alto livello" cui il Fortran fù l’antisegnano. Infatti da esso derivò poi il BASIC (1964) che introdusse nuove strutture di controllo di flusso nei vari cicli di istruzione. Successivamente, con i primi micro-computer, venne alla luce un linguaggio di programmazione "orientato agli oggetti", ovvero dove il programma (a volte molto grande) viene diviso in pezzetti (oggetti) che interagiscono tra loro. Esempi di programmi object oriented sono lo Smalltalk, il C++ e Java.
Da menzionare poi i linguaggi di scripting o batch, vale a dire liste di comandi interattivi che invece di venir digitati singolarmente vengono salvati in un file e la linea di comando li esegue poi ripetutamente. Mediante tali script (più o meno proprietari) è possibile intervenire su qualsiasi linguaggio di programmazione e tutti i linguaggi di scripting hanno in comune il fatto di essere linguaggi interpretati, cioè eseguiti da un altro programma (il programma madre o un suo modulo). Un esempio ci è dato da Perl, Php, QBasic, VBA, etc.
Negli anni di linguaggi ne sono nati tantissimi, ognuno con le sue proprie caratteristiche.
Ecco ora un piccolissimo esempio di alcuni linguaggi, dove con queste poche riga di codice si fa comparire a video oppure si stampa la scitta "Hello World".
BASIC:
print "Hello World"
 
COBOL:
100000 PROCEDURE DIVISION.
100100
100200 MAIN-LOGIC SECTION.
100300 BEGIN.
100400     DISPLAY " " LINE 1 POSITION 1 ERASE EOS.
100500     DISPLAY "HELLO Jo, WORLD." LINE 15 POSITION 10.
100600     STOP RUN.
100700 MAIN-LOGIC-EXIT.
100800     EXIT.
 
VISUAL BASIC (testo in un main form):
[NOMEOGGETTO].text = "Hello World!"
 C++:
         #include <iostream> // per std::cout e std::endl
int main()
{
   std::cout << "Hello World!" << std::endl;
}
 
PERL:
#!/usr/bin/perl
print "Hello World";
 
JAVA:
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello world!");
    }
}
 
Generalmente, in informatica, per programma si intende un insieme di istruzioni (alogaritmo) scritto in un linguaggio adatto per un tipo di computer (CPU) e disponibile per una o più piattaforme operative (sistema operativo). Il programma scritto in linguaggio macchina (basso livello) è spesso identificato con un file eseguibile (*.EXE), mentre un programmo scritto in assembly o con linguaggi di programmazione ad alto livello, viene detto programma sorgente e ha bisogno di un "Compilatore" o di un "Interprete" (o di entrambi) per poter essere eseguito. Qualunque sia il linguaggio, il compilatore dovrebbe trasformare in modo univoco quel linguaggio in linguaggio macchina dando luogo ad un programma eseguibile. L’interprete, invece,  lo esegue e ne verifica passo passo l’andamento.
I programmi che noi siamo abituati ad usare, formano in generale il software, e sono formati da un certo numero di files.
Lo stesso sistema operativo (Dos, Windows, Linux, Mac OS, Unix, etc.) non è altro che un software di gestione del computer e del suo hardware, con un interfaccia grafica (GUI) che aiuta a interagire con l’hardware tramite varie funzioni che formano il cosidetto kernel.
Per questo motivo, oggi, un qualsiasi programma identificato con un applicazione è qualcosa di più di un semplice file eseguibile.
Programmi grandi hanno bisogno di norma una macchina virtuale che comprende l’hardware del computer con l’aggiunta di uno o più livelli di software che contribuiscono a creare l’ambiente di esecuzione adatto per il programma stesso, mentre al programma sono spesso aggiunte librerie di dati utili. Le librerie sono facili da identificare perché hanno la caratteristica estensione *.DLL ma, al di là del file eseguibile, ogni linguaggio può produrre una miriadi di diversi e specifici file con differenti e sconosciute estensioni. Ricorderete, infatti, che le tre lettere che formano l’estensione di un file, sono tipiche del programma che le ha generate e spesso identificano il file stesso. Così, ormai sappiamo che un file *.DOC è un file creato dal programma Word e identifica un file di testo mentre uno con estensione *.JPG è stato creato da un programma di grafica e identifica un immagine o foto.

Crackare un programma, vuol dire forzarlo per permetterne un uso illegale. Infatti con cracking si intende la modifica di un software per rimuovere la protezione dalla copia, oppure per ottenere accesso ad un’area altrimenti riservata.
Warez è un termine in gergo informatico che indica materiale, prevalentemente software, distribuito in violazione al copyright che lo ricopre, in quanto crackato.
Per fare questo, il cracker alla stessa stregua dell’hacker deve essere pratico di linguaggi e saper usare "Debugger" e Disassemblatori.
Debugger è un programma software specificatamente progettato per l’analisi e l’eliminazione dei bug (errori) presenti in altri programmi. Assieme al compilatore è fra i più importanti strumenti di sviluppo a disposizione di un programmatore.
Un disassemblatore o disassembler è un programma che traduce dal linguaggio macchina al linguaggio assembly. Esso effettua quindi l’operazione inversa di un assembler. Similmente, la decompilazione è il processo inverso della compilazione.
Attraverso un decompilatore si risale al codice sorgente di un software a partire dal suo eseguibile. Questo può essere utile per ritrovare del codice perso, o per correggere errori. Come detto, il codice sorgente generato dalla decompilazione è di alto livello (human-readable), mentre l’eseguibile è a basso livello (machine-readable).
Certi compilatori offuscano il codice, in modo da rendere più difficile la decompilazione e la reingegnerizzazione del software.
 
L’intervento termina qui.
Cosa vi aspettavate, di diventare hacker o cracker leggendo un semplice intervento su un blog?!
L’ho detto agli inzi che queste poche parole servivano solo a farvi capire cosa significa essere hacker/cracker e qual’è il punto di partenza.
Di più non posso. Se amate veramente computer, internet e software sta a voi ora mettervi in gioco e………. studiare.  

 
 
Questa voce è stata pubblicata in Computer e Internet. Contrassegna il permalink.

4 risposte a Hacker,cracker,hax0r, lamer, etc.

  1. Francesco ha detto:

    Antò ho capito la morale di questo breve ma significativo discorso e sono giunto a una conclusione…Ci perderò tempo anche se alla fine sarà tutto guadagnato.
     
    Ciao…

    Mi piace

  2. Francesco ha detto:

    Antò ho capito la morale di questo breve ma significativo discorso e sono giunto a una conclusione…Ci perderò tempo anche se alla fine sarà tutto guadagnato.
     
    Ciao…

    Mi piace

  3. Francesco ha detto:

    Antò ho capito la morale di questo breve ma significativo discorso e sono giunto a una conclusione…Ci perderò tempo anche se alla fine sarà tutto guadagnato.
     
    Ciao…

    Mi piace

  4. tony ha detto:

    Francé, non posso sapere con certezza a quale precisa conclusione sei arrivato, ma mi fà piacere sapere che hai capito la morale, anche se più che una morale, il mio discorso era solo informativo. Se con la frase "…sarà tutto guadagnato" vuoi dire che dopo aver studiato (tanto!) avrai imparato qualcosa che sarà o meno inerente la tua futura professione (lavoro), allora mi trovi daccordo e soddisfatto! 
    Mi raccomando…. passa parola….. 

    Mi piace

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...