L'Histoire des Pingouins

- Par Antoine Bellot -
Épisode XXXX
Visual Scheme.

Malgré la diversité apparente des amusements qui semblent m'attirer, ma vie n'a qu'un objet : elle est tendue tout entière vers l'accomplissement d'un grand dessein. J'écris l'histoire des Pingouins.

Anatole France : l'île des Pingouins

Le cri jovial du coucou découvrant la verte prairie fit sursauter Jean. Mais très vite, il constata qu'il était toujours dans la cave obscure de Basse Tille, endormi sur un tas de coussins. Tournant la tête, il identifia rapidement le sourire blagueur de Barney sur le terminal déporté qui dépassait de l'assemblage hétéroclite de matériel à même le sol. Chico avait dû apprendre de nouveaux tours aux assistants pendant la nuit.

« Lussa, Momo ! » fit Jean en direction de l'ectoplasme. Il était peu enclin à bavasser avant son café. Il était certainement à peine treize heures du matin. Il aurait pourtant espéré ne plus jamais avoir à se lever si tôt depuis son départ de la GigaDot Corp.

Ils avaient travaillé d'arrache-pied, dormant peu, fumant beaucoup. Sous la direction du petit homme, ils avaient convaincu Barney de s'instancier sur un châssis spécial, équipé d'un contrôleur supplémentaire permettant l'accès en lecture aux mémoires et bus de la carte mère indépendamment du processeur. Ce système fonctionnait en interceptant les communications sur les bus, les mettant en forme autant que possible à l'aide d'un hardware spécialisé, et les transférait par une jarretière de fibre optique vers un châssis d'analyse et de simulation d'exécution sur lequel le trio étudiait le fonctionnement de la créature. L'avantage de cette méthode était de pouvoir rejouer à l'infini certaines séquences de code machine, d'insérer des perturbations entre les différents états du programme et mesurer l'impact sur les modifications accomplies. Cette technique était utile pour vérifier des hypothèses sur un programme de très grosse taille difficile à analyser d'un seul coup. Car, bien qu'ils disposassent depuis longtemps d'un désassemblé, ils avaient été stupéfait de constater qu'à première vue, le comportement de Barney semblait non-reproductible.

« Ce machin tient compte des algorithmes de cache du processeur en interne et prédit ses performances dans tel ou tel type de situation » avait grommelé le petit homme. « Lorsqu'il exécute certaines fonctions, il mesure le temps d'accès aux données préchargées et change de comportement en fonction du résultat. Mais quel est le maboule qui a écrit un truc pareil ?! »

« C'est-à-dire ? » avait demandé benoîtement Jean.

Chico avait expliqué qu'en gros, cela pouvait dire que si le processeur trouvait pertinent de modifier le contenu du cache pendant le déroulement d'une fonction, lors d'une bascule entre processus ou lors de l'exécution de code privilégié par exemple, cela pouvait modifier le comportement de la fonction, car celle-ci n'accédait plus aux données qu'elle savait préchargées à la même vitesse. Cela voulait notamment dire que le code de Barney ne se comportait pas de la même manière s'il fonctionnait normalement ou en concurrence avec un débogueur, voire même dépendait intimement du processeur utilisé et de la charge qu'il parvenait à en accaparer. Mais bien sûr, cela n'était pas explicite dans le code.

« Tu vois, ici, par exemple » avait commenté le petit homme « Ce registre contient une approximation du temps absolu depuis lequel Barney a demandé à accéder à ce bloc de données. Et ça, c'est un jump qui dépend de cette valeur. On pourrait croire que c'est une manière particulièrement tordue de réaliser un aléatoire, mais je pense que le programmeur a délibéremment cherché à ne pas obtenir le même comportement en fonction de la vitesse à laquelle il accède à ses données, donc du nombre de programmes tournant en concurrence avec lui accédant au cache de second/troisième niveau. La pari est que s'il a précédemment demandé des données, elles sont probablement en cache, sauf si un autre programme tournant en concurrence accède également à d'importantes quantités de données (un débogueur, par exemple), le cache sera en partie vidé et la fonction en tiendra compte ». Il avait alors reprit « Et ici, et là, tu vois que Barney possède des informations sur l'architecture sur laquelle il fonctionne, ses performances, et que là, ceci est un haché cryptographique des valeurs qu'il a générées. »

« Un quoi ? »

