Cracking.doc

(6928 KB) Pobierz
Flavio Bernardotti – Via Trento, 10 – 15040 Montecastello (Al

Flavio Bernardotti – Via Trento, 10 – 15040 Montecastello (Al.) Tel. 0347 5610956

 

 

 

 

 

 

 

 

 

 

Tecniche, programmi e conoscenze per il cracking dei programmi.

Teoria dell’assembler.

Teoria dei debuggers, disassemblatori ecc.

Teoria del software in rete.

Teoria activeX e librerie.

Interrupts.

Funzioni API di Windows.

 

 

 



 

 

 

 

QUESTO VOLUME NON VIOLA NESSUNA LEGGE NEPPURE MORALE.

 

“Questo volume, al contrario di quanto farebbe pensare il titolo, non viola nessuna legge in quanto non fa riferimento a nessun programma in modo specifico. I programmi ad esempio sono stati camuffati ed è impossibile risalire all’origine. Le tabelle e gli scritti riportati sono espressamente di pubblico dominio o anonimi. In ogni caso sono riprodotti nella loro forma originale compresa la lingua.”

 

1999 F.Bernardotti  -   flavio@bernardotti.al.it   -  www.bernardotti.al.it


INTRODUZIONE

 

 

A 14 anni di distanza ecco quanto avevo promesso sul mio volume di programmazione in C a basso livello datato 1986.

Ho ricevuto per anni telefonate dalle persone che lo avevano letto le quali mi chiedevano a che punto era quanto avevo promesso nelle ultime pagine.

A dire il vero nel frattempo ho scritto altri volumi sulla programmazione in C in ambiente Unix, sulla programmazione in Java ma è inutile ... il volume che aveva colpito era quello destinato agli smanettoni del basso livello.

Ok.

Non è propriamente la continuazione di quello, in quanto a quei tempi il volume trattava le tecniche di scrittura dei TSR in C ma ora sotto Windows 2000 di TSR se ne parla ben poco.

In compenso il basso livello, più basso di cosi si muore, rinasce nel mondo dei crackers (non della Pavesi) i quali seguono le trame ingarbugliate dei software per autofinanziarsi irraggiungibili, in altro modo, librerie e software vari.

Un buon sistema di sviluppo costa svariati milioni.

3.000.000 circa per Developper Studio Enterprise.

800.000 per la libreria che gestisce lo strato database ecc.

900.000 per quella che gestisce le list box.

E chi sviluppa in Java o C++ sicuramente ha anche bisogno di un editor html da L. 1.000.000 ecc.

E  disegni legati alla grafica dove li mettiamo ?

Altri 800.000 per un Firework.

Gli studenti e tutti coloro che non possono passare sotto il budget dell’azienda il costo del software sarebbero destinati a guardare.

Ed invece no !

La tecnica dell’autofinanziamento funziona.

Grazie a Internet ci sono migliaia di software limitati a 60 giorni o similia che sono li pronti ad accettare la sfida del crackatore folle.

Colui che produce software compra i pacchetti originali perchè è impensabile distribuire un prodotto creato con software crackati.

Chi grida all’ingiustizia  per il fatto che qualche smanettone si autofornisce di software perchè non grida all’ingiustizia quando invece si spende dei milioni per trovarsi nelle mani dei software scritti da cani e destinati a cani ?

Io personalmente ho reso ricche software house americane e Federal Express comprando centinaia e centinaia di software con il solo scopo di provarli.

Un’altra cosa che spero vivamente è che il testo non vi aiuti ulteriormente a rendervi più strani, anche perché papà e mamma sono già abbastanza perplessi oggi come oggi senza che dobbiate peggiorare ulteriormente !! (Scherzo!!)

Il consiglio migliore che vi posso dare è comunque quello di mantenere un briciolo di umiltà pensando che spesso dalla parte delle protezioni esistono professionisti veramente bravi.

Questo non significa che alcuni programmi non si possono sbloccare ma solo che bisogna sempre valutare se il tempo perso vale il gioco.

Sicuramente poterete fare di qualsiasi caso una sfida e se le cose stanno così non c’è da fare neppure un'altra parola.

Se invece per sproteggere un formattatore di sorgenti C ci vuole un mese, forse è meglio che lasciate perdere e il tempo lo impiegate a riscriverlo per vostro conto.

Nel 1981 iniziai a lavorare vicino a sistemi che a quei tempi possedevano le dimensioni di una stanza.

Fare il consulente in informatica significava dover affrontare progetti legati ai settori più disparati ovvero quelli per cui i clienti ti contattavano.

Se arrivava la Fiat e necessitava del programma di controllo della qualità dovevi affermare in partenza di conoscere l’argomento e successivamente dovevi sudare sette camicie per farti una cultura sufficiente a poter risolvere il problema.

Appunto per fare questo bisognava avere il software giusto al momento giusto ed è questo il motivo delle centinaia di acquisti.

Quanti pacchi ma PACCHI in maiuscolo mi sono preso !

Allora li cosa si doveva fare ?

Milioni spesi per software che se fossero stati distribuiti gratis ci si sarebbe dovuti incazzare per aver speso 900 L per ogni floppy di supporto.

Comunque la logica di anni fa è la stessa che ho oggi.

Questo volume vuole distribuire informazioni e non software crackati.

Reperire le informazioni, anni fa, era importantissimo anche perchè verso la metà degli anni 80 i volumi erano rarissimi.

Da qui mi venne l’idea di creare un qualche cosa che potesse permettere a persone con interessi comuni di dialogare e quindi di scambiarsi le esperienze.

Per questo  nacque l’idea di fondare con alcuni altri la rete FidoNet italiana.

Per circa 8 anni sono stato il secondo nodo italiano dopo quello di Giorgio Rutigliano di Potenza.

Era il 1985 e la telematica viaggiava con i suoi 300 bauds proprio all’inizio del suo cammino.

La stampa ci prese come un fatto innovativo.

In Italia non esistevano ancora sistemi telematici pubblici e gratuiti come invece in America era tempo che c’erano.

E come tutte le cose nuove venne vista anche con delle ottiche sbagliate ovvero per  anni ci fu imputato di essere un covo di hackers.

Chiaramente la rete supportava la messaggistica per cui non si poteva negare che poteva essere anche usata per scambiare passwords di sistemi privati.

Non era comunque possibile eliminare il problema perchè non era possibile leggere tutti i messaggi che circolavano sulla rete stessa.

Chiaramente poi chi violava i sistemi informatici possedeva un modem e quindi utilizzava anche le BBS.

Per stare sulla rete scrissi i programmi in C denominati ITALINK (1986) che gestivano tutte le sezioni classiche di una BBS FidoNet ed in più disponevano di una sezione per le interrogazioni su basi dati.

In tutti questi anni venni a conoscenza di quella che era la realtà hacker anche se la mia visione non è quella negativa posseduta da molti anzi ....

Per me l’ hacker era una persona che doveva disporre di conoscenze informatiche molto maggiori della media ed era anche logico in quanto per poter trovare i buchi dei sistemi bisognava conoscerli molto bene.

Nel 1987 partecipai anche ad una seconda rete nata in quel periodo che si supportava sul sistema di Unix UUCP.

Al giorno d’oggi con le logiche Windows per settare una rete premi due tasti e scrivi due numeri.

Settare UUCP era invece una cosa da pazzi.

Decine e decine di file con dati incrociati tra loro con centinaia di informazioni da settare.

Il file xxx conteneva i dati dei modem il cui numero doveva essere riportato nel file yyy il quale conteneva la velocità che doveva essere specificata nel file zzz e così via.

Molti crack ai sistemi furono fatti usando i bugs del sistema uucp.

In pratica conoscendo il mailer di UUCP veniva spedito un messaggio con il sorgente del file usato per creare la door il quale, una volta giunto, usando l’esecutore sempre di UUCP  veniva compilato ed eseguito.

E questo era solo un esempio di fatti che comunque denotavano conoscenze molto profonde dei sistemi.

Diciamo che in ogni caso tutte le tecniche di hackeraggio sono quasi sempre basate sull’inesperienza di alcuni sistemisti.

Molti buchi sono accentuati dal fatto che molti sistemisti usano il loro accesso come root per attivare procedure atte a gestire funzioni pubbliche.

Per essere più chiari possiamo portare l’esempio dei server WEB dove i programmi di gestione HTTP vengono lanciati come processi di proprietà root.

In questo caso mediante alcuni cavalli di troia ed altre tecniche basate su problemi di FTP e del gestore delle EMAIL è possibile creare  accessi non autorizzati ai sistemi.

Una delle fasi fondamentali dell’hackeraggio sta’ nella capacità di eliminare tutte le tracce di accesso al sistema.

Dopo essere entrati in sistemi Unix dovrà essere cura dell’hacker quella di cancellare i file WTMP ecc. ed in particolare modo non dovranno essere usate certe procedure adatte ad uscire dal sistema hackerato.

Comunque se il super user del sistema non analizza i files di log allora non esiste nessun problema anche nel caso in cui l’hacker non faccia sparire le tracce.

Il volume di intitola hacker and cracker in quanto sono due cose differenti.

Hacker significa accedere ai sistemi remoti senza<a disporre delle autorizzazioni necessarie.

Cracker significa eliminare le protezioni e le limitazioni dei programmi commerciali distribuiti.

In ogni caso bisogna sottolineare la differenza tra hacker e imbecilli.

Il vero hacker utilizza le tecniche studiate per giungere ai suoi fini solo per aumentare il suo bagaglio culturale ed in ogni caso non per recare danni ai sistemi attaccati.

Molti hacker corretti, ovvero quelli che si attengono alla vera filosofia, spesso lasciano messaggi al sistemista avvisandolo dei buchi del suo sistema aiutandolo ad eliminarli.

Cancellare files o fare danni in generale significa solo aumentare il proprio bagaglio di demenzalità.

Quando una persona dispone di un aggressività accentuata significa che psicologicamente ha dei problemi anche perchè una persona equilibrata con se stesso non dispone di quel senso che lo fa sentire grande solo quando attacca il suo prossimo.

Usate le vostre capacità per aiutare gli altri.

Se fate cracking su qualche programma non divulgatelo in formato sprotetto in quanto fareste un danno alla casa che lo ha prodotto.

Rivoltate sempre su di voi quello che state compiendo e siate corretti a pensare se quello che state facendo vi farebbe piacere se fosse fatto a voi.

In caso negativo non fatelo in quanto certe cose aiutano solo a far salire i prezzi del software e a rompere le scatole a persone che hanno famiglie da mantenere.

Siate sempre modesti e non pensate che mettere su Internet un software con la scritta cracked by ... vi possa eleggere a ricercatori del MIT.

Ho conosciuto tanti programmatori ed analisti con sensi di superiorità pazzeschi.

In genere erano “bufaloni” che pensavano che dopo aver trovato con il debugger le parole segrete per diventare invincibili a DOOM possedevano le stesse capacità dei progettisti che hanno messo al mondo Java o similia.

Considerarvi mediocri vi permetterà di evolvervi ed in particolare modo riconoscere le infinite maggiori capacità di alcuni vi permetterà di avere dei modelli a cui ispirarsi e da raggiungere.

Io personalmente ho sempre avuto Marvin Minsky (padre dell’ AI) e K & R (i padri del Linguaggio C) come miti e traguardi (per me irraggiungibili).

Considerate sempre la comunicazione tra persone con gli stessi interessi.

Questo è il metodo migliore per evolversi.

Si dice che l’uomo è l’animale più intelligente proprio perchè ha inventato il linguaggio al fine di comunicare agli altri della specie le proprie esperienze.

Dato che fare cracking o hacking su sistemi o su programmi significa sfruttare la propria intelligenza in questo volume verranno mostrate le tecniche usate ma non verrà fatto riferimento a nessun prodotto specifico.

Non verranno neppure comunicati numeri di serie e neppure passwords per accedere a sistemi remoti.

Se vi interessano soltanto quelle è meglio che le ricerchiate tramite messaggi su Internet.

Nel volume troverete nozioni teoriche legate all’uso di certi linguaggi (Assembler e C), a certi softwares quali disassemblatori e debugger, a nozionismi di rete ed ai metodi per utilizzarle tramite JAVA.

Diciamo che il volume vi indirizzerà verso il metodo migliore per passare le notti insonni.

Come vedremo per crackare i programmi si devono possedere conoscenze che spaziano in molti settori e sicuramente nei più complessi.

Questo volume vuole servire a darvi un’infarinatura d’alcune teorie e comunque vi servirà a passare di livello.

Benvenuti nel mondo del cracking “fai da te”.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Se il volume vi è piaciuto potete richiedere l’abbonamento agli altri volumi sempre scritti dal sottoscritto.

L’abbonamento vi costa L. 30.000.

Appena ricevute vi verrà inviato immediatamente un altro volume di 200 pagine sulla programmazione avanzata in Java.

 

 

 

BERNARDOTTI FLAVIO

VIA TRENTO, 10

15040 MONTECASTELLO (AL)

Tel. 0347 5610956


CONOSCENZE TEORICHE E PRATICHE

 

 

Un famoso detto afferma che “tutte le strade portano a Roma”.

Informaticamente parlando potremmo trasformare il tutto in “tutti i linguaggi portano all’ Assembler”.

Un ambito traguardo dell’ informatica e’ sempre stato quello di creare un linguaggio simile a quello naturale che permettesse di indicare ai computers le funzioni da svolgere parlandogli semplicemente insieme ed utilizzando per la creazione delle frasi la stessa sintassi e semantica della nostra lingua.

Il software necessario a svolgere un compito di questo tipo sarebbe stato una cosa talmente complessa e grossa che la velocità d’esecuzione dei programmi sarebbe stata impossibile.

Filosoficamente mi viene il dubbio che se si fosse giunti ad un punto simile l’uomo sarebbe diventato un deficiente a causa dell’assopimento mentale che ci sarebbe stato conseguenza a questo fatidico linguaggio.

Oggi l’uomo conquista i suoi obbiettivi massacrandosi i dieci miliardi di neuroni che ha “n’ta capa”.

Comunque non è questo luogo per fare discorsi di questo tipo.

Fortunatamente l’uomo mangia pane e pasticci per cui utilizza la sua intelligenza per crearsene ogni giorno di nuovi e più complessi.

Più diventa complesso il problema dell’interpretazione del linguaggio più diventa grosso ed impacciato il software dell’interprete o del compilatore.

Purtroppo l’elettronica è sorda o perlomeno capisce solo una sottospecie di codice morse che è il linguaggio binario.

Questo concetto è facile da comprendere visto che elettricamente lo stato logico 0 (zero) può essere rappresentato da una mancanza di segnale mentre lo stato logico 1(uno) da quello in cui il segnale è presente.

Erroneamente negli anni si è sempre considerata l’ informatica come la scienza dei computers.

L’ informatica, come dice il nome, è l’arte di analizzare il mondo intorno a noi (informazioni) ricavandone i modelli matematici composti da dati descrittivi, quantitativi e qualitativi, e da istruzioni indirizzate a manipolarli.

L’arte della programmazione nasce sempre dall’analisi dei sistemi reali.

In altre parole i sistemi vengono osservati ricavandone i dati disponibili.

Dopo averli scorporati si arriva alla fase della creazione degli algoritmi ovvero delle sequenze di operazioni che devono essere applicate ai dati per raggiungere una certa finalità.

Dalla nascita della scienza informatica i sistemi analizzati sono diventati sempre più complessi e quindi le metodologie analitiche hanno dovuto adattarsi alle sempre maggiori complicazioni concettuali.

Anche i linguaggi di programmazione,  che altro non sono che i sistemi per creare i modelli eseguibili su computers, hanno dovuto adeguarsi ai cambiamenti.

Prendiamo ad esempio i linguaggi a partire dal periodo commerciale dell’informatica tralasciando la preistoria legata all’informatica eseguita su sistemi da centri di calcolo.

Il tipo d’informatica che ho appena definito parte dal 1981 anno in cui l’ IBM ha commercializzato il primo personal ovvero il PC con processore 8088 a 4.77mhz con la stupefacente quantità di memoria di 64Kbytes (non dimentichiamoci del floppy a 360 Kbytes).

Il basic era residente su ROM anche se era possibile caricarne una versione più evoluta da floppy.

Il GwBasic sembrò una cosa terrificante a confronto del Basic dato con PcDos.

N. Wirth fondatore della Borland fece la sua fortuna con il Turbo Pascal un compilatore extra veloce che stava in 64 Kbytes di disco.

La nascita della programmazione strutturata fu appunto sancita dal Turbo Pascal e dal C.

I primi esempi di programmazione object oriented furono legate all’ Eiffel fino a giungere allo Smalltalk e al C++.

Comunque tutti i sistemi alla fine dovevano essere tradotti in Assembler per poter essere eseguiti.

L’evoluzione dell’hardware portò anche all’espansione dell’Assembler dei sistemi.

Pensate che i primi processori disponevano come istruzioni solo della somma e della sottrazione per cui moltiplicazione e divisione dovevano essere eseguite grazie a sequenze di queste due e oggetti come lo stack erano inseriti, fissi, dentro ai processori stessi.

La difficile vita dell’ Hacker e’ legata a questo linguaggio anche se la conoscenza di altri linguaggi facilita il tutto in quanto la traduzione in Assembler mantiene sempre una certa forma legata al compilatore che l’ha generata.

Spesso è possibile sfruttare il compilatore per generare programmi in Assembler ed in particolare questa tecnica, che ora vedremo, è utile per togliersi dei dubbi.

Che significa togliersi dei dubbi ?

Spesso debuggando certi programmi, derivati da linguaggi ad alto livello, non si riesce a capire quali costrutti del linguaggio originale hanno originato quelle linee Assembler.

Il compilatore Visual C (il compilatore Microsoft C) ha sempre posseduto un flag che permette di generare il file in MACRO ASSEMBLER del programma in C analizzato.

Prendiamo il seguente programma, che esegue la copia di un array di 10 elementi dentro ad un altro, come esempio :

 

struct X {

              int a[10];

};

 

int              array_uno[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };

int              array_due[10];

 

void              copy_array(void)

{

              (*((struct X *)&array_due[0])) = (*((struct X *)&array_uno[0]));

}

 

Dando al compilatore il comando :

 

cl /c /Fatest.asm test.c

 

(/c = non eseguire il link /Fanome.asm = genera asm)

Ed ecco come è stato tradotto :

 

              TITLE              text.c

              .386P

include listing.inc

if @Version gt 510

.model FLAT

else

_TEXT              SEGMENT PARA USE32 PUBLIC 'CODE'

_TEXT              ENDS

_DATA              SEGMENT DWORD USE32 PUBLIC 'DATA'

_DATA              ENDS

CONST...

Zgłoś jeśli naruszono regulamin