Ludovic Frank - Développeur indépendant

L’esprit hacker ou Joe la bidouille…

ionicons-v5-k Ludovic Frank 9 mai 2022
1505 lectures Niveau : Confirmé

Oh nooonnnn, il a dit hacker 😮, genre trop dark, derrière des écrans noirs et tous et toutes ?

En fait, non, dans l’esprit des gens, un “hacker” est malveillant et fait des trucs pas très cool, mais en fait, non.
Déjà dans les Hacker il y a les “white hat” et les “black hat”, les premiers sont inoffensifs, alors que les seconds sont eux moins sympas.

Cette semaine on va parler de “l’esprit hacké”, bien sûr c’est ma définition à moi et d’autres auront d’autres visions 😁.

Ma définition de l’esprit hacker

Un hack est un “bricolage”, une manière de faire qui est un peu hors norme, ce n’est pas quelque chose de complètement cadré, de bien réfléchi en amont. Imaginez avoir un problème à résoudre, mais vous n’avez pas 15 ingénieurs sous la main, vous n’avez que vous et votre petite tête… et en plus votre temps n’est pas infini…

Dans ce cas-là, vous allez imaginer des “hacks”?
Comment puis-je parvenir à mes fins sans moyens ?

Cela donne quelque chose de “quick and dirty” à savoir rapide et sale, d’un point de vue architectural / code ça sera DÉGUEULASSE, mais … ça fera le taff ! Et parfois dès le début, un hack est propre. Si, si, je vous jure 😛

La plupart des “side projet” sont des hacks, de base ils sont là pour régler un problème que vous avez, mais avec le temps vous vous rendez compte qu’il peut rendre service à d’autres et donc vous améliorez votre bricolage initial pour en faire un truc sympa.

En gros, les hacks, c’est la bricole… et on ADORE ça 😛, l’esprit hacker c’est l’esprit du bricolage. 

Perso, j’adore ça, car c’est dans ces moments que j’apprends le plus, pendant l’adolescence il y a énormément de code que j’ai écrit uniquement pour apprendre.

Il n’est pas impossible que le départ de mon activité d’entrepreneur / freelance soit à cause d’un hack… après bon, les on-dit, vous savez … 🤣

Quelques-uns de mes hacks “perso”

Ici, je vais me mouiller et décrire des trucs que j’ai bricolés, que ce soit pour apprendre ou par ce que j’avais envie de bricoler

Un serveur de jeu avec son argent de poche …

Je devais avoir un comme 13 ou 14 ans, tout allait bien dans le meilleur des mondes, mais voilà, j'adorais « Team Fortress 2 », on était en 2008 le jeu venait de sortir j’avais des copains en ligne avec qui jouait, mais on n’avait pas de serveur !

À l’époque il y avait « VeryGame », mais les serveurs, il fallait les payer au nombre de « slots » et ça devenait rapidement assez cher, du coup ce n’était pas une option. J’avais max un budget de 10 euros / mois pour le serveur.

Comment faire ? Héberger le serveur sur ma connexion ADSL pourris avec une machine de récupération dans ma chambre ? Avec 15ko/s en upload, ça va être CHAUD !

OVH venait de mettre sur le marché le “RPS”, pour « real personal server », l’idée était que tous les composants se trouvaient dans la machine sauf le disque dur…

J’en ai donc pris un pour tester, ça ne fonctionnait pas trop mal, pour de l'hébergement ça le faisait, mais pour héberger un serveur sur le moteur source (moteur de CSS, TF2 … etc.), c’était pas fou, le temps de charger de fichier de la map ça prenait genre 3 minutes… pas viables sur le long terme.

Bon, on abandonne ? Ou on attend 4 minutes au changement de map ?
Vous vous doutez bien que je VOULAIS trouver une solution ! il n’y avait pas d’autres options, pas possibles.

Le hack pour résoudre ce problème tient un mot : TMPFS.

J’ai fait un petit point de montage du dossier “maps” des serveurs de jeu dans la RAM, avec seulement quelques maps dedans (bah oui, je n’avais pas beaucoup de RA% sur ces machines), les autres, restaient sur “le disque dur” de la machine. 

Ensuite, avec « Metamod Source » et « SourceMod », j’ai écrit deux scripts :
Le premier, permettait aux admins de demander le chargement en RAM d’un fichier maps particulier, si par exemple en cours de partie, on avait envie de changer de maps, l’admin à l’aide de ce menu pouvait demander le chargement en ram du fichier maps voulu, en fait c’était juste la commande “cp” du fichier “source” vers le ramdisk (tmpfs). Une fois le transfert terminé, l’admin recevait une notification dans son chat lui disant “c’est bon bro, le changement de map sera instant”.
Le second, c’était une modification d’une fonctionnalité existante, le “votemap”, 10 minutes avant la fin de partie quand les joueurs avaient choisi ce que serait la prochaine map, eh bien, je la copiais purement et simplement dans le TMPFS.