« Une signature : tu prends le bloc de données et tu le passes à travers une moulinette retournant une valeur plus compacte qui permet de tester la cohérence ou l'authenticité du bloc. Les algos simples servent à faire de la correction d'erreur (les CRCs par exemple) et il est facile de les contourner. Mais là, il s'agit d'un hashé cryptographique, c'est à dire conçu pour être difficile à contourner. Si je modifie les données, je ne sais pas facilement comment modifier la signature (le haché) pour qu'un test de cohérence ne détecte pas la modification. Bien sûr, il suffit de retrouver où est cachée la clé ou l'algo... Mais on en est pas encore là. »

Jean avait alors compris ce qui tracassait et excitait à la fois son hôte. Le logiciel de Barney avait été conçu pour résister au désassemblage. Il avait entendu parler des virus polymorphes, c'est-à-dire (de ce qu'il en avait compris) de codes qui se répliquaient en s'encryptant de différentes manières. Ils stockaient la clé de décryptage au début du code, et se décryptaient en mémoire, au plus tard, en ne révélant les dernières instructions que très peu de temps avant de les exécuter. Les anti-virus contournaient cette méthode en simulant l'exécution de code dans un processeur logiciel simulant un processeur réel, révélant le code exécuté. Ça ressemblait un peu à ça, en plus sophistiqué, et surtout beaucoup plus gros.

« C'est peut-être pour ça que Barney et Igolio sont devenus furieux à Central. Ils ont du se rendre compte qu'ils tournaient dans une cage logicielle ? »

Le petit homme l'avait regardé, haussant un sourcil comme s'il était le dernier des abrutis, puis avait solennellement déclaré :

« C'est du code, fiston : des bits, des octets, de l'algèbre, et c'est tout. Le code, ça ne s'énerve pas. Ça ne fait que ce que c'est fait pour faire. Le reste, tu le gardes pour les X-Files, merci. Dans ce cas précis, nous avons affaire à une programmation particulièrement tordue qui masque un algo IA complexe, mais classique. Mais effectivement, tu as raison, ce code sait détecter la présence d'un débogueur et son comportement est alors altéré. Le fait qu'il dialogue verbalement avec l'utilisateur est certes un prodige, mais reste parfaitement compréhensible techniquement, surtout vu la quantité de données qu'il manipule. »

Il s'était alors replongé sur son écran quelques secondes, avant d'attirer à nouveau son attention.

« Regarde ici, par exemple. Barney accède à cette zone de mémoire. Apparemment, il s'imagine y trouver un nom de fichier codé en unicode pour y gerber le bilan de son dernier cycle d'activité. Mais il m'est presque impossible de savoir dans quelle portion du code supposée s'exécuter peu de temps avant a éventuellement écrit quelque chose ou protégé la zone, car on saute de bloc en bloc par algèbre de pointeurs prenant en compte une bonne dizaine de paramètres ! Tous les sauts et toutes les écritures sont allouées par des calculs internes. C'est insensé, et d'ailleurs, ça doit générer énormément d'erreurs. Mais tu vois, ici, là, et là, tu as des procédures de rattrapage aux branches en cas de faute. Mais avec le simulateur d'exécution, on doit pouvoir s'y retrouver. »

« Les effets de bord » avait murmuré Jean.

Le petit homme avait souri : « Oui, c'est ça. L'important dans ce code n'est pas le code, mais les effets de bord qu'il produit, les conséquences apparemment anodines et invisibles de tel ou tel appel, que la programmation classique, les langages de haut niveau, essaient généralement d'éradiquer. Pourtant, ils existent. Mais bon, qui utilise un profiler, de nos jours, hein ? »

Jean ne savait pas ce qu'était un profiler. Autant rester les pieds sur terre. « Et tu penses que tu vas y arriver quand même ? »

« Je ne crois pas que le tordu qui a écrit ça ait pu raisonner ainsi tout le temps. Il faudrait juste que je comprenne les techniques qu'il a utilisé. D'ailleurs, la majorité du code est tout à fait classique bien que compilée au plus compact. Tout ça, c'est de la poudre aux yeux, pour masquer le véritable algo... Il suffit juste de chercher assez longtemps. D'autre part, des pans entiers du code compilé sont directement intégrables dans un autre logiciel. Je vais reconstruire un code servant de support aux morceaux que j'arriverai à isoler de Barney. Lorsque ça fonctionnera, nous pourrons étudier les blocs un par un et voir ce qu'il en est. »

