Contre-ingénierie de guerre

Parfois, vous ne possédez pas le code source et devez désosser un programme ou une boîte noire. Des histoires de guerre amusantes?

Voici l’une des miennes:

Il y a quelques années, je devais réécrire un pilote de périphérique pour lequel je n’avais pas de code source. Le pilote de l’appareil fonctionnait sur un ancien micro-ordinateur CP / M et pilotait une machine de photocomposition dédiée via un port série. Presque aucune documentation pour la machine de photocomposition n’était à ma disposition.

J’ai finalement piraté un moniteur de port série sur un PC DOS qui imitait les réponses de la machine de photocomposition. J’ai câblé le PC DOS sur la machine CP / M et commencé à consigner les données sortant du pilote de périphérique lorsque je transmettais des données via la machine CP / M. Cela m’a permis de déterminer le protocole de transfert et le codage utilisés par le pilote de périphérique et de recréer un équivalent pour une machine DOS.

    Lisez l’histoire de FCopy pour le C-64 ici:

    Dans les années 80, le Commodore C-64 disposait d’un lecteur de disquette intelligent, le 1541, soit une unité externe dotée de son propre processeur et de tout.

    Le C-64 enverrait des commandes au lecteur, qui les exécuterait à son tour, en lisant des fichiers, puis en envoyant les données au C-64, sur un câble série propriétaire.

    Le manuel du 1541 mentionnait, outre les commandes de lecture et d’écriture de fichiers, que l’on pouvait lire et écrire dans son espace mémoire interne. Plus excitant encore, on pouvait télécharger le code 6502 dans la mémoire du lecteur et le faire exécuter.

    Cela m’a rendu accro et je voulais jouer avec ça – exécuter du code sur le disque. Bien sûr, il n’y avait pas de documentation sur le code qui pouvait être exécuté là-bas et sur les fonctions qu’il pouvait utiliser.

    Un de mes amis avait écrit un démonteur en BASIC. et donc j’ai lu tout son contenu de ROM, qui était de 16 Ko de code CPU 6502, et j’ai essayé de comprendre ce qu’il faisait. Le système d’exploitation sur le disque dur était assez impressionnant et avancé, il comportait une sorte de gestion des tâches, avec des commandes envoyées de l’unité de communication au gestionnaire de tâches du disque dur.

    J’ai appris assez pour comprendre comment utiliser les commandes d’E / S sur disque pour lire / écrire des secteurs du disque. En fait, avoir lu le livre DOS 3.3 d’Apple, qui expliquait en détail tous les aspects de son format de disque et de ses algos, était d’une grande aide pour tout comprendre.

    (J’ai appris plus tard que j’aurais également pu trouver des informations sur les lecteurs de disque 4032/4016 pour les modèles Commodore «professionnels», qui fonctionnaient à peu près comme les modèles 1541, mais qui n’étaient pas disponibles pour moi. programmeur passe-temps plutôt déconnecté à cette époque.)

    Plus important encore, j’ai aussi appris comment fonctionnaient les communications en série. Je me suis rendu compte que les communications en série, utilisant 4 lignes, deux pour les données, deux pour la prise de contact, étaient programmées de manière très inefficace, le tout dans un logiciel (bien fait, en utilisant un handshaking en série classique).

    Ainsi, j’ai réussi à écrire une routine de communications beaucoup plus rapide, où j’ai fait des hypothèses de synchronisation fixes, en utilisant à la fois les données et la ligne de négociation pour la transmission des données.

    Je pouvais maintenant lire et écrire des secteurs et transmettre des données plus rapidement que jamais auparavant.

    Bien sûr, cela aurait été bien si on pouvait simplement charger du code dans le lecteur pour accélérer les communications, puis utiliser les commandes normales pour lire un fichier, qui à son tour utiliserait les communications plus rapides. Ce n’était pas possible, cependant, car le système d’exploitation sur le lecteur ne fournissait aucun crochet pour cela (notez que tout le système d’exploitation était en ROM, non modifiable).

    Par conséquent, je me demandais comment je pouvais transformer mes résultats passionnants en une application utile.

    Ayant déjà été programmeur pendant un certain temps, la perte de données en permanence (les cassettes de musique et les disquettes n’étaient pas très fiables à l’époque), j’ai pensé: Backup!

    J’ai donc écrit un programme de sauvegarde qui pouvait dupliquer une disquette en une vitesse jamais vue auparavant: la première version copiait un disque entier de 170 Ko en seulement 8 minutes (oui, minutes), la deuxième en environ 4,5 minutes. Alors que les applications avant la mienne ont pris plus de 25 minutes. (Rappelez-vous, Apple] [, qui avait son système d’exploitation fonctionnant directement sur Apple, avec un access rapide aux données en parallèle, a fait tout cela en une minute environ.

    Et c’est ainsi qu’est né le C-64.

    Il devint rapidement extrêmement populaire. Non pas comme un programme de sauvegarde comme je l’avais prévu, mais comme le principal choix pour ceux qui souhaitent copier des jeux et d’autres logiciels pour leurs amis.

    Il s’est avéré qu’une simplification de mon code, qui ignorerait simplement les secteurs illisibles, en écrivant un secteur avec un mauvais CRC sur la copie, contournait la plupart des systèmes de protection contre la copie alors utilisés.

    J’avais essayé de vendre mon application et je l’ai vendue 70 fois. Quand il a été annoncé dans les magazines, affirmant qu’il copierait un disque en moins de 5 minutes, les clients appelaient et ne le croyaient pas, “sachant mieux” que cela ne pouvait pas être fait, tout en essayant.

    Peu de temps après, d’autres ont commencé à procéder au reverse engineering de mon application et à l’optimiser, rendant les communications encore plus rapides, ce qui a conduit à copier des applications qui le faisaient même en 1,5 minute. Plus rapide était à peine possible, car, en raison de la quantité limitée de mémoire disponible sur le 1541 et le C-64, vous deviez échanger des disques plusieurs fois dans le lecteur de disque unique pour copier tous les 170 Ko de son contenu.

    Au final, FCopy et ses successeurs optimisés ont probablement été les logiciels les plus populaires du C-64 dans les années 80. Et même si cela n’a pas été rentable pour moi, cela m’a quand même rendu fier, et j’ai beaucoup appris sur la rétro-ingénierie, la futilité de la protection contre la copie et la notoriété. (En fait, Jim Butterfield, rédacteur en chef pour un magazine canadien C-64, a raconté mon histoire à ses lecteurs et il a rapidement reçu un chèque d’environ 1000 $ CA – recueilli par de nombreux utilisateurs reconnaissants qui ont envoyé des chèques de 5 $. , qui était une grosse sum d’argent à l’époque pour moi.)

    J’ai en fait une autre histoire:

    Quelques années après mon histoire de “succès” avec FCopy, quelqu’un m’a demandé si je pouvais craquer le logiciel d’une machine à sous.

    C’était en Allemagne, où presque tous les pubs avaient un ou deux d’entre eux: vous jeteriez de l’argent sur ce qui correspondait à environ un quart des États-Unis, puis il y aurait trois roues et si vous aviez de la chance avec un motif, vous auriez alors avoir le choix de «doubler ou ne rien faire» sur votre prochaine victoire ou d’obtenir la victoire actuelle. Le but du jeu était d’essayer de doubler votre gain jusqu’à ce que vous obteniez le mode «série» où tout gain réussi, aussi mineur soit-il, vous rapporterait un gros paiement (environ 10 fois vos dépenses par Jeu).

    La difficulté était de savoir quand doubler et quand pas. Pour un “outsider”, c’était complètement aléatoire, bien sûr. Mais il s’est avéré que ces machines fabriquées en Allemagne utilisaient de simples tables pseudo-aléatoires dans leurs ROM. Maintenant, si vous regardiez la machine jouer pendant quelques tours, vous pourriez déterminer où se trouvait ce “pointeur de table aléatoire” et prévoir son prochain mouvement. De cette façon, un joueur sait quand doubler et quand passer, ce qui le mène finalement à la “grande série gagnante”.

    Maintenant, c’était déjà chose courante quand cette personne m’a approché. Il y avait une scène underground qui avait access aux ROM de ces machines, trouvait les tables et créait des logiciels pour des ordinateurs tels qu’un C-64 à utiliser pour prédire les prochains mouvements de la machine.

    Puis vint un nouveau type de machine, utilisant un algorithme différent: au lieu d’utiliser des tables pré-calculées, il fit autre chose et aucun des crackers résidents ne put le savoir. On m’a donc approché, étant connu comme une sorte de génie depuis ma renommée FCopy.

    Donc j’ai eu les ROM. 16Ko, comme d’habitude. Aucune information sur ce qu’il a fait et comment cela a fonctionné. J’étais moi-même. Même le code ne semblait pas familier (je connaissais alors 6502 et 8080 seulement). Après avoir creusé et demandé, j’ai trouvé que c’était un 6809 (que j’ai trouvé être le plus beau processeur 8 bits à avoir, et qui avait des analogies avec le design du processeur 680×0, qui était beaucoup plus linéaire que celui de la famille x86).

    À ce moment-là, j’avais déjà un ordinateur 68000 (je travaillais pour la société “Gepard Computer” qui avait construit et vendu une telle machine, avec son propre système de développement et tout) et était en train de programmer Modula-2. Donc, j’ai écrit un désassembleur pour le 6809, celui qui m’a aidé avec l’ingénierie inverse en trouvant des sous-programmes, des sauts, etc. J’ai eu une idée du contrôle de stream du programme de la machine à sous. Finalement, j’ai trouvé du code qui ressemblait à un algorithme mathématique et je me suis rendu compte que cela pourrait être le code de génération aléatoire.

    Comme je n’avais jamais reçu de formation en informatique, je n’avais aucune idée de la manière dont fonctionnait un randomgen typique utilisant mul, add et mod. Mais je me souviens avoir vu quelque chose mentionné dans un livre de Modula-2 et ensuite réalisé ce que c’était.

    Maintenant, je pourrais rapidement trouver le code qui appellerait cette randomgen et apprendre quels «événements» mènent à une itération aléatoire, ce qui signifie que je savais prédire les prochaines itérations et leurs valeurs pendant une partie.

    Il restait à déterminer la position actuelle du randomgen. Je n’avais jamais été bon avec des choses abstraites telles que l’algèbre. Je connaissais quelqu’un qui avait étudié les mathématiques et qui était également programmeur. Quand je l’ai appelé, il a rapidement su résoudre le problème et a beaucoup réfléchi à la simplicité de la détermination de la valeur de départ du randomgen. Je n’ai rien compris. Eh bien, j’ai compris une chose: le code pour accomplir cela prendrait beaucoup de temps, et un ordinateur C-64 ou tout autre ordinateur 8 bits prendrait des heures, voire des jours.

    Donc, j’ai décidé de lui offrir 1000 DM (ce qui était beaucoup d’argent pour moi à l’époque) s’il pouvait m’écrire une routine d’assembleur en 68000. Cela ne lui a pas pris longtemps et j’avais le code que je pouvais tester sur mon 68000 ordinateur. Cela prenait généralement entre 5 et 8 minutes, ce qui était acceptable. Donc j’étais presque là.

    Il fallait toujours transporter un ordinateur portable 68000 au pub où se trouve la machine à sous. Mon ordinateur Gepard n’était clairement pas de type portable. Heureusement, quelqu’un d’autre que j’ai connu en Allemagne a produit 68 000 ordinateurs entiers sur un petit circuit imprimé. Pour I / O, il ne disposait que de communications en série (RS-232) et d’un port parallèle (Centronics était la norme de l’époque). Je pourrais y twigr des batailles de blocs de 9 V pour que cela fonctionne. Ensuite, j’ai acheté un ordinateur de poche Sharp, doté d’un clavier en caoutchouc et d’un écran à 32 caractères. En cours d’exécution sur les batteries, qui était mon terminal. Il avait un connecteur RS-232 que j’ai connecté à la carte 68000. Le Sharp avait également une sorte de mémoire non volatile, ce qui me permettait de stocker le logiciel de craquage aléatoire 68000 sur le Sharp, de le transférer à la demande sur l’ordinateur 68000, qui calculait ensuite la valeur de départ. Enfin, j’avais une petite imprimante Centronics qui imprimait sur du papier thermo étroit (ce qui correspondait à la taille des caisses enregistreuses pour imprimer les reçus). Ainsi, une fois que le 68000 aurait eu les résultats, il enverrait une série de résultats pour les jeux à venir sur la machine à sous à la Sharp, qui les a imprimés sur papier.

    Donc, pour vider une de ces machines à sous, vous travailleriez avec deux personnes: vous commencez à jouer, écrivez ses résultats, vous avez le nombre minimum de jeux requirejs pour le calcul de la graine, l’un d’entre vous se rend à la voiture garée à l’extérieur, allumez le Sharp, entrez les résultats, l’ordinateur de la série 68000 sera secoué pendant 8 minutes et une liste imprimée des prochains jeux sera disponible. Ensuite, tout ce dont vous aviez besoin était ce petit morceau de papier, rapportez-le à votre copain, qui gardait la machine occupée, alignez les résultats passés avec l’impression et pas plus de 2 minutes plus tard, vous étiez “surpris” de remporter les 100 séries. Vous auriez alors joué à ces 100 jeux, vidant pratiquement la machine (et si la machine était vide avant que les 100 jeux ne soient joués, vous aviez le droit d’attendre qu’elle soit remplie, peut-être même de revenir le lendemain, alors que la machine était arrêté jusqu’à votre retour).

    Ce n’était pas Las Vegas, donc on n’obtiendrait qu’environ 400 DM d’une machine de cette façon, mais c’était de l’argent rapide et sûr, et c’était excitant. Certains propriétaires de pubs nous soupçonnaient de sortingcher mais n’avaient rien contre nous à cause des lois en vigueur à l’époque, et même lorsque certains appelaient la police, la police était en notre faveur.

    Bien sûr, la société de fabrication de machines à sous a rapidement pris conscience de cette situation et a tenté de neutraliser ces machines en attendant l’installation de nouvelles ROM. Mais les premières fois ils ont seulement changé les nombres de randomgen. Nous n’avions qu’à mettre la main sur les nouvelles ROM, et il m’a fallu quelques minutes pour trouver les nouveaux numéros et les implémenter dans mon logiciel.

    Cela a duré un moment pendant lequel des amis et moi avons parcouru des pubs de plusieurs villes d’Allemagne à la recherche de ces machines que nous pouvions craquer.

    Finalement, le fabricant de la machine a appris à le “réparer”: jusque-là, le randomgen n’était avancé qu’à certains moments prévisibles, par exemple quelque chose comme 4 fois pendant le jeu, et encore une fois par le pressage du “double ou rien” bouton.

    Mais ils ont finalement changé pour que le randomgen soit continuellement interrogé, ce qui signifie que nous ne pouvions plus prédire la prochaine valeur de départ exactement à l’heure pour appuyer sur le bouton.

    C’était la fin de ça. Pourtant, faisant l’effort d’écrire un désassembleur juste pour cette fissure unique, trouver les principales routines dans 16 Ko de code CPU 8 bits, trouver des algorithmes inconnus, investir beaucoup d’argent pour payer quelqu’un pour développer du code que je ne comprenais pas , trouver l’élément d’un ordinateur portable haute vitesse impliquant le CPU “aveugle” 68000 avec le Sharp comme terminal et l’imprimante pour la sortie commode, puis vider moi-même les machines, était l’une des choses les plus excitantes que j’aie jamais faites. avec mes compétences en programmation.

    Au début des années 90, j’ai oublié mon mot de passe Compuserve. J’avais la version chiffrée dans CIS.INI, alors j’ai écrit un petit programme pour faire une attaque en texte brut et une parsing pour tenter de désosser l’algorithme de chiffrement. 24 heures plus tard, j’ai compris comment cela fonctionnait et quel était mon mot de passe.

    Peu de temps après, j’ai effectué un nettoyage et publié le programme en tant que logiciel gratuit afin que les clients de Compuserve puissent récupérer leurs mots de passe perdus. Le personnel de soutien de l’entreprise dirigeait fréquemment ces personnes vers mon programme.

    Il a finalement trouvé sa place sur quelques tableaux d’affichage (souvenez-vous d’eux?) Et sur des forums Internet, et a été inclus dans un livre allemand sur Compuserve. Il flotte toujours quelque part. En fait, Google m’amène directement à cela.

    Ok, ce n’était pas de l’ingénierie inverse (tout à fait) mais un simple hack matériel né de la pure frustration. Au début des années 90, j’étais responsable informatique d’une région du service de téléphonie mobile de Southwestern Bell. Mon service informatique a été considérablement sous-financé et nous avons donc dépensé de l’argent pour des personnes intelligentes plutôt que de l’équipement.

    Nous avons eu un WAN entre les grandes villes, utilisé exclusivement pour le service client, avec des liens IP critiques. Nos chefs d’entreprise ont insisté pour que nous installions un système de surveillance du réseau pour nous avertir lorsque les lignes s’éteignaient (pas d’argent pour la redondance, mais dépenser des dollars pour gérer les pannes. Sigh.)

    La solution FORTEMENT recommandée a été lancée sur un poste de travail SPARC et a démarré à 30 000 dollars, plus le coût d’une station SPARC (environ 20 000 dollars à l’époque), ce qui représentait une partie importante de mon budget. Je ne pouvais pas le voir – c’était un gaspillage de $$. J’ai donc décidé qu’un petit piratage était en ordre.

    J’ai pris un ancien PC prévu pour la destruction et mis une copie de ProComm (souvenez-vous de ProComm?) Et envoyez-lui un ping sur chacun des nœuds requirejs le long de la route (c’était une des versions ultérieures de ProComm). KERMIT, etc.) Un peu de logique dans le codage a déclenché un message de téléavertisseur lorsqu’un nœud ne pouvait pas être atteint. Je l’avais déjà utilisé pour bricoler un système de téléavertisseur pour nos techniciens, alors j’ai réutilisé le code de téléavertisseur. Le script a été exécuté en continu, envoyant un ping une fois par minute sur chacun des liens critiques, puis intégré dans le code du pageur lorsqu’un ping n’était pas renvoyé.

    Nous avons dupliqué ce système à chaque emplacement critique pour un coût inférieur à 500 dollars et avons reçu une notification très rapide en cas de panne d’un lien. Prochain numéro: l’une de nos premières méthodes de dépannage consistait à redémarrer nos routeurs et / ou nos serveurs de terminaux. J’ai eu des contrôleurs X10 à access commuté et quelques interrupteurs d’alimentation de l’appareil on / off X10. Il fallait connaître le bon numéro de téléphone à utiliser et les bons sons à transmettre, mais nous avons imprimé une carte de sortingche pour chaque technicien et ils l’ont conservée avec leur téléavertisseur. Réponse rapide instantanée! Un de mes techniciens a ensuite programmé les téléphones, nous avons tous dû réinitialiser des équipements spécifiques sur chaque site en tant que numérotation rapide. One-tech résout le problème!

    Maintenant, le dévoilement “dit-vous-tellement”.

    Je déjeune avec notre responsable de réseau d’entreprise à Dallas, qui insiste pour acheter le produit de gestion de réseau basé sur Sun. Je reçois une page que l’un de nos liens est en panne, puis une deuxième page. Puisque les messages de pager proviennent de deux serveurs différents, je sais exactement quel routeur est impliqué (c’était une configuration, je le savais quand même, car le technicien de la réunion avec moi a été mis en queue pour “arrêter un routeur” pendant le repas). nous pourrions montrer.) Je montre les messages de téléavertisseur au gestionnaire et lui demande ce qu’il ferait pour résoudre ce problème. Il me regarde avec méfiance car il n’a pas encore été envoyé avec succès par son système Solaris NMS censé suivre les liens critiques. “Eh bien, je suppose que vous feriez mieux d’appeler un technicien et de les amener à réinitialiser le routeur et voir si cela résout le problème.” Je me suis tourné vers le technicien qui déjeunait avec nous et lui ai demandé de le gérer. Il sortit son téléphone portable (au-dessus de la table cette fois-ci) et appuya sur le numéro abrégé qu’il avait programmé pour réinitialiser le routeur en question. Le téléphone a composé le commutateur X10, lui a demandé d’éteindre le routeur, de faire une pause de cinq secondes, de le mettre sous tension et de le déconnecter. Notre script ProComm nous a envoyé des pages nous indiquant que le lien était sauvegardé dans les trois minutes suivant cette routine. 🙂

    Le responsable du réseau d’entreprise a été très impressionné. Il m’a demandé quel était le coût de mon nouveau système. Quand je lui ai dit moins de 1 000 $, il était apoplectique. Il venait de commander un ensemble BIG de la solution de gestion de réseau Sun Solaris uniquement pour les tâches que j’avais illustrées. Je pense qu’il avait dépensé quelque chose comme 150 000 $. Je lui ai dit comment la magie avait été faite et lui ai proposé le script ProComm pour le prix du déjeuner. TANSTAAFL. Il m’a dit qu’il m’achèterait le déjeuner pour me taire.

    En nettoyant mes vieux tiroirs de disques, j’ai trouvé une copie du code – “Pingasaurus Rex” était le nom que je lui avais donné. C’était du piratage dans le bon vieux temps.

    Une fois, lorsque je jouais à Daggerfall II, je ne pouvais pas me permettre le Daedric Dai-Katana, donc j’ai édité la sauvegarde.

    Etant sérieux, j’ai réussi à supprimer la vérification de la clé électronique de mon installation AutoCAD de papas en utilisant SoftICE il y a plusieurs années. C’était avant qu’Internet était grand. Il travaille en tant qu’ingénieur, il avait donc une copie légitime. Il venait d’oublier le dongle à son travail et il devait faire certaines choses et je pensais que ce serait un défi amusant. J’étais très fier par la suite.

    Le plus douloureux pour moi était pour ce produit où nous voulions inclure une image sur une feuille de calcul Excel (il y a quelques années avant les normes ouvertes). Il fallait donc que je comprenne si le format interne des documents existe également. J’ai fini par faire des comparaisons hexadécimales entre des fichiers avec et sans image pour trouver comment le mettre là-bas, en plus de travailler sur de petites mathématiques endiennes.

    Une fois, j’ai travaillé sur un outil qui collecterait des informations d’inventaire à partir d’un PC au fur et à mesure de sa connexion au réseau. L’idée était de garder une trace de tous les ordinateurs de votre entreprise.

    Nous avions une nouvelle exigence pour supporter le système de réseau Banyan VINES, maintenant oublié depuis longtemps mais plutôt cool au moment de sa sortie. Je ne savais pas comment obtenir l’adresse MAC Ethernet de l’adaptateur Banyan car il n’existait pas d’API documentée pour ce faire.

    En cherchant en ligne, j’ai trouvé un programme que d’autres nerfs Banyan avaient posté pour effectuer cette action exacte. (Je pense que cela stockerait l’adresse MAC dans une variable d’environnement afin que vous puissiez l’utiliser dans un script). J’ai essayé d’écrire à l’auteur pour savoir comment fonctionnait son programme, mais il ne voulait pas me le dire ou voulait une sum d’argent ridicule pour l’information (je ne m’en souviens pas).

    Donc, j’ai simplement déclenché un désassembleur et mis son utilité à part. Il s’est avéré qu’il effectuait un simple appel au serveur, qui était un code de fonction non documenté dans l’API Banyan. Je me suis occupé des détails de l’appel assez facilement, il s’agissait essentiellement de demander au serveur l’adresse de ces postes de travail via RPC, et le MAC faisait partie de l’adresse réseau Banyan.

    J’ai simplement envoyé un courriel aux ingénieurs de Banyan et je leur ai dit ce que je devais faire. “Hé, il semble que le numéro de la fonction RPC 528 (ou autre) renvoie ce dont j’ai besoin. Est-ce sûr d’appeler?”

    Les ingénieurs Banyan étaient très sympas, ils ont vérifié que la fonction que j’avais trouvée était correcte et qu’il était peu probable qu’elle disparaisse. J’ai écrit mon propre code pour l’appeler et j’étais parti.

    Des années plus tard, j’ai utilisé essentiellement la même technique pour désosser un schéma de compression non documenté sur un format de fichier par ailleurs documenté. J’ai trouvé un outil de support peu connu fourni par la société (maintenant disparue) qui décompressait ces fichiers et les mettait au point. Il s’est avéré être une variante très simple de Lempel-Ziv appliquée dans la structure de bloc de leur format de fichier. Les résultats de ce travail sont enregistrés pour la postérité dans le code source de Wireshark , recherchez simplement mon nom.

    Il y a près de 10 ans, j’ai acheté l’édition collector UFO / XCOM dans la marchande d’une librairie locale, principalement par nostalgie. Quand je suis rentré à la maison, je suis un peu excité qu’il ait été porté sur Windows (les versions DOS ne fonctionnaient pas sous Win2k) … et ensuite déçu d’avoir des graphismes déformés.

    J’étais sur le sharepoint hausser les épaules (bonne affaire et tout), mais mon ami m’a dit: “Tu n’as pas … corrigé … un logiciel avant?”, Ce qui a conduit à boire beaucoup de cola et de rétro-ingénierie en train de traîner avec mon ami. En fin de compte, j’avais écrit un chargeur de corrections de bogues qui corrigeait le problème de la hauteur et de la largeur, et pouvait enfin jouer aux deux premiers jeux XCOM sans avoir à démarrer l’ancien matériel (DOSBOX n’était pas encore disponible et ma machine n’était pas assez puissante pour virtualisation complète).

    Le chargeur a gagné en popularité et a même été dissortingbué avec la réédition STEAM des jeux pendant un certain temps, mais je pense qu’ils sont passés à dosbox de nos jours.

    J’ai écrit un pilote pour Atari ST qui supportait les tablettes Wacom. Certaines informations de Wacom pouvaient être trouvées sur leurs sites Web, mais je devais encore trouver beaucoup de choses par moi-même.

    Ensuite, une fois que j’ai écrit une bibliothèque pour accéder aux tables wacom (et une application de test pour afficher les résultats), je me suis rendu compte qu’il n’existait aucune API pour le système d’exploitation (système de fenêtrage GEM). J’ai fini par avoir à accrocher des interruptions dans quelque chose appelé le VDI (comme GDI dans Windows), et faire très attention à ne pas planter l’ordinateur à l’intérieur. J’ai eu de l’aide (sous forme de suggestions) de la part des développeurs d’une version accélérée de la VDI (NVDI), et tout était écrit en PurePascal. J’ai encore de temps en temps des gens qui me demandent comment déplacer le curseur de la souris dans GEM, etc.

    J’ai dû désosser une application de traitement vidéo où je n’avais qu’une partie du code source. Il m’a fallu des semaines et des semaines pour élaborer le stream de contrôle, car il continuait à utiliser CORBA pour s’appeler, ou être appelé depuis CORBA dans certaines parties de l’application auxquelles je ne pouvais pas accéder.

    Pure idiotie.

    J’ai récemment écrit une application qui télécharge l’intégralité du contenu d’un serveur Webmail Domino à l’aide de Curl. En effet, le sous-traitant exécutant le serveur demande quelques centaines de dollars pour chaque demande d’archivage.

    Ils ont changé leur version de messagerie Web environ une semaine après avoir publié l’application pour le département, mais ont réussi à la faire fonctionner à nouveau grâce à une très bonne dose de regex et de XML.

    Quand j’étais au lycée, ils introduisaient des heures spéciales chaque semaine (il y avait 3 heures si je me souviens bien) dans lesquelles nous devions choisir une salle de classe avec un professeur pour répondre à toutes les questions sur leur sujet. Bien sûr, tout le monde a toujours voulu passer son temps dans la salle informatique à jouer sur les ordinateurs.

    Pour choisir la pièce dans laquelle vous deviez être, il y avait une application qui surveillait le nombre d’étudiants qui iraient dans une pièce donnée. Vous deviez donc réserver votre place à temps ou, à défaut, il n’y avait pas beaucoup de choix.

    A cette époque, j’ai toujours aimé jouer sur les ordinateurs là-bas et j’avais déjà obtenu un access administrateur, uniquement pour cette application qui ne m’aiderait pas beaucoup. J’ai donc utilisé mon access administrateur pour faire une copie de l’application et la ramener à la maison pour l’examiner. Maintenant, je ne me souviens plus de tous les détails, mais j’ai découvert que cette application utilisait un fichier de firebase database d’access situé sur un partage réseau caché. Après avoir pris une copie de ce fichier de firebase database, j’ai trouvé un mot de passe sur la firebase database. En utilisant certains outils de firebase database d’access Linux, je pouvais facilement contourner ce problème et après cela, il était facile d’importer cette firebase database sur mon propre serveur mysql. Alors, à travers une simple interface web, je pouvais trouver des détails pour que chaque élève de l’école puisse changer de créneau et me promouvoir pour s’asseoir dans ma chambre de choix à chaque fois.

    L’étape suivante consistait à écrire ma propre application, ce qui me permettrait de sélectionner un étudiant dans la liste et de modifier tout ce qui est nécessaire sans avoir à rechercher leur mot de passe qui a été implémenté en quelques heures seulement.

    Bien que ce ne soit pas une histoire très impressionnante comme d’autres dans ce fil, je me souviens encore que c’était très amusant à faire pour un lycéen à l’époque.

    Pas une histoire personnelle, mais toujours une excellente lecture: De l’oeil d’une tempête juridique, Satellite-TV Hacker de Murdoch raconte tout .