Ça avait bien sur ces limites, un admin qui faisait un changement de map sauvage et BIM un time out au changement de map … mais bon. Avec pas une thune ça nous a permis de bien nous marrer sur TF2 avec un serveur qui avait de bonnes perfs.

Bonus : D’ailleurs en vous racontant ça j’ai un autre souvenir qui me vient en tête, je me souviens que sur les serveurs qui tournaient sur source, il y a eu une période un truc très chiant :
Quand un client tapait une commande dans sa console client, ça faisait « freeze » le processus serveur, et il se relançait, BIEN RELOU quand en plus il te faut 4 minutes pour charger ta map…
Vous savez comment j’ai fixé ça. Vous allez rire, Hex Workshop, ça vous parle ? 🤣

En fait, j’ai ouvert les “.so” (je sais plus exactement lequel) avec un éditeur hexadécimal, cherché la chaîne de caractère de la commande, puis édité avec un autre mot que seul moi connaissais.

Après ça, quand un petit malin voulait nous faire crash “Command not found”, méthode de gros bourrin, mais ça marche.

Comprendre les API Win32, Le Hook, et les patchs en mémoire

Ça, ça a été fait avec l’ami BestPig.

Oulah, on tape dans le dur … en plus, le code source est toujours disponible sur Github.

En fait, il trainait sur un internet, un patch écrit en delphi (qui était à l'époque un langage que j’adorais) pour steam.dll

Ce patch modifiait la fonction qui prend comme argument un “AppId”  d’un jeu et qui répond “vrai” ou “faux”. Bref, vous avez compris à quoi servait cette fonction.

Un jour je me suis dit “oui, mais patcher physiquement le fichier, ce n’est pas fun, si on s’amusait à le faire en mémoire”.

Du coup j’ai commencé à écrire cela et comme vous pouvez le voir sur le github, c’était du bricolage, pour rappel, j’avais 16 ans donc soyez indulgent !

On a injecté une DLL, dans le processus, notre code cherchait la fonction à patcher puis, on la remplaçait “en mémoire”, mais ce n'est pas ce qui est intéressant ici…

(D’ailleurs, si vous souhaitez comprendre mieux le chargement des libs sur Windows, l’ami Sh0ck a écrit un super article)

Moi, ce que je voulais c’était faire du « full en mémoire ».
Le truc c’est que quand on patche une DLL physiquement, celui-ci est rechargé par chaque nouveau processus (les jeux). 

Dans mon cas, interdit de toucher à la .dll originale donc, une fois le processus du jeu lancé il chargeait, la DLL originale (sur le disque) avec la fonction originale… ça ne marche pas bien 😮.

Comment on corrige ça ? 😛
En fait, c’est facile, quand Steam lance un jeu, il utilise la fonction CreateProcessA de Kernel32.dll  …

Ça y est, vous l’avez ? Les API Windows ? Ce ne sont que des DLL aussi … sauf qu'elles sont au “niveau système”.

En fait, dans Windows il y avait CreateProcessA et CreateProcesW, la différence entre les deux était l’encodage des strings à envoyer… Imaginez donc ce que j’ai fait…

Si “j’écrase en mémoire CreateProcessA”, ça veut dire que je n’y ai plus accès (puisque c’est maintenant ma fonction), mais j’ai toujours accès à CreateProcessW.

En fait, ma fonction « CreateProcessA » patchée, convertissait les chaines de caractère et appelait CreateProcessW tout en récupérant sa réponse avant de la redonner à Steam, ce qui me permettait d’avoir accès avec privilège au processus fraichement créer… de là j’y injectais mon code qui s’occupait de patcher les fonctions nécessaire dans ce processus (le jeu)

La méthode était complètement moche … mais ça marchait et surtout la seule chose qui comptait pour moi à cet instant, j’avais compris comment l’OS lance des processus. et « c’est quoi un processus ? »

La preuve que c’était génial ? Je vous en parle de mémoire 14 ans après (et j’en profite aussi, car aujourd’hui ce code est complètement obsolète). Je n’ai fait aucune recherche, je préfère me baser sur “ce dont je me souviens".

Mot de la fin sur ces bébés hacks

Les deux bricolages présentés ici, ne m’ont jamais fait gagner un seul centime, en fait, ils m’ont fait perdre de l’argent, mais ça n’a pas d’importance, je me suis pris la tête et j’ai appris énormément … 😍

Les hacks devenus de gros projet

Bon bon bon, on a assez parlé de mes projets à moi, maintenant, il est temps de parler des projets, qui, de base n'étaient pas grand-chose … puis …

Le noyau Linux

Aujourd’hui, le noyau Linux est partout, ¾ des sites internet que vous visitez tournent sur un serveur qui utilise ce noyau, quand vous utilisez un téléphone Android, vous utilisez Linux. Même s’il est peu visible directement du grand public, il est partout.

En fait, Linux, à la base, n'était qu’un hobby, du bricolage, en fait Torvalds, n’avait pas les moyens de se payer Unix, il a donc créé le sien (au tout début, l’idée était de l’appeler « Freax » d’ailleurs). 

Dans l’e-mail de son annonce, il dit que ce n’est pas un projet aussi professionnel et gros que GNU, et que son logiciel ne supportera probablement jamais autre chose que du matériel similaire au sien.

C’est assez amusant de savoir ça aujourd’hui quand on voit ce que Linux est devenu, et pourtant à la base c’était pas très pro tout ça… 😍

VLC

Alors lui, vous devez forcément le connaître, vous savez, c’est le lecteur capable de lire vos fichiers vidéos complètement pourris, personne ne sait comment il fait, mais seul LUI arrive à lire les fichiers complètement éclatés au sol …

Le cône de signalisation le plus connu de la planète est né à Châtenay-Malabry 😮.

Avoir un bon réseau pour jouer à Doom… 

Ah bah ça, forcément, dès qu'il y a geekerie, il y a jeu vidéo pas loin, les étudiants de l’école centrale Paris voulaient pouvoir jouer TRANQUILLEMENT à Doom, parce que dans la vie, il y a des objectifs, il ne faut pas déconner !

Du coup, ils vont demander à leurs écoles « un nouveau réseau », « c’est pour le travail, vous comprenez ? », mais l'école ils ont dit “on ne peut pas, le campus ce n’est pas nous qui gérons tout, ça tout ça…” , bon bah, voilà… pas de réseau et puis c’est tout … 

Vous croyez sérieusement que des geeks vont se laisser faire comme ça vous ? Non.
Pour la faire courte, les étudiants se disent « on va aller voir des boites pour nous financer tout ça », ils finissent par aller voir les gens de TF1, car ils commencent à s'intéresser à la télé par satellite (qui utilise encore la TV par satellite en 2022 ???).

On leur a donc dit un truc du genre (je n’en sais rien, j’étais pas là !) : si vous arrivez à diffuser de la vidéo sur le réseau alors on vous le finance, votre réseau …
Et hop, le début du projet VideoLAN.

Quelques années plus tard, ils font la démo de 30 secondes de vidéo et ça marche (bon, la légende raconte que ça « crashait » au bout de 40 secondes, les choses sont vachement bien faites quand même 😮)

Pour la suite, de VidéoLAN à VLC, je vous laisse regarder cette vidéo

Tout ça pour dire que la base de VLC, c’était juste des étudiants qui voulaient  jouer à des jeux vidéos 🤣.

Bitcoin

Alors ici on ne va pas parler du cours, là, on s’en fiche, on va juste parler de la tech permettant l’échange de valeurs en P2P sans « tiers de confiance ».

Que vous aimiez où que vous détestiez Bitcoin, aujourd’hui, tout le monde a au moins une fois entendu ce mot, je veux dire même ma grande tante de 85 ans ma dit “Ludo, c’est quoi Bitcoin ?”

Derrière Bitcoin, il n’y a pas de grande entreprise, pas de grands groupes, juste un gars tout seul ou un groupe de gars, on ne sait pas.

Le ou les types ont eu une idée, ils ont écrit un programme, un “white paper” de pourquoi ça existe et quel problème ça résout.
Il a travaillé à son développement pendant quelques années puis a disparu…

Quoi qu’on en dise en 2022, Bitcoin fait couler beaucoup d'encres, et, je suis convaincu, que ce n’est que le début ! 

KODI

Anciennement XMBC (pour Xbox Media Center), est de base un homebrew pour la première XBOX.

Le logiciel est né de la scène de « hack console », permettant de base de transformer la console en lecteur multimédia, il a su évoluer et aujourd’hui il est disponible sur plein de plateformes, même sur « Apple TV », c’est dire … (alors que c’est une plateforme bien fermée).

Le mot sur la fin sur ces projets

Ici, je n’ai pas mis toute l'histoire entière pour chacun de ces projets, pour une raison très simple, chacun de ces projets (et bien d’autres) mériterait un article entier (voire plusieurs). 
Si un projet vous interloque plus que les autres, n’hésitez pas à aller voir son histoire 😁.

Petits mots à tous les bricoleurs passionnés

Si vous êtes arrivé jusqu’ici c’est que vous comprenez bien de quoi je parle, vous pratiquez peut-être vous-même ces petits bricolages, que ce soit sur votre temps libre ou encore pour résoudre des petits problèmes 🙂.

Eh bien ! Continuez, je pense sincèrement que c’est toutes ces petites initiatives, tous ces petits bricolages, tous ces petits retours d'expérience qui rendent le monde de l’informatique aussi génial 😍. 

Le petit projet bricolé un dimanche après-midi pluvieux qui permet de se marrer, aider les copains ou même parfois aider plus de monde, c’est top 😁.

Conclusion

Mon petit article touche à sa fin, le but était de vous faire découvrir, le monde des “petits hacks” 
qui, selon moi, a eux seuls est tout un pan de l’histoire de l’informatique et d’internet 

D’ailleurs, le réseau internet, l’HTTP, ça vient d’où tout ça à la base ? 🤔.

418, je suis une théière…

Passez une très bonne semaine.
À la semaine prochaine 😁