Il fit une pause, baissa la tête puis reprit, souriant.

« J'adorais ça, à l'époque : cracker des logiciels. C'est pareil : c'est juste beaucoup plus gros, plus moderne. À l'époque, on n'avait pas des processeurs qui permettaient de faire ce genre de choses. Il y a un peu de poudre aux yeux saupoudrée au-dessus d'un code classique. Par exemple, ça, c'est de le code de gestion d'une pile tout ce qu'il y a de plus classique, ici, un algorithme particulier d'allocation mémoire, qui ressemble d'ailleurs beaucoup au dlmalloc, (la variante du malloc des bibliothèques standard). Mais d'habitude, on délègue aux bibliothèques ce genre de fonctions. Ici, c'est en interne. Ça ne se fait que très rarement, parce que c'est inutilement compliqué, et que le code standard suffit, généralement. Si tu regardes le package Squid, par exemple, tu verras qu'ils proposent d'utiliser cette bibliothèque d'allocation un peu particulière. »

Jean eut alors l'impression qu'une idée lui traversait l'esprit. Il hésita un instant, puis, devant le regard interrogateur du petit homme, osa demander :

« Si la plupart du code dont a besoin Barney est interne, cela explique peut-être qu'il soit si facile de le faire tourner dans la machine virtuelle impériale ? Il est très peu dépendant de ce dont il dispose. Mais son comportement n'est alors plus exactement le même. »

Le petit homme avait hésité, semblant réfléchir.

« Oui, c'est certain. Remarque, si, comme tu le dis, il est conçu pour savoir se répliquer à travers le réseau par un mécanisme genre RPC, c'est probablement nécessaire pour limiter la casse entre les incompatibilités de bibliothèques homonymes mais exportant des interfaces de fonctions différentes d'une version à l'autre : le DL Hell, comme on dit, une grande spécialité de l'empire, reprise avec succès par les codeurs de la glibc, d'ailleurs. » ricana-t-il. « Mais mettre le code en interne reste une méthode porcine. »

« Pourquoi donc ? »

Il avait haussé les épaules.

« Une bibliothèque n'est chargée en mémoire qu'une fois quel que soit le nombre de programmes qui l'utilisent... Du moins sur les OS modernes. Chaque programme peut y accéder dans son propre espace d'adressage, mais physiquement, il s'agit d'une seule et unique zone de mémoire. C'est un des principaux intérêts des bibliothèques, bien plus que de fournir des interfaces de programmation conviviales. Barney est très lourd à cause de cela aussi : tout est interne ou presque. Une appli Gnome, par exemple, ça a l'air petit, comme ça, mais faut voir ce qui est chargé en mémoire ! Et c'est le même prix quel que soit le nombre d'applis qui l'utilisent ! Autre exemple, il existait des versions de Netscape pour Unix compilées statiquement avec Motif en interne : ça explique en partie que le binaire soit si gros quand on le charge. »

Jean se sentait impuissant. La grande expérience du petit homme mettait entre eux une distance phénoménale, rendait les discours de l'un presque incompréhensibles pour l'autre. Pourtant, il ne s'agissait que de savoir exact, de l'assimilation du passé, du vécu. Peut-être, dans quelques années, Jean comprendrait réellement tout cela. Du moins, il essaierait.

Mais il serait alors seul ou presque dans cet univers étrange de concepts complexes. Il n'y aurait personne d'autre avec qui parler, discuter de ce sujet si passionnant pour lui, mais hermétique pour ceux qui ne consacraient pas une part importante de leur vie à l'étudier. À part, peut-être, le réseau... Ou ce qu'il serait devenu d'ici là. Quelque chose avait résonné dans son esprit à cet instant.

Jean comprit alors pourquoi il se souvenait de ces instants avec tant d'acuité. Ziang avait parlé... De la dépendance entre l'homme et son milieu. L'Ether avait été en partie construit, en partie squatté par les passionnés d'informatique pour leur permettre de communiquer. Petit à petit, les impériaux s'y étaient intéressés, parce ce n'était apparemment pas cher, que ça marchait, et que le nombre d'utilisateurs en était sans cesse croissant. Les impériaux avaient reconstruit leur réseau sur l'Ether. Il devait être possible de faire de même.

