Non lu (59)
15 millions de personnes formées à l’IA en 5 ans : la France lance son plan « Osez l’IA »
Numerama.com - Magazine par Hugo Bernard il y a 51min - Favoriser (lu/non lu)
Android 16 ajoute cette nouveauté pour lutter contre les cyberattaques
Tom's Hardware par Charles Gouin-Peyrot il y a 1h et 0min - Favoriser (lu/non lu)
Android 16 ajoute une fonctionnalité pour lutter contre les cyberattaques et les réseaux mobiles falsifiés, dans le but de voler des données.
L’article Android 16 ajoute cette nouveauté pour lutter contre les cyberattaques est apparu en premier sur Tom’s Hardware.
Du neuf !
BlogLaurel (fr) par Anonyme il y a 1h et 5min - Favoriser (lu/non lu)

😊
(et je sais que je risque d'avoir cette question 🥹, alors je réponds en avance 😅, non je n'ai pas du tout abandonné Californid 2, j'ai trop envie de continuer !! je dois repousser ce projet pour le moment mais je vais vraiment finir Californid, c'est promis !! ❤️ Merci !!)
Malgré l’explosion, la fusée géante Starship doit toujours tenter une pirouette inédite cette année
Numerama.com - Magazine par Julien Lausson il y a 21h et 27min - Favoriser (lu/non lu)
REvil-Sodinokibi - L'Empire cybercriminel du ransomware
Korben par Korben le 29/06/2025 à 13:37:00 - Favoriser (lu/non lu)
Si les ransomwares étaient des films Marvel, REvil serait clairement du niveau de Thanos dans Avengers. Pas juste un méchant lambda qui veut dominer le monde, mais un stratège qui a construit un empire, recruté des sbires partout sur la planète, et qui a failli réussir à prendre en otage l’économie mondiale. Sauf que contrairement au MCU, cette histoire est bien réelle et s’est terminée par des arrestations spectaculaires. Du délire !
400 million Windows PCs vanished in 3 years. Where did they all go? | ZDNET
Liens en vrac de sebsauvage par Anonyme le 29/06/2025 à 10:39:00 - Favoriser (lu/non lu)
- les gamers (qui ne lâcheront pas leur PC)
- les utilisateurs avancés (développeurs, retouche photo...)
- les entreprises.
Même si la période Covid a figé quelques temps cette tendance, elle reprend.
(Permalink)
ambient.garden
Liens en vrac de sebsauvage par Anonyme le 26/06/2025 à 08:55:00 - Favoriser (lu/non lu)
(Permalink)
5 articles de recherche fondamentaux pour comprendre les LLM
Journal du hacker par le 25/06/2025 à 17:05:00 - Favoriser (lu/non lu)
What are Secure Boot & Shim Files? Explained for Linux Users
Liens en vrac de sebsauvage par Anonyme le 25/06/2025 à 10:57:00 - Favoriser (lu/non lu)
(Permalink)
ChatGPT est-il en train de casser le cerveau humain ? 5 points sur le preprint du MIT sur les effets de l’IA | Le Grand Continent
Liens en vrac de sebsauvage par Anonyme le 23/06/2025 à 13:39:00 - Favoriser (lu/non lu)
(Permalink)
(Vidéo) QUAND LE TRAVAIL DÉTRUIT ET TUE – Blast
FRUSTRATION par le 06/06/2025 à 12:32:00 - Favoriser (lu/non lu)
Description de Blast : « Pour un salarié français sur deux, le travail est avant tout un facteur de détresse psychologique, et 17 % d’entre eux se disent même en détresse élevée. Et pourtant, les discours sur ces Français qui ne voudraient pas travailler, sur ces personnes qu’il faudrait remettre au travail, pullulent dans la sphère […]
GitHub - bearstech/phptop: PHP basic ressource profiler (CPU/memory), safe and useful for production sites
Liens en vrac de sebsauvage par Anonyme le 05/06/2025 à 11:11:00 - Favoriser (lu/non lu)
(Permalink)
GitHub - fosrl/pangolin: Tunneled Mesh Reverse Proxy Server with Identity and Access Control and Dashboard UI
Liens en vrac de sebsauvage par Anonyme le 02/06/2025 à 09:22:00 - Favoriser (lu/non lu)
Sous le coude pour éventuellement accéder à distance à mes machines.
(via https://shaarli.zoemp.be/shaare/22NKVw)
(Permalink)
bash: set a trap to log errors | ¬ just serendipity
Liens en vrac de sebsauvage par Anonyme le 02/06/2025 à 08:56:00 - Favoriser (lu/non lu)
(via https://shaarli.zoemp.be/shaare/yuP_XQ)
Ne pas oublier non plus ces bonnes pratiques : https://sebsauvage.net/wiki/doku.php?id=linux-vrac#bonnes-pratiques-scripts
(Permalink)
C’est quoi, le web ? Une définition simple du world wide web
Numerama.com - Magazine par Julien Lausson le 30/05/2025 à 12:05:00 - Favoriser (lu/non lu)
VIDÉO. Un grondement effroyable, un glacier s’effondre en Suisse, le village de Blatten en partie enseveli
Rss sur "le hollandais volant" par Anonyme le 28/05/2025 à 21:03:00 - Favoriser (lu/non lu)
9 millions de tonnes de boues sont tombés de la montagne.
Ici une vidéo, ainsi qu’une phot avant/après :
https://x.com/InfosFrancaises/status/1927769509487603852
Voir aussi là :
https://www.rts.ch/info/regions/valais/2025/minute-par-minute/28897978.html
Le village était évacué depuis une semaine, car des signes ont été détectés que ça allait lâcher.
Je vous laisse imaginer ce qui se arrivé si l’on n’avait financé la recherche scientifique en matière de climat, de météorologie, d’hydrologie, de géologie, etc.
Dans un monde où l’on préfère économiser sur la recherche et l’éducation, ou encore fermer ou couper les fonds à des agences scientifiques (NASA, NOAA, EPA, etc. aux États-Unis) juste parce que la réalité ne plaît pas au pouvoir en place, je pense que les prochains cas comme ça risquent d’être autrement plus douloureux.
Oui ça peut faire rire de voir des types payés à installer des sismomètres ou des balises de détection, ou d’envoyer des satellites d’observation ou de télémétrie (des dites balises), mais au final c’est grâce à tout ça qu’on arrive à prévoir, prédire et protéger des gens.
C’est terrible qu’un village se fasse raser en quelques dizaines de secondes. Mais c’est incroyable que personne ne soit mort ou blessé. Et si l’on ne peut pas toujours empêcher les choses comme ça, on peut souvent les prévoir et protéger les populations. Ce n’est pas un miracle : c’est la science et la recherche scientifique à l’œuvre.
— (permalink)
Luanti, l’alternative libre à Minecraft
Journal du hacker par le 28/05/2025 à 20:27:00 - Favoriser (lu/non lu)
Que sont les gènes ?
Numerama.com - Magazine par Diane Hassoun le 28/05/2025 à 19:05:00 - Favoriser (lu/non lu)
Unhappy with the cloud costs? You're not alone • The Register
Liens en vrac de sebsauvage par Anonyme le 28/05/2025 à 11:41:00 - Favoriser (lu/non lu)
(Permalink)
Why are 2025/05/28 and 2025-05-28 different days in JavaScript?
Liens en vrac de sebsauvage par Anonyme le 28/05/2025 à 11:36:00 - Favoriser (lu/non lu)
Cette théorie de la stupidité qui explique pourquoi Internet part en couille
Korben par Korben le 28/05/2025 à 11:07:00 - Favoriser (lu/non lu)
Je me suis encore tapé une bonne petite insomnie cette nuit, donc je me suis levé pour bosser et je suis tombé tout à fait par hasard sur ce PDF qui présente la “Théorie de la stupidité” de Dietrich Bonhoeffer, complété par une analyse de Carlo Cipolla sur “les lois fondamentales de la stupidité humaine”.
Je ne connaissais pas ces 2 gars ni leurs écrits, mais franchement, tous les jours ou presque je vois l’ampleur de la catastrophe et ça fait grimper ma pression artérielle. Et comme je ne comprends pas bien ce phénomène et que je ne sais pas trop comment m’y prendre pour y faire face, ça a évidemment attiré mon attention et je voulais partager ça avec vous.
Demander la permission des artistes « tuerait » l’industrie de l’IA, pour Nick Clegg - Next
Liens en vrac de sebsauvage par Anonyme le 27/05/2025 à 20:07:00 - Favoriser (lu/non lu)
Oui oui tout comme respecter les données des internautes mettrait fin au business de Google et Facebook.
Ce qui revient à dire que tout leur business viole la loi et ne respecte personne, ni les internautes ni les créateurs.
(Permalink)
Casting, date de sortie… Tout savoir sur le prochain film Hunger Games
Numerama.com - Magazine par Salammbô Marie le 22/05/2025 à 14:18:00 - Favoriser (lu/non lu)
Passwords are okay, impulsive Internet isn't
Liens en vrac de sebsauvage par Anonyme le 18/05/2025 à 07:57:00 - Favoriser (lu/non lu)
(Permalink)
Cyber existence
Arsouyes.org par le 17/05/2025 à 09:00:00 - Favoriser (lu/non lu)
J’ai toujours un faible pour la mécanique quantique et ses paradoxes, comme le classique chat de Schrödinger qui, enfermé dans une boîte, devrait être considéré à la fois vivant et mort…
En fait le simple geste de soulever le couvercle déterminera l’état de l’animal, même si dans le cas présent il disposait de trois états : vivant, mort ou vachement en colère.
Terry Pratchett, Nobliaux et Sorcières, trad. Patrick Couton
On a un temps considéré que ces superpositions d’états n’étaient valable que pour l’infiniment petit et justifié qu’elles ne se produisent pas à notre échelle par divers procédés aux noms compliqués comme l’effondrement de la fonction d’onde. Autant de formulations alambiquées qui évitent surtout d’admettre qu’en fait, on n’en sait fichtrement rien.
Pour la mécanique quantique relationnelle (cf. wikipedia), il n’y a pas vraiment de paradoxe ni de séparation entre échelles de tailles : on peut effectivement considérer que le chat est vivant et mort à la fois tant qu’on a pas interagit avec lui. Car la seule chose qui existe vraiment, ce ne sont pas les particules (et les chats), mais leurs interactions.
Suivant cette interprétation de la mécanique quantique, non seulement la cuillère n’existe pas, mais moi non plus… Ou du moins, elle et moi n’existons que lorsque je m’en sert. Et encore, si je suis seul à table, nous sommes les seuls à le savoir (enfin, surtout moi).
Cyber existence
La première manifestation de ce principe en informatique est, de par son nom, les bases de données relationnelles. Car dans ce système de stockage et surtout d’organisation de l’information, la seule chose qui existe, ce sont les relations entre les données.
Dans une table d’une BDD relationnelle, ce qui importe, ce ne sont pas les colonnes et les données qui s’y trouvent. L’important, ce sont les lignes, prises comme des représentations de relations entre les données qu’elles comprennent. L’important, ce ne sont pas les chaînes de caractères tbowan ou 62ef6642e16977913051c2ea3d4b5264, mais que leur association décrit un utilisateur du système qui a un pseudonyme et un mot de passe.
Mais ce principe que rien n’existe en dehors des relations peut se généraliser à toute l’informatique…
Pour le processeur, les instructions et les données n’existent que lorsqu’il les charge dans ses registres et en fait quelque chose. De son point de vue, la mémoire peut contenir n’importe quoi (ou ne contient rien). Le meilleur exemple est peut être un shellcode qui sera traité consécutivement comme une donnée (lorsqu’il sera copié quelque part) puis comme une suite d’instructions (lorsqu’il sera exécuté) dont certaines sont ensuite utilisées comme des données.
En réseau, une adresse IPv4 n’existe pas en tant que telle (ces 4 octets pourraient signifier n’importe quoi). Elle n’existe qu’en relation avec la machine qui y répond. Presque toutes les adresses sont attribuées mais elles n’existent que lorsque je communique avec la machine correspondante. Ensuite elles ne seront plus qu’un élément d’un souvenir.
Mais une première particularité apparaît déjà avec l’informatique : on peut être en relation avec quelque chose sans que ce soit réciproque. Par exemple, on peut écouter passivement le réseau pour découvrir les paquets émis par les autres machines. Ces machines, via leurs paquets, entrent en relation avec nous (nous savons qu’elles existent, ou plutôt qu’elles ont existés jusqu’à peu) mais cette relation est à sens unique puisque nous n’émettons pas de paquets.
Il en va de même avec les contenus sur IPFS. Tous les identifiants sont possibles et les fichiers correspondants existent potentiellement mais seuls ceux avec lesquels vous entrez en relations (lorsque vous les consultez) existent de votre point de vue.
Cyber social
On défini souvent le « cyberespace », suivant la définition de Gibson, en tant qu’une « hallucination consensuelle […] constituée par l’ensemble des ordinateurs et de leurs données ». Mais je lui préfère la définition de Sterling dans the Hacker Crackdown :
Cyberspace is the “place” where a telephone conversation appears to occur. Not inside your actual phone, the plastic device on your desk. Not inside the other person’s phone, in some other city. THE PLACE BETWEEN the phones. The indefinite place OUT THERE, where the two of you, two human beings, actually meet and communicate.
Bruce Sterling, The Hacker Crackdown
Pour les non anglophones, voici une traduction personnelle de ce passage.
Le cyberespace est « l’endroit » où une conversation téléphonique semble avoir lieu. Pas à l’intérieur de votre téléphone, cet outil de plastique sur votre bureau. Pas plus que dans le téléphone de votre correspondant, dans une autre ville. C’est L’ESPACE ENTRE les téléphones. Un endroit indéfini AILLEURS, où vous deux, êtres humains, vous rencontrez et communiquez.
Avec cette définition, on retrouve cette idée que ce qui existe, dans le cyberespace, ce n’est pas l’ordinateur ou la donnée, mais les relations que nous y vivons. Sans interaction avec le réseau, nous n’y existons pas (et il n’existe pas non plus).
Prenons les blogs par exemple. Le contenu qu’on y publie n’est qu’un prétexte pour exister. Certains diraient qu’il ne s’agit que de personnal branding mais ça revient à la même chose. En publiant un contenu, on se créer une existence dans cet univers à travers l’image que les visiteurs ont eu en interagissant avec nos contenus. On pourrait aller jusqu’à dire que cette image existe dans l’inconscient des visiteurs et tiens donc plus du mythe (mais c’est un autre sujet).
Le problème, c’est que le lecteur n’est en relation qu’avec le document et pas avec l’auteur. C’est pour ça que la plupart des bloggeurs regardent leurs statistiques de visites : pour la sensation de relation avec leur public qu’elles procurent. Se pose alors de nouveaux problèmes… la fausse croyance que ces valeurs quantifient l’existence dans le cyberespace (plus j’ai de visites par jours, plus j’existe), d’où l’importance du tri entre les visites humaines et celles des robots (je n’existe pas vraiment si c’est un bête robot qui me lit).
C’est aussi pour ça que sont apparus les commentaires. Ils ont permis de boucler la relation en permettant aux lecteurs d’interagir avec le blog et, transitivement, avec l’auteur. Les robots qui postent du spams et autres liens vers des arnaques est en fait le même qu’avec les journaux : ils faussent les statistiques et la sensation d’existence. (Chez les arsouyes, on a privilégié les courriels et la liste de diffusion mais ça ne change pas fondamentalement l’idée).
Comme autre exemple, prenons le réseau de capsules Gemini. Il s’agit d’un « nouveau » couple de protocoles de communication et de présentation du contenu. Le but est d’offrir une sorte de clone du web avec moins de paillettes mais plus de licornes. L’idée est que les trolls n’y sont pas venu car ils considèrent ce micro-univers comme insignifiant (pour l’instant).
Paradoxe, les auteurs y ont des relations plus authentiques les uns avec les autres mais ils n’existent qu’entre eux, et pas du tout pour le reste des internautes qui ne connaissent pas cet univers. Leur prosélytisme traduit ce besoin d’exister au delà des frontières de Gemini (mais leur sera fatal sur le long termes puisque ça attirera les trolls).
Le Fediverse a d’ailleurs été créé pour éliminer ces frontières en créant un espace de libre échange (pas étonnant qu’il trouve tant d’écho en Europe) en permettant aux contenus de passer d’une instance à l’autre, d’un espace à un autre. Les membres peuvent alors exister partout à la fois. Mais tout comme Gemini, ce micro-univers n’existe pas en dehors de sa communauté… et explique que les migrant qui y trouvent refuge commencent souvent par inciter d’autre à les suivre.
Autre problème, ces systèmes sont éphémères. Ils permettent d’être en relation mais une fois le message produit et consommé, il ne reste qu’un souvenir et surtout un manque qu’il faut combler plus ou moins rapidement. Suivant la fréquence, on trouvera des articles mensuels, des micro-bloging journaliers, des messageries temps réel jusqu’à la présence permanente des directs vidéo. Plus on a besoin d’exister, plus on envoie de messages, plus on y fait de bruit.
Pour éviter tout ce bruit, on pourrait utiliser un signal hors
bande. Par exemple, une famille assise au coin du feu en train de
lire ou tricoter n’a pas besoin de faire de bruit, chacun voit les
autres. Des enfants qui font un câlin n’ont pas besoin de parler car le
touché suffit largement mais des enfants laissés seuls dans une autre
pièce vont compenser en faisant du bruit. Une bande sur IRC n’a pas
besoin d’écrire puisque la liste des utilisateurs connectés les informe
de qui existe actuellement. L’usage veut que les utilisateurs
mettent à jour leur statuts (i.e. via la commande
/away
) et, dans l’ensemble, ça marche ; ces canaux IRC
génèrent moins de bruit inutiles.
Sauf en entreprises où les employés justifient leur salaire par leur
existence dans la structure. Être /away
, c’est être
inexistant, c’est être absent et dans ce contexte, c’est être en congé
(ou pire ; un tire au flan). Alors on n’est jamais officiellement
/away
. On falsifie ce signal. Et puisque le signal ne veut
plus rien dire, qu’il a perdu son sens, on doit trouver une alternative
pour signifier qu’on existe… alors on fait comme dans les autres
micro-univers (e.g. twitter, linkedin, whatsapp, …) : on fait
du bruit pour prouver qu’on existe1.
Cyber parasites
Les marchands ont médiatisé les relations commerciales entre producteurs et consommateurs, avec l’objectif de rendre les uns et les autres injoignables sans passer par leurs magasins. L’idée est alors de s’enrichir en prélevant une petite marge monétaire dans les relations commerciales. Et puisque l’existence économique est mesurée en euros, les marchands vampirisent l’existence des producteurs et consommateurs pour leur compte. Nous ne nous fournissons plus chez Untel Artisan (et vendons à Untel Client) mais le faisons dans Untel Magasin (et c’est bien dommage).
On retrouve le même principe en ligne où des marchands de l’attention se sont posés en médiateurs des relations humaines. Qu’importe la forme et le contenu de leurs communications, leur message est toujours le même :
Vous n’existez qu’à travers nous.
Et tout comme les marchands, ces plateformes vivent en vampirisant l’existence de leurs utilisateurs lorsqu’ils interagissent. Nous ne parlons plus avec Untel Correspondant mais communiquons sur Untel Réseau.
Tout comme les centrales d’achats utilisent les prix pour déterminer quels produits seront effectivement vendus (et donc quels fournisseurs seront payés), les plateformes utilisent des algorithmes pour déterminer quels contenus seront effectivement vus (et donc quels utilisateurs existeront dans leur micro-univers). La popularité dans un réseau social ou un magasin ne dépend pas du produit en lui-même mais surtout de son intérêt pour le vampire qui se demande combien d’existence il pourra en tirer.
L’innovation de ces plateforme n’a jamais été dans la fourniture d’un service particulier pour mettre des humains en relation. La pile TCP/IP et ses protocoles comme IRC (chat), SMTP/POP/IMAP (courriels), FTP/HTTP (présence en ligne) ou RSS/ATOM (abonnements) le permettaient déjà.
Leur innovation a été de fournir des indicateurs chiffrés d’existence. Avant ces réseaux, on devait relire et fouiller nos journaux pour se souvenir qu’on existait. Avec Facebook et cie on dispose de chiffres qui résument tout : nombre d’abonnés, nombres de vues. Et pour simplifier les interaction : des likes et, forcément, leur dénombrement. Depuis quelques années, on ne présente plus les personnes influentes en citant leurs réalisations (Untel qui a produit ceci), on le fait en citant leur nombre d’abonnés, de vues ou de likes (Untel au x millions d’abonnés).
Et c’est exactement ce dont le marketing moderne avait besoin. Un moyen de quantifier l’existence de sa marque et mesurer rationnelement l’impact des actions de communication (lire : en vues, likes et nombres d’abonnés). Le dircom et le CMO2 peuvent enfin chiffrer leur utilité lors des CODIR lorsqu’ils parasitent nos existences.
Pire, comme toute mesure qui devient un objectif cesse d’être une bonne mesure (Loi de Goodhart), le nombre d’abonné, de vue et de like est toxique. Il y a d’abord les fraudes avec les chiffres inventés par les plateformes pour faire croire aux utilisateurs qu’ils existent plus (et les garder), puis les faux comptes et faux abonnés qui font croire au public qu’on existe plus (et le subjuguer).
Il y a ensuite la sélection naturelle que ces indicateurs chiffrés opèrent sur les contenus qui y existent (on peut alors parler de mèmes). En favorisant les contenus faciles à produire ; plus courts, creux ou plagiés. En favorisant ceux qui génèrent de l’engagement ; qui biaisent ainsi le choix éditorial, la forme au détriment du fond et construisent des bulles.
Dans ce contexte, les IA génératives sont de formidables outils pour ceux qui ciblent ces indicateurs. Elles permettent de produire très vite des contenus très engageants, augmentant le nombre de relations et donc le sentiment d’existence. Ces IA vont surtout vider les relations de leurs substance jusqu’à ce que leurs utilisateurs prennent conscience de l’illusion… dépressions garanties.
En fait, ce n’est pas tant tel réseau qui baisse de qualité mais le principe même de ces indicateurs qui pose problème. Par exemple, les immigrant vers le Fediverse y vantent le plus souvent le nombre (supérieur) de vues, de likes et d’abonnés qu’ils y trouvent. Mais des trolls, tels des rats dans les navires, ont été embarqué dans le mouvement. Les publicitaires attendent simplement que des influenceur y atteignent leurs seuils de rentabilité avant d’y migrer leur business à leur tour.
Finalement, ces plateformes, comme tous les manipulateurs, ont tendance à dire l’inverse de la réalité ou de leurs pensées. On ne s’en rend généralement pas compte parce qu’on est empêtré dans le brouillard qu’ils génèrent autour de nous mais si on prend le temps d’inverser leur message, voici ce que ça donne :
Nous n’existons qu’à travers vous.
Que les producteurs et consommateurs s’organisent pour reprendre le contrôle de leur relations (i.e. l’AMAP) et les marchands perdront de leur pouvoir. Que les internautes s’organisent de même et ces plateformes disparaîtrons.
Et après ?
La physique relativiste a introduit l’équation sans doute la plus célèbre de toute la physique : Elle met en correspondance la masse d’un objet avec l’énergie qu’il génèrerait s’il disparaissait (ou réciproquement l’énergie nécessaire pour faire exister une masse équivalente). Mais on peut aussi l’interpréter comme une équivalence entre l’existence (la masse, à quelle point elle déforme le tissus de la réalité) et les relations (l’énergie transférée).
Autrement dit, une bonne existence permet de bonnes relations et de bonnes relations mènent à une bonne existence. Corollaire, les bonnes relations sont réciproques.
Un malware dans la brèche : comment la faille BYOI a contourné la protection SentinelOne
Data Security Breach par Damien Bancal le 09/05/2025 à 17:09:00 - Favoriser (lu/non lu)
Debian : Configuration complète d'unattended-upgrades pour une sécurité sans effort
Journal du hacker par le 08/05/2025 à 14:14:00 - Favoriser (lu/non lu)
Prophétie - La bulle de l’IA est-elle sur le point d’éclater ?
RSS | Usbek & Rica par Anonyme le 08/05/2025 à 10:42:00 - Favoriser (lu/non lu)
Les ultra-riches polluent le plus : les chiffres de cette étude sont effarants
Numerama.com - Magazine par Marcus Dupont-Besnard le 08/05/2025 à 10:20:00 - Favoriser (lu/non lu)
Prise en main à distance de téléphones Android
Journal du hacker par le 07/05/2025 à 09:36:00 - Favoriser (lu/non lu)
Comment prendre la main à distance sur un téléphone Android avec Rustdesk
Introduction aux câbles USB
Journal du hacker par le 05/05/2025 à 19:42:00 - Favoriser (lu/non lu)
Projet de loi pi de l'Indiana — Wikipédia
Rss sur "le hollandais volant" par Anonyme le 05/05/2025 à 13:52:00 - Favoriser (lu/non lu)
Ah oui, les américains avaient, en 1897, voulu faire passer une loi sur la quadrature du cercle qui imposait indirectement l’arrondissement de Pi — la constante mathématique — à une valeur fixe, par exemple 3,2.
On veut faire passer des lois qui interdisent la réalité et la rendent illégale. Il n’y a pas d’autre façon de le tourner.
Depuis, la logique n’a pas changé : c’est juste qu’on l’applique à d’autres domaines, comme la santé (avec les fausses-médecines), la science (terre plate & co), société et finance (théorie du ruissellement), climat, énergie, immigration…
Et après ce sont les mêmes qui viennent pleurer parce qu’ils ne sont pas pris au sérieux ? Lol.
— (permalink)
Quand une conf change ta carrière (et ta vie) de dev
Journal du hacker par le 02/05/2025 à 15:16:00 - Favoriser (lu/non lu)
China builds world’s first thorium reactor with US secret files
Rss sur "le hollandais volant" par Anonyme le 02/05/2025 à 12:47:00 - Favoriser (lu/non lu)
Bien, très bien !
Le thorium est beaucoup plus abondant que l’uranium, et sa technologie de réacteurs fait qu’il est intrinsèquement stable.
Les réacteurs à uranium/plutonium classiques fonctionnent parce que la réaction libère de la chaleur, et nous on extrait continuellement cette chaleur. Sans cette extraction, la chaleur s’accumule, le réacteur fond et peut exploser. Y a des systèmes de sécurité pour réduire l’activité (barres de contrôle, etc.), mais essentiellement c’est un système que l’on maintient dans un équilibre instable, en corrigeant en permanence et artificiellement toutes les déviations qui se produisent.
(et malgré tout ça, elle est l’énergie la moins sujette à accidents, c’est dire…)
Un réacteur à thorium, son état par défaut n’est pas l’emballement, mais l’arrêt. On doit le maintenir en activité pour qu’il tourne et produit de l’énergie utile.
C’est donc une bonne chose qu’on se mette à explorer cette voie, en attendant la mise au point de la fusion nucléaire (qui, malgré les progrès énormes ces derniers temps, est encore loin d’être fonctionnelle et mériterait un financement à la hauteur des enjeux).
— (permalink)
Comment fonctionnent les encres qui changent à couleur changeante des billets euro ?
Couleur science par Anonyme le 01/05/2025 à 07:26:00 - Favoriser (lu/non lu)
Une technique anti-contrefaçons utilisée notamment sur les billets de banque sont les encres à couleur changeante. On le voit sur les billets de 50 € ou plus, notamment.
Comment ça marche ? Comment une encre peut-être être de plusieurs couleurs ?
Une couleur, zéro pigments
Habituellement, les couleurs sont produites par des pigments. Un pigment est une molécule qui lorsqu’elle reçoit la lumière incidente, absorbe une partie du spectre reçu, et renvoie le reste. La couleur du pigment correspond alors à la partie de la lumière qui est renvoyée.
L’espèce chimique utilisée dans le pigment détermine sa couleur. Si l’espèce chimique (la molécule) ne change pas, alors cette couleur ne change pas
Dans certains cas, les couleurs peuvent être produites sans pigments. C’est le cas de couleurs dites structurelles, où c’est la structure de la matière, l’agencement des atomes au niveau microscopique ou macroscopique qui est responsable de la production des couleurs, principalement grâce à des phénomènes d’interférences ondulatoire de la lumière, mais aussi de phénomènes relativistes, pour la couleur de l’or ou du cuivre par exemple.
Les encres qui changent de couleurs, ou encres optiquement variables tombent dans la catégorie des matériaux qui produisent de la couleur structurelle par phénomène d’interférences. Elles rejoignent donc les bulles de savon, les plumes de paon, les cristaux des pierres d’humeur sur les bijoux, les couleurs sur une flaque d’eau contenant du gazole, les couleurs obtenues avec un CD que l’on éclaire… bref, on en voit partout bien qu’on ne se pose pas souvent la question.
Contrôler la structure permet de choisir la couleur finale que l’on verra, mais on pourra aussi obtenir un effet de changement de couleur en fonction de l’inclinaison de la surface. Dans le cas des billets de 50 € mentionné au début, la partie encrée varie du vert au violet.
Origine d’une couleur structurelle
La couleur structurelle découle généralement de phénomènes d’interférences. On les reconnaît à leur aspect métallique, ou irisés.
Au cours de ces phénomènes, un rayon de lumière incidente issu de la lumière ambiante se retrouve scindé en deux rayons identiques (même direction, même longueur d’onde) mais décalés, déphasés. Quand ces deux rayons se recombinent, ils agissent l’un sur l’autre : ils interfèrent. Leur amplitude peuvent alors s’additionner ou se soustraire en fonction du déphasage :

Si l’on a deux couleurs — deux longueurs d’ondes différentes — il est possible que l’une soit totalement annulée, et l’autre soit au contraire augmentée. Le déphasage est bien identique pour les deux longueurs d’onde, mais chaque longueur d’onde ne va pas réagir de la même façon.
C’est ce mécanisme qui permet de colorer des surfaces structurellement à partir d’une lumière blanche polychromatique.
Origine des interférences
Pour obtenir une couleur structurelle, il faut que les rayons incidents soient scindés. Les rayons ainsi obtenus vont interférer et produire la couleur par addition ou soustraction.
L’origine de la scission se produit typiquement avec des revêtements présentant une couche mince transparente, des petits orifices, ou rainures très fines.
Quelques exemples peuvent être :
- les sillons d’un CD-Rom (réseau de diffraction ; rainures)
- l’épaisseur d’eau d’une bulle de savon (couche mince)
- une couche d’huile ou de gazole sur une flaque d’eau (couche mince)
- les plumes de paon, de coq, de canard Col Vert, de pigeon (réseau de diffraction)
- les écailles de poisson, le dos de certains scarabées, les ailes de certains papillons (réseaux de diffraction + couche mince)
Dans ce cas des interférences par couche mince, une partie de la lumière est directement réfléchie sans entrer dans la couche transparente et l’autre passe dans la matière, se réfléchit à l’intérieur puis en ressort :

On peut remarquer que la partie transmise dans la couche mince du rayon va effectuer un trajet supplémentaire par rapport à la partie du rayon qui est réfléchi en surface. On parle d’une différence de marche dans le trajet optique.
C’est précisément la valeur de cette différence de marche qui va constituer le déphasage : les deux ondes initialement en phase au moment de se scinder en deux, vont être décalées au moment d’interférer.
Évidemment, le déphasage va dépendre de l’épaisseur de la couche mince, ainsi que de sa nature, mais ce n’est pas tout. L’inclinaison des rayons incidents va également être importante. En effet, plus le rayon est incliné, plus le trajet optique dans la couche mince va être importante, et cette augmentation fera varier le déphasage :

Sur la figure ci-dessus, on voit très bien que la différence de marche dépend de l’inclinaison. Il en résulte que selon l’inclinaison des rayons incidents, les couleurs issues des interférences vont également varier.
Cas des encres optiquement variables
L’effet où l’encre change de couleur en fonction de l’inclinaison vient de là : quand on incline le papier encré, on modifie en direct l’incidence et donc le déphasage, et par suite, la couleur résultante varie également.
Le déphasage est le même pour toutes les longueurs d’ondes, mais si l’on prend l’exemple d’un déphasage de 200 nm, celui-ci va totalement annuler les longueurs d’ondes de 400 nm (bleues), mais seulement partiellement les longueurs d’ondes de 500 nm (vert), 600 nm (jaune), ou rouges. Dans ces conditions, le bleu est annulé et retiré du spectre : la lumière blanche sans le bleu devient alors orange.
Si cette fois le déphasage est de 300 nm, les longueurs d’ondes de 400 nm (bleues) ne sont plus totalement annulées, mais le 600 nm (jaune), si. Le spectre blanc est donc dénué de jaune, et sera principalement rouge-bleu, donc violacé.
Selon l’angle, donc, les couleurs qui ressortent après interférences varient, et c’est ce qui provoque ces changements :

Conclusion
Les encres qui changent de couleur en fonction de l’orientation fonctionnent par des interférences ondulatoires lumineuses : la lumière interfère, soit constructivement, soit destructivement. Il en résulte que l’encre soit atténue, soit accentue certaines couleurs. De la lumière blanche, on passe donc, par exemple, à de la lumière verte. Et vu le fonctionnement de ces interférences, c’est l’angle d’incidence qui détermine quelle couleur est détruite, et laquelle est renforcée, d’où le changement de couleur lors de l’orientation du billet.
Ces encres sont utilisés sur d’autres éléments également, notamment tout ce qui peut nécessiter une protection anti-contrefaçon (cartes bancaires, tickets restaurants, par exemple), ou des objets suffisamment qualitatifs pour bénéficier d’un élément fantaisiste comme une encre qui change de couleur (pochette de CD, clés USB, cartes de collection…).
Enfin, certaines encres peuvent également changer de couleurs sous l’effet d’un courant électrique, de la chaleur ou de rayonnement ultraviolet. Dans ce cas, ces différents paramètres (courant, chaleur, UV) modifient physiquement ou chimiquement le processus de production de la couleur. Dans le cas des couleurs qui changent sous la chaleur, par exemple, c’est l’espèce chimique qui est altérée : la molécule elle-même est modifiée et change de couleur sous l’effet de la chaleur.
Ressources
- Encre optiquement variable – Wikipédia ;
- What is Optically Variable Ink (OVI)? | Document Glossary ;
- Counterfeit protection with OVI - find alternatives.
image d’en-tête : travail personnel.
LA FRANCE EN 3D : les coulisses d'une cartographie hors-norme - YouTube
Liens en vrac de sebsauvage par Anonyme le 30/04/2025 à 10:27:00 - Favoriser (lu/non lu)
( pour voir l'avancement des dernières zone, voir : https://macarte.ign.fr/carte/322ea69dab4c7e5afabc6ec7043b5994/acquisitionslidarhd )
(Permalink)
Les 4 étapes pour entrainer un LLM
Science étonnante par David Louapre le 25/04/2025 à 17:02:00 - Favoriser (lu/non lu)
Le pic de l’intelligence humaine est-il derrière nous ?
RSS | Usbek & Rica par Anonyme le 18/03/2025 à 16:23:00 - Favoriser (lu/non lu)
Sauvegarder ses données vers un NAS Synology avec BorgBackup - FLOZz' Blog
Liens en vrac de sebsauvage par Anonyme le 11/03/2025 à 11:46:00 - Favoriser (lu/non lu)
(Permalink)
vulnérabilité initialement localisée, désormais mondiale !
Data Security Breach par Damien Bancal le 08/03/2025 à 12:56:00 - Favoriser (lu/non lu)
Des nouvelles d’Argos Panoptès, la solution de supervision de sites web simple et efficace
Framablog par Luc le 28/01/2025 à 09:25:00 - Favoriser (lu/non lu)
Easy, proactive monitoring of processes, programs, files, directories, filesystems and hosts | Monit
Liens en vrac de sebsauvage par Anonyme le 16/01/2025 à 09:17:00 - Favoriser (lu/non lu)
- un simple exécutable qui tourne en démon.
- un fichier de config avec une syntaxe simple et claire.
- la possibilité de surveiller : des processus, la consommation RAM, les débits réseau (d'une interface ou d'un processus), la présence ou modification de fichiers, vérifier que des serveurs répondent (et avec le bon contenu), surveiller la date d'expiration de certificats SSL, vérifier qu'un service répond en faisant du expect, vérifier qu'on arrive bien à se connecter à MySQL, Postgres; SIP, SMTP, MQRR, vérifier le contenu renvoyé par une commande lancée (ce qui permet de faire tout ce qu'on veut), etc.
C'est très chouette et assez souple.
(Permalink)
Hackropole - La plateforme française de challenges cybersécurité
Korben par Anonyme le 01/01/2025 à 09:00:00 - Favoriser (lu/non lu)
Vous rêvez de devenir un as de la cybersécurité mais vous ne savez pas par où commencer ?
Et bien voici un endroit par où débuter… En effet, l’ANSSI vient de mettre sur pied une plateforme d’entraînement qui va vous permettre de vous former comme un pro, gratuitement et à votre rythme.
Bienvenue dans le monde fascinant de Hackropole, le nouveau terrain de jeu des apprentis experts en cybersécurité ! C’est comme une sorte de salle d’arcade virtuelle où chaque ‘borne’ serait en fait un défi technique de cybersécurité à relever. Des épreuves de cryptographie aux challenges de forensics en passant par l’exploitation web, c’est un véritable parcours initiatique qui vous attend.
Merci d’exploiter les communs
Arsouyes.org par le 16/12/2024 à 16:00:00 - Favoriser (lu/non lu)
En matière de publication sur le net, j’applique habituellement une règle simple : rien de négatif. Parce qu’Internet est une caisse de résonance qui amplifie tout, et surtout le négatif. Mais aujourd’hui, je vai faire une petite exception avec un sentiment qui domine ces derniers jours, Tristesse.
On vous en avait déjà parlé dans une précédente newsletter [1], France Identité a été victime d’une usurpation d’identité via un courriel de phishing émanant de leur propre domaine. Les deux explications sont a) le serveur de courriel des victime est (très) mal configuré ou b) une faille quelque part a été exploitée.
L’interview que j’avais faite pour Le Parisien a fait un petit tour dans les rédactions puisque des extraits ont été réutilisés par Clubic [2], TF1 [3], Juriguide [4] et Cahiers Libres [5].
- https://www.clubic.com/actualite-541556-si-vous-recevez-cet-e-mail-de-france-identite-n-y-repondez-surtout-pas.html
- https://www.tf1info.fr/high-tech/france-identite-alerte-sur-une-campagne-de-phishing-utilisant-l-une-de-ses-adresses-mails-2330385.html
- https://www.juriguide.com/2024/10/30/alerte-france-identite-nouvelle-campagne-phishing-mail-ne-repondez-surtout-pas/
- https://cahierslibres.fr/alerte-phishing-en-france-ne-repondez-pas-a-ces-courriels-ils-pourraient-compromettre-votre-identite/6562/
Aucun de ces journalistes n’a pris la peine de me contacter. Ce n’était bien sûr ni obligatoire ni nécessaire et ils ont tout à fait le droit de reprendre ces citations (art. L122-5 du CPI, alinéa 3°b) mais ça me rend triste de voir les liens sociaux se déliter. Un simple petit courriel “Bonjour, nous avons repris vos propos dans cet article [lien ici], merci” ne coûte rien et fait tellement de bien…
Peut être qu’à force de médiatiser nos relations à travers des interfaces informatiques impersonnelles (i.e. places de marchés virtuelles comme Amazon ou Leboncoin), nous oublions comment nous parler, comment être en relation ? C’est dommage car parler à des inconnus contribue à notre bonheur [6] (en tout cas bien plus que d’acheter des babioles en soldes).
Un peu comme ces rôlistes qui organisent nos soirées enquêtes. Certains ont la gentillesse de nous écrire un mot gentil (merci à eux), mais beaucoup ne prennent pas cette peine. Et d’autres vont jusqu’à facturer la participation (e.g. 25€ [7] ou 30€ [8]) en utilisant nos PDF diffusé en CC BY-NC-SA (indice : NC veut dire Non Commercial)…
- https://www.gdfl.be/convention-2024-les-aventuriers-de-la-cite-ardente-tome-10/
- https://allevents.in/mobile/amp-event.php?event_id=200023086544155
On ne parle pas de grosses sommes (entre 200 € et 300 € pour les organisateurs) mais comparez au prix des versions imprimées (25€ l’exemplaire [9]) et vous pouvez mesurez l’économie ainsi réalisée pour ne pas dire merci aux auteurs.
C’est pour ça que nous avions arrêté d’écrire et diffuser des scénarios de soirées enquête. Même si les joueurs sont toujours content d’y jouer, et les organisateurs ravis de trouver des scénarios clé en main, autant d’efforts (20 jours ETP par scénario) pour finir exploités, ça décourage.
On parle souvent des communs et à quel point ce projet de société est noble et beau. C’est souvent oublier que derrière chaque œuvre libre, se cache un bénévole dans le Nebraska [10]. Et que sans contrepartie équilibrée, ce projet est un triangle [11].
Et c’est encore pire avec les IA génératives. Les œuvres librement
accessibles (et pas forcément libres d’ailleurs) sont systématiquement
pillées pour enrichir des contrefaçons. Vendues à des
clients complices. Sans aucune rétribution aux auteurs. Pas
même un merci.
Certains se plaignent de la baisse de qualité des contenus du cyberespace mais supportent-ils les créateurs ? Le PDF de notre livre a été téléchargé 7 000 fois en novembre, 21 364 fois lors de sa sortie et près de 50 000 fois au total depuis mi septembre. Le seul contenu plus téléchargé en 2024, c’est le flux RSS (366000 fois). Combien ont acheté la version papier ? 6 versions basiques et 1 version communautaire (et on les remercie chaleureusement).
Je comprend que tout le monde ne soit pas intéressé par un livre qui explique comment écrire des shellcodes (même si c’est surtout un prétexte pour expliquer des principes du système bas niveau), mais nous avons largement plus de 7 visiteurs intéressés par ce sujet vu le nombre de reprise de nos shellcodes et articles ailleurs sur le net (dans des cours, write up et autres vidéos) et les réponses que nous avions obtenues dans un sondage en 2020 (120 personnes s’étaient dites intéressées).
Tout ça nous confirme dans notre choix de publier l’ebook en Creative Commons au fur et à mesure des ventes de l’édition communautaire et de proposer une version basique pour ceux qui veulent juste nous remercier. Ça prendra le temps que ça prendra.
☕️ Disclose déplore la (cyber)surveillance hors norme d’une journaliste par la DGSI
Next - Articles gratuits par Jean-Marc Manach le 06/12/2024 à 10:51:00 - Favoriser (lu/non lu)
[Article abonné] En France, l’efficacité du blocage administratif ou judiciaire de sites web s’avère aléatoire - Next
Liens en vrac de sebsauvage par Anonyme le 02/12/2024 à 18:47:00 - Favoriser (lu/non lu)
(Et du coup si vous voulez l'article en entier : https://app.wallabag.it/share/674df29a9b68d3.94123800)
(Permalink)
Un serveur en assembleur pirate des images d’IA
Arsouyes.org par le 21/11/2024 à 11:00:00 - Favoriser (lu/non lu)
Alors que nous surfions sur le Grand Internet, nous sommes tombés sur un article intéressant d’Akanoa [1] qui cherchait à réduire la taille de l’exécutable d’un mini serveur HTTP. Son ultime code en assembleur X86 gère IPv4 en seulement 376 octets.
Comme on est le nez dans l’assembleur depuis un moment, on s’est demandé si on pouvait poursuivre l’aventure avec des technologies futuristes (x86-64 et IPv6). Divulgâchge : on a réussi à tout faire rentrer dans 224 octets [2].
Sans transition, Claire-Line Nass d’AFP Factuel s’est demandé pourquoi des gens utilisent des IA pour publier des (fausses) photos de créations incroyables sur les réseaux sociaux… [3, 4]. Pourquoi l’IA ? parce qu’elle est plus efficace que nous pour créer du bullshit. Pourquoi publier ces contenus ? on peut citer les robots qui se font passer pour humains (et seront vendus à des communicants), ceux qui vendrons des arnaques à leurs nouveaux amis (cagnottes factices ou faux magasins), l’augmentation du trafic vers des pages (facebook ou web).
- https://factuel.afp.com/doc.afp.com.36M843A
- https://fr.news.yahoo.com/attention-%C3%A0-images-g%C3%A9n%C3%A9r%C3%A9es-ia-164439066.html
De leur côté, TF1 [5] et Libération [6] sont revenu sur les derniers piratages avec fuite de données personnelles. Comme toujours, on n’a pas les détails techniques de l’attaque mais on peut raisonnablement supposer du phishing pour usurper un compte utilisateur ayant accès aux données. Elles seront ensuite revendues pour enrichir les profils des prochaines victimes. En gros : du phishing pour faire plus de phishing…
- https://www.tf1.fr/tf1/jt-13h/videos/cartes-de-fidelite-piratees-quels-risques-pour-les-clients-35660321.html
- https://www.liberation.fr/economie/economie-numerique/pourquoi-autant-dentreprises-francaises-ont-ete-victimes-de-cyberattaques-depuis-le-debut-de-lannee-20241120_RFWFN4IKHRHSNDB56UBEHPIQ7E/
Un peu comme ces jeux et applications sur téléphones qui ne sont en fait des chevaux de Troyes créés pour nous montrer de la publicité pour d’autres jeux et applications. Alors ça nous a donné une super idée : viendez faire la publicité pour vos livres dans notre ebook…
Serveur HTTP minimaliste, x86-64 et IPv6
Arsouyes.org par le 21/11/2024 à 10:30:00 - Favoriser (lu/non lu)
Divulgâchage : 224 octets pour faire un mini-serveur HTTP ? C’est tout à fait possible mais il faudra tout optimiser de partout…
Il y a quelques jours, je suis tombé sur un article intéressant d’Akanoa qui se demandait comment coder un serveur HTTP de moins de 20 Ko. Rien à voir avec le sloweb ; Akanoa déploie une application et a besoin qu’un programme tiers réponde un code 200 en HTTP pour que l’hébergeur considère que tout s’est bien passé.
Après moult péripéties où il explore les possibilités de langages
obscures, il fini par trouver la Lumière dans un code assembleur (x86)
qui répond en HTTP (en IPv4). Le binaire assemblé et lié fait
initialement 5Ko mais avec deux options passées à ld
(--omagic
et --strip-all
), il réduit
l’enveloppe à 376 octets et clôt son périple au pays de l’optimisation
des binaires.
Alors forcément, je n’ai pas pu m’empêcher de me demander ce que ça donnerait avec des technologies futuristes ; une architecture x86-64 et un réseau IPv6… Puis je me suis aussi demandé si on ne pouvait pas faire mieux que ld pour produire un binaire…
Divulgâchage : on peut faire mieux.
Premier code
Avant de chercher à tout optimiser aux petits oignons, on va d’abord écrire un premier code fonctionnel qui servira de référence. Le code qu’on vous propose ici est on ne peut plus classique et reprend les portions que nous avons publié dans Les shellcodes volume 1 :
- Un premier morceau qui gère le réseau et attend les connexions en TCP (cf. « bind shell », page 155),
- Un deuxième morceau qui envoie la réponse HTTP au correspondant (cf. « Envoyer 42 en UDP », page 123),
- Une boucle pour répondre à toutes les connexions entrantes (une étiquette et un saut).
Quitte à reprendre des morceaux, on aurait bien sûr pu compléter la réponse HTTP par l’envoi du contenu d’un fichier (cf. « Envoyer un fichier en UDP », page 135) et ainsi proposer un véritable serveur HTTP, mais ce n’est pas ce que cherche à faire Akanoa (il veut juste répondre un code 200) et ça aurait donc rallongé le binaire inutilement.
Pour ceux qui n’aiment pas lire l’assembleur directement, voici le traditionnel diagramme de flot correspondant à ce qu’on veut écrire. Les rectangles correspondent aux appels systèmes et leur enchaînement est traduit par des flèches pleines. Les parallélogrammes correspondent aux données et leur production et utilisation sont traduites par des flèches grises pointillées.

Pour rester au plus simple, les descripteurs de sockets seront placés
dans des registres et les données statiques (adresse d’écoute et réponse
HTTP) seront placées à la suite du code. Vu qu’on écrit un binaire et
pas un shellcode, on aurait pu placer ces données statiques dans une
section spécifique (i.e. la section .data
) mais
comme on veut optimiser la taille du fichier, on va rester sur le style
shellcode et ainsi économiser une section.
Attention : Contrairement à l’article d’Akanoa qui utilise NASM, nous préférons utiliser gas et c’est donc la traditionnelle syntaxe AT&T que nous utilisons dans les codes qui suivent. Notez aussi les trois premières lignes qui permettent de produire un binaire (et pas uniquement un shellcode).
.section .text
.globl _start
_start:
socket:
mov $0x29, %rax # socket(
mov $10, %rdi # AF_INET6,
mov $0x01, %rsi # SOCK_STREAM,
mov $0x00, %rdx # 0
syscall # ) ;
mov %rax, %r15
bind:
mov $49, %rax # bind(
mov %r15, %rdi # sockfd,
lea addr(%rip), %rsi # *addr,
mov $addrlen, %rdx # addrlen
syscall # ) ;
listen:
mov $50, %rax # listen(
mov %r15, %rdi # sockfd,
mov $1, %rsi # backlog = 1
syscall # ) ;
loop:
accept:
mov $43, %rax # accept(
mov %r15, %rdi # sockfd,
mov $0x0, %rsi # *addr=0,
mov $0x0, %rdx # *addrlen=0
syscall # ) ;
mov %rax, %r14
sendto:
mov $44, %rax # sendto(
mov %r14, %rdi # sockfd,
lea msg(%rip), %rsi # buf,
mov $msglen, %rdx # len,
mov $0, %r10 # flags,
mov $0, %r8 # dest_addr,
mov $0, %r9 # addrlen
syscall # ) ;
close:
mov $3, %rax # close(
mov %r14, %rdi # fd
syscall # ) ;
jmp loop
addr:
.byte 0x0a, 0x00 # sin6_family = AF_INET6
.byte 0x90, 0x1f # sin6_port = 8080
.byte 0, 0, 0, 0 # flowinfo
.byte 0, 0, 0, 0, 0, 0, 0, 0 # sin6_addr 1/2 = IN6ADDR_ANY_INIT
.byte 0, 0, 0, 0, 0, 0, 0, 0 # sin6_addr 2/2
.byte 0, 0, 0, 0 # sin6_scope_id
= . - addr
addrlen msg:
.ascii "HTTP/1.0 200 OK\r\n"
.ascii "Content-length: 2\r\n"
.ascii "\r\n"
.ascii "Ok"
= . - msg msglen
L’assemblage du fichier par gas ne pose pas de problème puisque nous
sommes dans le cas par défaut (x86-64). De même pour ld
puisque nous n’avons pas d’appel à des bibliothèques (le code ne fait
que des appels systèmes).
$ as http.s -o http.o
$ ld http.o -o http
Et puisque c’est la taille qui compte, on va maintenant la mesurer…
$ size -G http
text data bss total filename
236 0 0 236 http
$ du -b http
5200 http
$ du -h http
8,0K http
Pour paraphraser les trois commandes précédentes… Cette première version se traduit en 236 octets d’instructions et données. Le fichier exécutable nécessite 5200 octets car il ajoute des informations d’en-têtes diverses. Et le système en utilise en réalité 8192 puisque le disque est alloué en pages atomiques de 4Kio.
Comme Akanoa, on va maintenant demander à ld de produire un binaire plus minimaliste en supprimant de l’inutile et mesurer l’économie ainsi réalisée.
$ ld http.o -o http --omagic --strip-all
ld: attention: http a un segment LOAD avec les permissions RWX
$ du -b http
568 http
On a presque divisé la taille du fichier par 10 ce qui est plutôt pas mal. Notez que côté espace disque, ça occupe maintenant une seule page de 4096 octets mais on ne pourras pas faire moins. Les optimisations suivantes sont donc artistiques ; belles parce qu’inutiles.
Le tableau suivant résume les tailles (en octets) de la version 32 bits (& IPv4) et notre première version 64 bits (& IPv6). On prend plus de place, mais ce n’est pas vraiment une surprise.
32 bits & IPv4 | 64 bits & IPv6 | |
---|---|---|
Par défaut | 4756 | 5200 |
omagic & strip-all | 376 | 568 |
Instructions & données | 142 | 236 |
Optimisations du code
Maintenant qu’on a une base fonctionnelle, on va pouvoir s’amuser à modifier le code pour réduire la taille du binaire. Certaines optimisations sont générales et peuvent se faire dans n’importe quel code, d’autres sont plus spécifiques à notre cas particulier.
Supprimer les MOV inutiles
Par soucis pédagogique (ou de maintenance), nous avons utilisé une instruction MOV pour placer la valeur de chacun des paramètres des appels systèmes dans leurs registres respectifs. Certaines de ces instructions sont en fait inutiles car la valeur est déjà présente dans le registre cible (ou presque).
Zéro déjà présent
Lorsqu’un programme démarre, lorsque l’instruction de son point d’entrée est exécutée par le processeur, tous les registres sont à zéro (sauf RIP, RSP et autres registres spécifiques). On n’y pense pas avec les shellcodes car le programme hôte a déjà fait des opérations avant que le shellcode ne prenne la main. Mais puisque nous développons ici un programme, pouvons utiliser cette propriété pour optimiser notre code.
Lorsque aucune opération n’a modifié la valeur du registre avant qu’on veuille le mettre à zéro, l’opération est inutile et on peut donc l’enlever. Voici les MOV concernés dans noter programme :
- Dans le bloc
socket
, à destination de RDX - Dans le bloc
sendto
, à destination de R8, R9 et R10.
Supprimer ces 4 instructions nous permet d’économiser 28 octets (7 / instruction).
Valeur déjà présente
De même, il est inutile de placer une valeur lorsqu’elle est déjà présente dans un registre (parce qu’elle y a été placée et n’a pas été modifiée depuis). Voici les MOV concernés :
- Dans le bloc
listen()
, l’identifiant de socket a déjà été placé dans RDI lors de l’appel système précédent (bind()
), - Dans le bloc
close()
, l’identifiant de socket du correspondant a été placé dans RDI lors de l’appel système précédent (sendto()
).
Supprimer ces deux instructions nous permet d’économiser 14 octets de plus.
Valeur présente ailleurs
Parfois, la valeur qu’on veut placer dans le registre n’y est pas encore mais elle existe ailleurs ; dans un autre registre, dans la pile ou en mémoire. Voici les instructions concernées :
Dans le bloc socket()
, mettre 1 dans RSI peut être
obtenu via la valeur de argc
placée au sommet de pile par
le système (car notre programme est lancé sans argument autre que son
nom). Remplacer ce mov
par un pop
nous fait
économiser 6 octets :
mov $0x01, %rsi # 48 c7 c6 01 00 00 00
pop %rsi # 5e
Dans le bloc accept()
, la mise à zéro des registres RSI
et RDX pourrait être obtenue via RBP qui, comme tous les registres qui
n’ont pas été modifié depuis le début, est à zéro. Nous pourrions aussi
remplacer cette instruction par un xor
mais elle n’est pas
plus économique. Dans ces deux cas, nous économisons 4 octets par
instruction :
mov $0x0, %r10 # 49 c7 c2 00 00 00 00
mov %rbp, %r10 # 49 89 ea
xor %r10, %r10 # 4d 31 d2
Valeur inutile
Dans certains cas, nous devons placer une valeur dans un registre mais cette valeur importe relativement peu. Tant qu’on reste dans des bornes acceptables, qu’importe la valeur, le programme répondra à nos attentes.
C’est le cas du deuxième paramètre de l’appel système
listen(2)
. Il spécifie la taille de la file d’attente pour
les requêtes entrantes. Tant que cette valeur est relativement
petite le noyau pourra s’en dépatouiller. Or, le registre
correspondant (RSI), contient à ce moment l’adresse de la structure
définissant l’adresse d’écoute (addr
) qui, même si elle est
grande, ne l’est pas trop.
En supprimant cette instruction, on économise encore 7 octets.
Remplacer des MOV
Maintenant que nous avons supprimé les instructions MOV inutiles, voyons comment optimiser celles qui restent.
8 bits de valeurs, passer par la pile
Lorsqu’on écrit un shellcode, on utilise cette technique pour supprimer les octets nuls dans le binaire produit lorsque la valeur à déplacer est petite (cf. « Cachez ces zéros », page 345). Mais il se trouve qu’elle a aussi le bon goût de réduire la taille des instructions…
Concrètement, plutôt qu’utiliser une instruction de 7 octets pour déplacer notre petite valeur, on va le faire en deux instruction via la pile :
- Un « PUSH imm8 » car la valeur empilée est alors étendue sur 64 bits (en recopiant le bit de signe) ;
- Un « POP r64 » qui dépile cette valeur à destination d’un registre.
Le code suivant montre ce que donne cette technique sur le premier
mov
du code dans l’appel à socket(2)
. Notez
que, contrairement à la tradition qui veut que chaque instruction soit
seule sur sa ligne, nous les avons regroupées par deux (séparées par un
point-virgule) pour mieux rendre la notion de groupes d’instructions qui
en remplacent une.
mov $0x29, %rax # 48 c7 c0 29 00 00 00
push $0x29 ; pop %rax # 6a 29 58
Notez ensuite une petite subtilité de gas. Cet assembleur fonctionne en une seule passe ; si vos variables sont utilisées avant d’être définies, il les considère comme nécessitant 32 bits lorsqu’il écrit l’instruction puis viendra modifier la valeur une fois qu’il la connaîtra. Qu’importe qu’elle utilise en réalité 8 bits ou 16 bits, il ne reviendra pas en arrière pour modifier son instruction.
Par exemple, voici trois variantes de l’instruction qui place la
taille de l’adresse dans le troisième paramètre de l’appel système
bind(2)
. La première est celle non optimisée, la seconde
est optimisée mais conserve une valeur de 32 bits (la variable
$addrlen
est définie après), la troisième utilise la valeur
sans passer par une variable. La traduction en hexadécimal en
commentaire vous montre comment ces instructions sont traduites par
gas.
mov $addrlen , %rdx # 48 c7 c2 1c 00 00 00
push $addrlen ; pop %rdx # 68 1c 00 00 00 5a
push $28 ; pop %rdx # 6a 1c 5a
Sur l’ensemble du code, on économise 4 octets pour chacun des MOV qui ciblent les 8 premiers registres, et 3 octets pour les 3 MOV qui ciblent les 8 derniers registres (R8 à R15) car ils nécessitent un préfixe REX.
32 bits de registres, en 32 bits
Lorsque les 32 bits de poids fort du registre de destination ont déjà la bonne valeur, il est inutile de déplacer les 64 bits du registre ; les 32 de poids faibles sont suffisants.
C’est le cas dans le block accept()
où nous copions RBP
vers les registres RDI et RDX. Leurs 32 bits de poids forts sont déjà à
zéro (RSI contient l’adresse de addr
qui tient sur 32 bits,
et RDI contient addrlen
, soit 28). Nous pouvons donc
remplacer ces instructions 64 bits en 32 bits et conserver le même
résultat :
mov %rbx, %rdi # 48 89 df
mov %ebx, %edi # 89 df
La copie dans R15 (en destination après l’appel à
socket()
puis en source pour les appels à
bind()
, et
listen()
accept()
) est un cas particulier. Ce registre faisant
partie des nouveaux, nous devons systématiquement utiliser le préfixe
REX pour l’identifier. Même si nous faisons une opération sur 32 bits,
le préfixe changera mais restera obligatoire. Nous allons donc remplacer
ce registre R15 par un autre qui n’est pas utilisé dans notre code ; RBX
(et donc EBX en 32 bits).
Voici les variantes et leur traduction en hexadécimal.
mov %rax, %r15 # 49 89 c7
mov %eax, %r15d # 41 89 c7
mov %rax, %rbx # 48 89 c3
mov %eax, %ebx # 89 c3
bind:
/* ... */
mov %r15, %rdi # 4c 89 ff
mov %ebx, %edi # 89 df
Nous économisons ainsi 1 octet par instruction, soit 3 au total ici puisque nous avons une écriture et deux lectures. Nous verrons dans la section suivante comment en gagner 2 de plus.
Entre registres, par la pile
La copie dans R14 a le même problème ; nous ne pouvons pas garder
R14. Par contre, vu que nous n’avons qu’une écriture (après
accept()
) et une lecture (dans sendto()
), nous
pouvons passer facilement par la pile en remplaçant l’écriture par un
push
et la lecture par un pop
.
accept:
/* ... */
mov %rax, %r14 # 49 89 c6
push %rax # 50
sendto:
/* ... */
mov %r14, %rdi # 4c 89 f7
pop %rdi # 5f
Nous économisons ici 2 octets par instruction, soit 4 au total.
Nous pouvons maintenant utiliser cette technique pour gagner 2 octets dans la manipulation de l’identifiant de la première socket (stockée initialement dans R15 puis dans RBX).
Pour commencer, nous remplaçons l’écriture par un push
et la première lecture (dans l’appel à bind()
) par un
pop
. L’appel à listen()
utilise aussi cet
identifiant mais il est dans le même registre et nous n’avons rien à
faire. Voici à qui ressemblent ces trois blocs à ce stade des
optimisations.
socket:
push $0x29 ; pop %rax # socket(
push $10 ; pop %rdi # AF_INET6,
pop %rsi # SOCK_STREAM,
# 0
syscall # ) ;
push %rax
bind:
push $49 ; pop %rax # bind(
pop %rdi # sockfd,
lea addr(%rip), %rsi # *addr,
push $28 ; pop %rdx # addrlen
syscall # ) ;
listen:
push $50 ; pop %rax # listen(
# sockfd,
# backlog = 1
syscall # ) ;
L’appel à accept()
nécessite plus d’attention. S’il
était seul, nous n’aurions rien à écrire puisque la valeur est déjà là
(depuis l’appel à bind()
), mais nous sommes ici dans le
corps de la boucle principale. Lors de la deuxième itération, c’est
l’identifiant de la socket utilisée pour écrire le message (et
ensuite fermée) qui sera dans ce registre.
Nous devons donc récupérer la valeur de la première socket à chaque itération (à un moment où elle est sur le sommet de la pile). Et donc la placer au sommet de pile à chaque itération (à un moment où elle est dans un registre).
Le code suivant vous montre notre solution. La socket est sauvegardée juste après l’appel système et restaurée juste avant le saut vers l’itération suivante. Chaque itération commence donc avec la valeur de cette socket dans le bon registre (c’est un invariant de boucle). Voici cette partie du code à ce stade de nos optimisations.
loop:
accept:
push $43 ; pop %rax # accept(
# sockfd,
mov %ebp, %esi # *addr=0,
mov %ebp, %edx # *addrlen=0
syscall # ) ;
push %rdi
push %rax
sendto:
push $44 ; pop %rax # sendto(
pop %rdi # sockfd,
lea msg(%rip), %rsi # buf,
push $0x28 ; pop %rdx # len,
# flags,
# dest_addr,
# addrlen
syscall # ) ;
close:
push $3 ; pop %rax # close(
# fd
syscall # ) ;
pop %rdi
jmp loop
Nous utilisons ainsi 4 octets pour manipuler cet identifiant de
socket contre 6 avec trois mov
utilisant EBX (ou 9
initialement avec R15). Ce n’est pas beaucoup, mais vu le peu d’octets
qu’ils reste, ça fait une différence.
Remplacer RIP par RCX dans LEA
Le code contient deux instructions LEA pour charger une adresse dans un registre. Parce que c’est bien pratique, cette adresse est calculée par rapport à RIP (c’est à dire par rapport à la prochaine instruction). Voici ces instructions et leur traduction en hexadécimal (à ce stade des optimisations) :
lea addr(%rip), %rsi # 48 8d 35 55 00 00 00
/* ... */
lea msg(%rip), %rsi # 48 8d 35 0d 00 00 00
Comme vous pouvez le voir, les adresses relatives tiennent facilement sur 8 bits mais l’instruction en utilise 32. Et ce n’est pas la faute de gas qui utilise 32 bits partout mais une limitation de l’architecture ; l’adressage relatif à RIP a été ajouté sous forme d’exception dans l’octet ModR/M et seules les adresses de 32 bits sont prévues.
Dans un shellcode traditionnel, nous pourrions utiliser la
technique du jmp/call/pop
(page 64 pour la version 64 bits
et page 96 pour la version 32 bits). Comme le montre le code suivant où
nous avons implémenté la technique, nous ajoutons 8 octets et n’en
économisons que 7, ce qui n’est pas rentable.
_start:
jmp data # eb 3c
start:
pop %rbx # 5b
/* bind() ... */
lea 0x28(%rbx), %rsi # 48 8d 73 28
/* sendto() ... */
mov %rbx, %rsi # 48 89 de
/* ... */
data:
call start # e8 bf ff ff ff
msg:
/* ... */
On pourrait alors se tourner vers la technique du
call $+5
(page 70). Comme le montre le code suivant, elle
n’est pas rentable non plus car nous ajoutons 6 octets pour n’en
économiser que 6…
_start:
call start # e8 00 00 00 00
start:
pop %rbx # 5b
/* bind() ... */
lea 0x65(%rbx), %rsi # 48 8d 73 65
/* sendto() ... */
lea 0x3d(%rbx), %rsi # 48 8d 73 3d
/* ... */
Le problème des techniques précédentes, c’est que nous gaspillons trop d’instructions pour obtenir une adresse dans un registre. Pouvons nous économiser cette phase ?
La réponse est oui, en exploitant les appels systèmes (page 73). Car
lors de chaque instruction syscall
, le processeur copie
l’adresse de la prochaine instruction dans RCX. Ça permet au noyau de
revenir là où il a été appelé. Ça veut aussi dire que, dans noter code,
RCX contient en permanence l’adresse de l’instruction qui suit le
dernier syscall
exécuté.
Tout ce qu’il nous faut, c’est calculer l’adresse relative de la
donnée et cette instruction après un syscall
. Vous pourriez
le faire à la main mais voici comment procéder avec l’aide de
objdump
. Commencez par écrire les instructions LEA avec une
adresse relative factice (i.e. 0xff
), assemblez le
code avec as
puis inspectez-le avec objdump
comme suit (les passages inutiles sont caviardés) :
$ as -o http-01.o http-01.s
$ objdump -d http-01.o
[...]
0000000000000000 <_start>:
[...]
7: 0f 05 syscall
9: 50 push %rax
000000000000000a <bind>:
[...]
e: 48 8d 71 ff lea 0xff(%rcx),%rsi
[...]
000000000000003c <addr>:
[...]
Dans l’appel à bind()
, l’instruction lea
a
besoin de connaître la distance entre l’adresse réseau (en
0x3c
) et l’instruction qui suit le précédent
syscall
(le push
en 0x09
). Elle
vaut donc 0x3c - 0x09 = 0x33.
Un calcul similaire permet d’obtenir l’adresse relative du message
(en 0x58
) par rapport à l’adresse suivant le dernier
syscall
(le push %rdi
du block
accept()
, en 0x25
) et d’obtenir 0x33 (c’est
une coïncidence).
On économise alors 3 octets par instruction lea
sans
besoin d’ajout d’instructions supplémentaires.
Code final
Voici le code une fois toutes ces optimisations faites :
.section .text
.globl _start
_start:
socket:
push $0x29 ; pop %rax # socket(
push $10 ; pop %rdi # AF_INET6,
pop %rsi # SOCK_STREAM,
# 0
syscall # ) ;
push %rax
bind:
push $49 ; pop %rax # bind(
pop %rdi # sockfd,
lea 0x33(%rcx), %rsi # *addr,
push $28 ; pop %rdx # addrlen
syscall # ) ;
listen:
push $50 ; pop %rax # listen(
# sockfd,
# backlog = 1
syscall # ) ;
loop:
accept:
push $43 ; pop %rax # accept(
# sockfd,
mov %ebp, %esi # *addr=0,
mov %ebp, %edx # *addrlen=0
syscall # ) ;
push %rdi
push %rax
sendto:
push $44 ; pop %rax # sendto(
pop %rdi # sockfd,
lea 0x33(%rcx), %rsi # buf,
push $0x28 ; pop %rdx # len,
# flags,
# dest_addr,
# addrlen
syscall # ) ;
close:
push $3 ; pop %rax # close(
# fd
syscall # ) ;
pop %rdi
jmp loop
addr:
.byte 0x0a, 0x00 # sin6_family = AF_INET6
.byte 0x1f, 0x90 # sin6_port = 8080
.byte 0, 0, 0, 0 # flowinfo
.byte 0, 0, 0, 0, 0, 0, 0, 0 # sin6_addr 1/2 = IN6ADDR_ANY_INIT
.byte 0, 0, 0, 0, 0, 0, 0, 0 # sin6_addr 2/2
.byte 0, 0, 0, 0 # sin6_scope_id
msg:
.ascii "HTTP/1.0 200 OK\r\n"
.ascii "Content-length: 2\r\n"
.ascii "\r\n"
.ascii "Ok"
Le tableau suivant reprend les tailles précédentes et ajoute une colonne avec notre version optimisée. Nous avons fait mieux pour les instructions et leurs données, mais le programme complet reste plus grand que la version 32 bits…
32 bits & IPv4 | 64 bits & IPv6 | Optim. Code | |
---|---|---|---|
Par défaut | 4756 | 5200 | 5088 |
omagic & strip-all | 376 | 568 | 464 |
Instructions & données | 142 | 236 | 128 |
Optimiser l’exécutable
Les en-têtes du fichier
Puisque c’est la taille du binaire qui compte, et pas celle des instructions et leurs données, on va maintenant s’attaquer à réduire la taille du fichier ELF. Un peu comme ce que ld a fait lorsqu’on lui a passé les deux options, mais à la main, et en bien plus drastique…
L’idée est de créer l’en-tête ELF Minimale qui ne comprendra donc qu’une en-tête de fichier suivie d’une en-tête de [section de] programme. La création n’est pas très compliquée, il suffit de suivre la documentation officielle…
En-tête ELF
Cette première partie de 64 octets (soit 0x40 en hexadécimal) contient des champs permettant d’identifier le fichier comme étant un fichier ELF 64 bits exécutable et autres détails pratiques pour le système. Entre autre : trouver où sont les prochains en-têtes de sections.
Voici son contenu où nous avons mis, en commentaire, le nom du champ officiel suivi d’une description ou de la valeur (suivant lequel est le plus intéressant d’après nous).
# https://refspecs.linuxbase.org/elf/gabi4+/ch4.eheader.html
.byte 0x7f, 'E',
24 millions et moi, et moi… : un tiers de la population « défavorablement connue » de la police - Next
Liens en vrac de sebsauvage par Anonyme le 08/11/2024 à 11:03:00 - Favoriser (lu/non lu)
This Single Rule Underpins All Of Physics - YouTube
Rss sur "le hollandais volant" par Anonyme le 05/11/2024 à 12:53:00 - Favoriser (lu/non lu)
Euler, Newton, Lagrange, Bernoulli… ces gars là sont les super-stars des mathématiques de la renaissance et après, mais c’est assez drôle de voir, tel que c’est conté ici, que ce qui a commencé avec Newton, termine avec Newton et sa seconde loi.
En tout cas c’est toujours passionnant.
— (permalink)