Enoncé : "We're born alone, we live alone, we die alone. Only through our love and friendship can we create the illusion for the moment that we're not alone." (Orson Orwell) Cells cells cells, the basis of life. Don't let them die and tell us their secret. Score 150 Link http://static.challs.nuitduhack.com/GOL.tar.gz L'archive contient un cipher.txt illisible, et un script Python suivant : #!/usr/bin/python #-*- coding:utf-8 -*- import hashlib, sys, itertools def creerGrille(): result=[] for lignes in range(8): ligne=[] for colonne in range(8): ligne.append(0) result.append(ligne) return result def genKey(key): psk=hashlib.sha256(key) buff="" seed="" for char in psk.hexdigest(): buff+=bin(ord(char))[2:] for c in buff: seed+=c return seed def initGrille(grille,seed): for (i, j), c in itertools.izip(itertools.product(xrange(len(grille)), reversed(xrange(len(grille[0])))), seed): grille[i][j] = c return grille def tourSuivant(grille): tabbuff=[[0]*8 for _ in range(8)] for j in range(8): for i in range(8): voisine=0 if grille[(j-1%8)][(i-1)%8] != '0': voisine+=1 if grille[(j-1)%8][i] != '0': voisine+=1 if grille[(j-1)%8][(i+1)%8] != '0': voisine+=1 if grille[j][(i-1)%8] != '0': voisine+=1 if grille[j][(i+1)%8] != '0': voisine+=1 if grille[(j+1)%8][(i-1)%8] != '0': voisine+=1 if grille[(j+1)%8][i] != '0': voisine+=1 if grille[(j+1)%8][(i+1)%8] != '0': voisine+=1 tabbuff[j][i]=voisine for j in range(8): for i in range(8): if tabbuff[j][i]==3 and grille[j][i]== '0': grille[j][i]='1' elif tabbuff[j][i] < 2 or tabbuff[j][i] > 3: grille[j][i]='0' return grille def genBitstream(grille,key): bitstream='' for j in range(8): bitstream+=grille[j][7] return bitstream def xor(ent1,ent2): key=itertools.cycle(ent2) return ''.join(chr(ord(x) ^ ord(y)) for (x,y) in itertools.izip(ent1, key)) def wrapper(): key=sys.argv[1] fichier=open(sys.argv[2],'rb') encfile='' bitstream='' grille=initGrille(creerGrille(),genKey(key)) for i in fichier.readlines(): bitstream=genBitstream(grille,key) encfile+=xor(i,bitstream) tourSuivant(grille) print encfile wrapper() La "clé" est attendue en premier argument, un fichier est attendu en 2ème argument. Après lecture du source, on se rend compte que le fichier est XORé grâce à un bitstream déduit à partir de la clé. Il faut noter que ce bitstream n'utilise **pas** la clé à chaque tour de boucle, contrairement à ce que la fonction ''genBitstream'' laisse supposer, elle est utilisée uniquement pour la génération de la grille de départ du Game of Life. On essaye donc de rentrer une clé vide, en espérant que la génération de la grille sera à peu près similaire à celle qui a été utilisée pour chiffrer le fichier, pour que cela n'impacte pas beaucoup le déchiffrement du fichier : spl3en@box:~/Bureau/crypto/liv_GOL$ python jdlv.py "" cipher.txt ;::::::;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::!! ! !! ! !! ! Md maoifdrte eu usacetr Autdur : lolbredudr`gon Zhne ;!Sagale!"2 (Tsacetr =!prauiqu`nt eu P`rkotr) Dequir la ouiu des!telps, m'hnmme ` tnujouss woulu!se!dép`ssdr et!terter res lhmitds. M'éwoluuion!est!une!amèliosatinn pdrmaoentd de!nos!cap`cit©s piysipues!et lent`les/ Dequis!toukourr l'iommd a woult exqlordr ld moode daor lequem!il vit/!Nous awnns vu m&appariuhon de m` roue pti a peslis à l'inmme de!re dépm`cer pltr facildlent, im!a apprhr à nafdr, à o`viguer/ C'drt `insh- qt'auknure'huh- l` pltqaru der!tesres!ee ootrd!moode not ©tè eyqmoréer/!Duranu!bette q¨riode!e&explos`uion, m`!socièu© a emmd aussh ©voltéd. Peuit!à pdtiu notse rociètè nour a!imporé!des sèfles dt ees lnis/ Ontrd!licdrt¨ dd!motwemdot du nnure!eérhr e&avdotusd sd!soou r¨duhu coorhd©racmdmdnt.!Ontse erqsiu aurrh r'esu!iacitu¨!á suhwse!ces!mnir et!ed ce f`iu 90% eer persnnoes suhvdnt ce!qt'on ldus dictdnu mêmd ri ellds!n’eo not!qas bnnrbienbd.!Ma vhmld!danr!l`puelmd 3.3 ddr itmaior whvroou do 2001 esu souvenu subie qar ses iabitantr. La vimle, la qlupart ees gens!pensent la!bnnnaîusd. Il r&dn serwdot pous!uravaimmdr, almds flâods dans!mds bnuthques- tsaîndr eans mes!bars!../ Mair l&esseoce!mêmd dd la wilme, snn £me-!sa!qerrnnn`mit¨, qdu ed gdos do oou cnoschdncd/ Ldr rtds b`namhseou ldr personnds. Les rignalis`tions eu les paoneaux nnus dictdnt incoosciemmeot ou bonsciemlent notse chemio. L'urb`nisme sdrt un afencemenu savant!de la vhlle à des strictes fins d'utilité sociale. De ce fait des résistances se déploient, certaines concernent de nouveaux modes de penser l'architecture et l'urbanisme, d'autres la manière même d'y habiter et de s'y déplacer. Qui n'a pas eu envie à un moment ou l'autre de braver ces interdits et d'aller là où bon lui semble. Peu de gens prennent l'initiative de redécouvrir ou d'utiliser la ville autrement. Deux raisons majeures à cela, soit ils n'en ont pas le temps, soit ils n'en voit pas l'intérêt. Qu'est ce qu'un traceur me direz-vous ? Quel est son but ? Que recherche-t-il ? Un traceur est avant tout une personne qui refuse qu'on lui dicte où aller. Il se sert de la ville pour se déplacer autrement, prenant appui sur les murs, les bâtiments, les cloisons, les garde-fous, les rambardes, sur tout ce qui fait obstacle au mouvement, pour se projeter dans les airs en inventant des sauts et des figures. Il créé des instants de liberté en volant ou grimpant sur les obstacles quand d'autres les contournent. Il veut une totale liberté de mouvement. Face à un mur, la plupart des gens le contourne. Le traceur, lui, passe par dessus. S'il se trouve devant une barrière il essaye de la franchir le plus rapidement possible. Le traceur utilise les obstacles du mobilier urbain pour se déplacer. Son but est multiple : Il cherche à se connaître. Connaître ses limites, connaître ses capacités. Le traceur est une espèce à part qui cherche à repousser ses limites tout en les connaissant. Il n’y a pas de compétition sportive entre pratiquant mais une compétition avec soi-même. Devant un saut on est tout seul. Si on ne maîtrise pas la technique et que l’on souhaite épater la galerie, on est seul face à ses blessures. L’essence même du vrai traceur, c’est la pratique pour soi et non pour les autres. On cherche à s’améliorer intérieurement. A renforcer notre esprit. C’est pourquoi la préparation mentale est aussi importante que la préparation physique. Le mental joue énormément sur le physique et la confiance en soi. Peu de personnes en ont parfaitement conscience. Les difficultés rencontrées en Parkour nous servent dans la vie courante. Nous sommes plus fort mentalement face à des problèmes qui autrefois nous auraient paru impossibles à régler. La traceur cherche aussi à connaître. La ville est un formidable terrain de jeu et d’aventure construit au fil des ans par les architectes et les bâtisseurs. En connaître les moindres recoins est grisant. On n’imagine pas toutes les rencontres que l’on peut faire et tout ce que l’on peut trouver sur les toits des immeubles et dans les souterrains. Perché sur les hauteurs de la ville, le traceur observe la vie dans toutes ses nuances. A force de pratiquer, l’esprit se développe et le traceur voit la ville différemment. De pratique sportive on passe à un art de vivre à part entière. Le traceur mange Parkour, vit Parkour, dors Parkour. Il voit en permanence de nouvelles possibilités de sauts quand la plupart des habitants ne voient qu’un simple mur ou une simple bouche de sortie de métro. L’imagination s’intensifie et on se laisse aller à rêver de sauts inimaginables. On est en quête constante de nouveaux endroits à découvrir et de nouvelles techniques à essayer. Avec le temps, les habitués repèrent rapidement les traces de passage d’un autre traceur. Une trace de semelle sur un mur, une branche d’arbre usée par endroit etc. Le traceur est en perpétuelle évolution. Il cherche à sauter toujours plus haut toujours plus loin. Une fois les techniques de bases apprises, il ne lui reste plus qu’à les maîtriser parfaitement. Passe-muraille, tic-tac, saut de chat, saut de bras font partie du vocabulaire des traceurs. Pour le commun des mortels cela ne veut rien dire... Nous sommes des milliers de part le monde à pratiquer cette activité comme un sport ou un art de vivre. Depuis sa création le Parkour à vu naître plusieurs mouvements. Les pratiquants du Parkour originel et ceux qui mélangent les acrobaties avec les techniques propre au Parkour. Certains ont vu dans ce nouveau mouvement un formidable moyen d’engendrer des revenus. Nous avons vu apparaître des conflits entre pratiquants. Des débats s’organisent sur la médiatisation et la récupération de ce nouveau sport par les publicitaires et le rouleau compresseur capitaliste. Des associations sportives pour promouvoir ce nouveau sport commence à apparaître. D’ailleurs qu’en est-il vraiment. Le Parkour est-il un sport et/ou un art de vivre ? A chacun de définir « son » Parkour et sa voie. Mais sachez une chose, il y aura toujours quelqu’un pour faire différemment de vous. Arrêtez de vous chamailler et de débattre sur un sujet qui ne finira sans doute jamais. Si vous vous dites traceurs dans l’âme, allez donc vous entraînez. Je suis un traceur de part mon goût pour l’exploration et l’envie d’évoluer mentalement et physiquement. Je suis un traceur de part ma façon de vivre ma ville. Je serez toujours un traceur quoiqu’il arrive. A bientôt peut-être sur un toit ou dans une autre vie. Flag : ToBeAndToLast Le début du fichier illisible, mais très rapidement, l'état du Game of Life se stabilise dans un état similaire à celui qui à chiffré le texte. Par "chance", le flag est à la fin du texte : ''Flag : ToBeAndToLast''