Le Réseau de la Rébellion : quelques protocoles au-dessus de TCP/IP suffiraient. Il faudrait simplement qu'ils soient suffisamment adaptables pour suivre l'évolution qui viendrait, tôt ou tard, après IP. Il suffisait de savoir ce que l'on voulait, puis le programmer. Certains trouvaient depuis longtemps qu'UUCP, éventuellement rcs/cvs suffisait. D'autres auraient voulu des choses plus complexes, avec plus de fonctions, de Coda au monstrueux Plan 9 des Bell Labs, en passant par G.N.O.M.E., Freenet, ou InternetFS, mais ceci n'était qu'une question de design et de services offerts. Les assistants représentaient une pièce maîtresse du projet de réseau impérial. Le projet Pandora avait certainement à voir avec cela. Orcam n'avait certainement pas tout dit des débats qui agitaient la rébellion. Il se demanda si quelqu'un avait pensé à transporter les news par CVS, au moins en lecture.

Jean prit soudainement conscience du regard de Chico, qui avait levé la tête au-dessus du tas de matériel à même le sol qui le cachait presque entièrement.

« Ça va ? » demanda Chico.

« Ouais, je réfléchissais un peu. Quoi de neuf ? » Il passa sa main dans ses cheveux, puis s'étira, essayant de se donner une contenance.

« On a pas mal avancé cette nuit. Tu devrais venir voir ça. »

Jean regarda Barney sur l'écran déporté, qui restait étrangement muet. Cela ne lui ressemblait pas du tout. Mieux valait se lever et aller voir.

« Où est passé l'chevelu ? » demanda-t-il ironiquement, essayant de se donner quelque contenance.

« Il est allé chercher Dara. Elle arrive de Suisse avec un drôle de cadeau sous le bras : un casque à électrodes expérimental sorti d'un laboratoire de recherche italien. »

Jean assimila lentement la nouvelle, contournant lentement la pile de matériel et câbles emmêlés, ne sachant pas trop à quoi s'attendre.

« Nous avons assemblé une partie du code désassemblé de Barney avec un wrapper pour Xemacs. Pour l'instant, le résultat n'est pas extraordinaire, mais c'est un début. »

Sur l'écran de son châssis envahi par XEmacs, Jean voyait à côté d'une fenêtre dans laquelle un Barney songeur rangeait sa collection de vinyles, un petit trombone dansant en ASCII. Soudain, une voix nasillarde se fit entendre dans les haut-parleurs.

« Bonjour, ami Jean. Je m'appelle Gigolio et je suis ton meilleur ami ! Viens vite jouer avec moi à Stallman Office ! Tu connais, bien sûr, le système de buffers de Gnou Xemacs copyleft ? Laisse-moi t'initier aux opérations élémentaires d'enchaînement de macros. Bientôt, je te présenterai Skimmy, ton assistant de programmation personnel qui écrira du code LISP à ta place pour réaliser tous tes désirs : comptabilité, business plan, etc. »

Jean sentit comme un frisson glacé descendre le long de son dos. Chico haussa les épaules.

« Oui, bon, d'accord, on aurait pu travailler un peu plus le portage, mais bon, au moins ça marche, et ça, on sait à peu près comment. »

« Peut-être » reprit soudainement Barney sortant de sa torpeur. « Mais ça n'a rien à voir avec le véritable Barney, ton véritable meilleur ami, après moi, bien sûr. »

Chico baissa précipitamment le son, puis murmura dans ses lèvres :

« Barney n'a pas l'air d'avoir très bien supporté nos dernières manipulations. Il faudrait peut-être que tu lui parles un peu, j'ai peur qu'il nous pète une durite. »

Jean commençait à se demander qui avait vraiment besoin d'un psychiatre. Il se prit alors à se demander ce que penserait Schoelcher de tout cela.

« Non, mais sérieusement, vous voulez qu'on fasse quoi, au juste, avec cela ? » murmura à son tour Jean.

« Ha, ça, je ne sais pas... je croyais que tu avais un plan pour après ? » répondit Chico.

Jean sentit ses épaules fléchir sous le poids qui venait de lui tomber dessus.


Épisode précédent
Épisode suivant


Fiche mise à jour le samedi 21 mai 2005.
Thomas Nemeth
back
Script (version 2.9.9-r9) fait en août 2000