......................... _______ _______ ________ ........................
........................ ╱╱ ╲╱ ╱ ╲╲╱ ╲ .......................
....................... ╱╱ __╱ ╱╱ _╱ .......................
...................... ╱ ╱ ╱ ╱- ╱ ........................
...................... ╲________╱╲___╱____╱╲_______╱╱ .........................
G R E N O B L E :: H A C K E R S P A C E
>> Téléchargez l'archive tar.gz | .sig
>> Voir la version html | txt
__9600__ __9600__ __9600__ __9600__ __9600__ __9600__ __9600__ __9600__
\___ \ \_____ \ \_____ \ \_____ \ \_____ \ \_____ \ \_____ \ \_____ \
_(__ < _(__ < _(__ < _(__ < _(__ < _(__ < _(__ < _(__ <
/ \ / \ / \ / \ / \ / \ / \ / \
/_--___ //___-__ //--__-_ //___--_ //__-_-_ //__---_ //___--_ //_--___ /
0011100\/00110110\/ 0110000 \/0110000\/01100010 \/1100001 \/1110101 \/1100100\/
1110011 00100000 01101110 01101111 00110011 ... . . . . .
_____/\\\\\\\\\_______________/\\\\\_____/\\\\\\\________/\\\\\\\____
___/\\\///////\\\_________/\\\\////____/\\\/////\\\____/\\\/////\\\__
__/\\\______\//\\\_____/\\\///________/\\\____\//\\\__/\\\____\//\\\_
_\//\\\_____/\\\\\___/\\\\\\\\\\\____\/\\\_____\/\\\_\/\\\_____\/\\\_
__\///\\\\\\\\/\\\__/\\\\///////\\\__\/\\\_____\/\\\_\/\\\_____\/\\\_
____\////////\/\\\_\/\\\______\//\\\_\/\\\_____\/\\\_\/\\\_____\/\\\_
__/\\________/\\\__\//\\\______/\\\__\//\\\____/\\\__\//\\\____/\\\__
_\//\\\\\\\\\\\/____\///\\\\\\\\\/____\///\\\\\\\/____\///\\\\\\\/___
__\///////////________\/////////________\///////________\///////_bauds
ISSUE No 3 - Avril 2026
9600@ghspace.fr
#9600 sur irc.libera.chat
. . . . . ... 00110011 0011100 00110110 0110000
__1110011_0110000_01100010_1100001_1110101_1100100 00100000_01101110_01101111_
\_____ \ \_____ \ \_____ \ \_____ \ \_____ \ \_____ \ \_____ \ \_____ \
_(__ < _(__ < _(__ < _(__ < _(__ < _(__ < _(__ < _(__ <
/ \ / \ / \ / \ / \ / \ / \ / \
/__9600__//__9600__//__9600__//__9600__//__9600__//__9600__//__9600__//__9600__/
┌────────────┐
│ DISCLAIMER └─────────────────────────────────────────────────────────────────┐
│ Ce zine est une oeuvre collective, à but informatif, écrite par des gens qui |
| savent (parfois) ce qu'ils font. En aucun cas ils ne peuvent être tenus |
| responsables de vos bêtises. │
└──────────────────────────────────────────────────────────────────────────────┘
-- INFO --
9600 bauds est un ezine inter-hackerspaces francophones à l'initiative de
GRENOBLE HACKERSPACE. Vous pouvez partager vos projets, vos actualités, vos
réflexions, vos tutoriels, vos retours d’expérience, ou tout autre contenu de
votre communauté dans un format volontairement minimaliste et nostalgique
-- EDITO --
18h43. J'me fais chier.
Mon café est FRoid, mon cerveau tout MOuS. J'me fait chier.
En plus je suis dans le train, départ à Cannes, 5h de route...
J'Me FaIT CHIeR!
Mais bon c’est comme ça, alors on va vite vite ce sortir les doigts du CuL et
sortir ce zine. De toute façon t’as pas le choix tu t'es motivé, Z’ont été
beaucup à écrire. Et j'ai enfin fini de tout me taper!
Le premier numéro a bien marché (trop bien), le second a fini dans les poubelles
(pas grave, on feras mieux), et comme on dit, jamais deux sans trois! Merci
encore à celleux qu'on pris le temps et l'énergie pour écrire des zolis trucs,
pleins de sup3rbes idées. Franchement chapotte, pour avoir tout lu, z'allez pas
êtres déçus :D
____---________________- ___________________--__________________^__
___ ___ ___ ___ ||| ___ ___ ___ ___ ___ | __ ,----\
| | | | | | | |||| | | | ..| | | | | | | | | |_____\ tut!
|___| |___| |___| |___|||| |___| |___| |___| | O | O | | | | \ tut!
OUiiiiiiiigo ||| |___|___| | |__| )
____-_-_-_-_-_-_-__-___|||_____-_-_-_-_-_-______________|__===_________/
||| /--------
------[OO]-[OO]---------'''----_-_-_------[OO]-[OO]--------_-_---' Ziiiiioooonnn
Biz.
Beemo / Staff 9600
┌──────────┐
│ SOMMAIRE └───────────────────────────────────────────────────────────────────┐
│ 00.TXT : Sommaire et Présentations .............................. Staff 9600 │
│ 01.TXT : Petit traité de sabotage collectif ......................... Cha-0s |
│ 02.TXT : Camp Trip report: WHY2025 ................................. Xylitol |
│ 03.TXT : Développement de driver sous Windows 11: Leçon 2 .......... Xylitol |
│ 04.TXT : Le chiffonnier bénévole d'internet ........................... ANoN |
│ 05.TXT : Android sur x86 ? ............................................. Ako |
│ 06.TXT : Archive photo sur android avec syncthing ...................... nap |
│ 07.TXT : Transformer du texte en musique ............................ Aucuno |
│ 08.TXT : Schem-ASCII ................................................. Beemo |
└──────────────────────────────────────────────────────────────────────────────┘
-- CONTACT --
Tu peux nous contacter via :
- IRC: #9600 sur irc.libera.chat 6667
- EMAIL: Staff 9600 <9600@ghspace.fr>
Besoin de confidentialité ?
-----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEaMau5BYJKwYBBAHaRw8BAQdAIriSQTvU+voZh3ol3A5lZpOzO0Hf4a3ie5dc
0TAcQTy0HFN0YWZmIDk2MDAgPDk2MDBAZ2hzcGFjZS5mcj6IkwQTFgoAOxYhBDxY
ZnlHx05Ta/BFq3t6TmyI4pAlBQJoxq7kAhsDBQsJCAcCAiICBhUKCQgLAgQWAgMB
Ah4HAheAAAoJEHt6TmyI4pAl4rUA/2RhQ1zFNjG1sbpYn2yhd4vW6ELWv3jbHSbv
k9hxhFAYAP436htohxy36vUY/lZAaShInBXd3ThVcfgbGZ04rfy7BLg4BGjGruQS
CisGAQQBl1UBBQEBB0BXqqHHKxM0ZPHJty2Hzn8MGL5Mn1R6BiaGbCDqW122UgMB
CAeIeAQYFgoAIBYhBDxYZnlHx05Ta/BFq3t6TmyI4pAlBQJoxq7kAhsMAAoJEHt6
TmyI4pAlog4A/2/eb+Y/CwJhIJ8WUS3ftNw6Yi929SBizt9JAu5eVpACAQCyu6ku
/U2Zk/Ia96Lc3J0CoresASYjVc2vjt+7V9uVAQ==
=Rvqt
-----END PGP PUBLIC KEY BLOCK-----
Ah oui, j'oubliais... Nous sommes toujours ouvert à de nouveaux articles.
Donc si vous voulez contribuer aux prochains numéro, envoyer nous votre
proposition déja formatté par email. Aussi, si vous pensez avoir du temps et
les compétences, le comité éditorial est ouvert à candidature.
#- , /~/' ,--,
_/`, ,/'/' /'/~
.;--_~_-_~_-_~_;. .'___|/ /____/'/' __/| .. ~
|| 9600 bauds! || /~ __ `\ /~~, /' . #
~-#~-#~-#~-\| ' _,-,__/' , \ /'/~/ /' ~-
` .~ ` \_/ / , "~_/' ,-'~~~~~---,_
`, `~ `~~~| /' ~~\__ `~\_ :,
. |~~~/ `~---,__ _, /' | /~~\ _/' ~~\ `~,
|/\`\ /' _,-~/ /' .' __ `/' `~\ \
|~~~/ `\`\ `-\/\/~ /' .' | `| \/ | `\_ |
|/\`\ `,`\ /' |_ ,' /~\ /' |' | `\ \~\|
`\`\ _/~~_/~' /' /' ~~/ / `\ `\, | \ |
~/ `\`\/~ _/~ ~/~~~~\/' `\__/' \/\ `\_/\ `\~~\ |
\`\ _/~' \ /~~' `~~~\`~~~' `~~' `'__
`\`\/~ _/~\ `\ /' _/ `\ _,-'~~ |
`\_/~ `\ `\ _|--' | `\ |'
`\ `\ /' _/' | /' /\|'
/\/~~\-/' _,-' | /' /' `
|_`\~~~/`\ /~ \/~~' /'
|`\~ \ `\ `\ `| /'
-- EOF --
_____/\\\\\\\\\_______________/\\\\\_____/\\\\\\\________/\\\\\\\____
___/\\\///////\\\_________/\\\\////____/\\\/////\\\____/\\\/////\\\__
__/\\\______\//\\\_____/\\\///________/\\\____\//\\\__/\\\____\//\\\_
_\//\\\_____/\\\\\___/\\\\\\\\\\\____\/\\\_____\/\\\_\/\\\_____\/\\\_
__\///\\\\\\\\/\\\__/\\\\///////\\\__\/\\\_____\/\\\_\/\\\_____\/\\\_
____\////////\/\\\_\/\\\______\//\\\_\/\\\_____\/\\\_\/\\\_____\/\\\_
__/\\________/\\\__\//\\\______/\\\__\//\\\____/\\\__\//\\\____/\\\__
_\//\\\\\\\\\\\/____\///\\\\\\\\\/____\///\\\\\\\/____\///\\\\\\\/___
__\///////////________\/////////________\///////________\///////_bauds
┌────────────────────────────────┐
│ ISSUE No 3 - Avril 2026 01.TXT └─────────────────────────────────────────────┐
| Petit traité de sabotage collectif |
| Cha-0s |
| Liège Hackerspace (Liège) |
└──────────────────────────────────────────────────────────────────────────────┘⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡤⣤⠆⠀⢲⡤⢤⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⣦⠀⠀⠀⢸⣇⢻⡇⠀⣸⡇⣾⠃⢠⣶⡉⠱⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣿⡄⠹⣧⡀⠀⠸⠇⠘⠓⠀⠛⠃⠘⠦⢻⣇⠘⠀⠀⠀⣠⠕⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠰⠛⠻⣦⠈⠿⠶⠋⢁⣀⣤⣶⣶⣾⣿⣿⣶⣶⣦⣤⣀⠀⠀⢴⠟⢣⣼⠟⠁⢠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⣄⠀⢻⠀⠀⢀⣤⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣶⣤⠈⠀⢾⠋⠀⣠⣾⠦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠚⡄⠀⠙⠛⠋⢀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⡀⠐⢿⠋⠀⠀⢀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀ ⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠠⠛⠛⠛⢷⠆⠀⣤⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣄⠈⢡⣴⠾⠛⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⣿⣿⣿⣿⣿⣿⠟⠉⠀⠀⠀⠈⠙⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡄⠧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⠃⣀⣶⣶⣶⣦⡈⠀⠈⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⠰⡿⣿⣿⢛⠛⣿⡄⠀⠀⠙⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡯⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀ ⠀ ⠀⠀⠀⠀⠀⠀⠀⣸⡄⠀⠀⠀⢿⣿⣿⣿⣿⣿⠄⢀⠄⢷⣇⢉⣬⣿⠘⠀⠀⠀⣹⣿⣿⣿⣿⣿⣿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀ ⠀ ⠀ ⠀⠀⠀⠀⠀⠀⠸⠀⠀⠀⠀⠘⣿⣿⣿⣿⡟⠀⠸⣴⠸⡽⠻⢿⡟⠀⢡⡀⠀⠀⠙⢻⣿⣿⣿⣿⣿⣿⠁⠀⠀⠠⡧⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀ ⠀ ⠀ ⠀⠀⠀⡀⠀⠀⠀⠀⠀⠀⣀⠀⠀⠹⣿⣿⣿⡧⣠⣤⡈⠀⡠⢰⡆⠀⠀⢸⢿⡟⢀⠂⠄⡄⢹⣻⣿⣿⠁⠀⠀⠀⠀⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀ ⠀ ⠀ ⠀⠀⠒⡗⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣭⣭⢭⣾⣿⣿⣷⡀⠉⠀⠀⠀⠀⣜⡾⠀⡐⡈⡐⢀⢺⣿⣮⢡⣴⣶⣤⣄⡀⠀⠀⠀⠀⠐⠒⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀ ⠀ ⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣴⣿⣿⣿⣵⣿⣿⢻⡿⣿⣿⣦⣀⡠⢤⣎⣼⠃⢁⠐⠄⡘⠀⢾⢿⣿⣷⣝⣿⣿⣿⣷⣆⢀⣀⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀ ⠀⠀ ⠀⠀⠀⠀⣠⣾⣿⣿⣿⣿⣿⣿⣫⣿⣿⣿⣿⢸⡳⣿⣿⣎⢷⣿⣿⣿⠇⠀⠂⠌⠐⡀⠁⣾⣿⡿⣿⡿⠷⣛⣛⣿⡻⣿⣿⣿⣿⣷⣀⣀⣀⡀⠀⠀⠀⠀⠀⠀
⠀⠀ ⠀⢠⣀⣀⣄⠠⢿⣿⣿⣽⣾⣗⣲⣭⣽⣿⣿⣿⡿⢸⣿⢻⡿⣿⣧⣻⢿⠇⠀⠌⠂⣈⠒⢀⢱⣇⣻⢿⣿⣿⣿⣿⣿⣿⣿⣶⣯⣭⣭⣭⠽⠿⢿⡛⠂⠀⠀⠀⠀⠀
⠀⠀ ⣐⠖⠒⢲⣍⣫⣭⡇⢻⣽⣿⣿⣿⣿⢿⣿⣿⣿⡟⣹⢸⣿⡼⣿⣿⣿⣿⠃⠀⡰⢈⠂⠤⡈⠀⣽⣿⣰⡹⣿⣿⡿⠿⣿⠿⢿⣟⣽⣿⢫⡔⠿⢛⣥⣀⠀⠀⠀⠀⠀⠀
⠉⠐⠚⠉⠈⠀⣿⡎⣿⣷⣯⣛⣻⠿⣿⣿⢟⣼⣽⣾⣿⣥⣙⢿⡿⠃⢠⠘⡀⠆⠉⣐⣠⣤⣭⣝⡛⡟⣝⢿⣿⣿⣿⣿⣿⣿⣿⢣⣹⡿⠯⢝⠯⣂⠯⣂⠀⠀⠀⠀
⠀ ⠀ ⠀⠀⠀⠀⠀⠀⣿⣧⣿⣿⣿⣿⣿⣿⡿⣫⣿⣿⣿⣿⣿⣿⣿⣷⡄⢘⡀⠆⡁⣠⣾⣿⣿⣿⣿⣿⣿⣾⣿⣷⡝⢿⣿⣿⣿⣿⣿⢼⣿⣿⣿⡆⠈⠀⠉⠀⠀⠀⠀⠀
⠀ ⠀⠀⠀⠀⠀⠀⠀⢻⣿⣻⣿⣿⣿⢟⣯⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⣴⣶⣶⣶⣭⣻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣝⢿⣿⣿⣿⢸⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀ ⠀ ⠀⠀⠀⠀⠀⠀⠈⢟⡽⠿⠋⠀⠙⠻⠿⠿⠿⠿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⣿⣿⣿⣿⣿⣿⠿⠋⠉⠛⠋⠛⠿⣧⢿⣿⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⠙⠉⠉⠁⠀⠉⠉⠉⠉⠉⠀⠀⠀⠉⠉⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀ ⠀ ⣤⠠⣄⠀⢤⡄⠀⠤⡤⠀⡄⢤⡄⠠⣤⢤⡄⣠⡄⢤⡀⢀⠤⣄⠀⣤⡄⢠⣤⠀⣤⢠⢤⡤⠤⢀⣤⠀⣤⡄⠀⡠⠤⡄⣤⡄⠠⡄⠤⣤⡄⠄⠠⢤⠄⠀⠀⠀⠀⠀
⠀ ⠀⣿⠀⢹⠇⢸⡇⠘⢷⣤⢰⡧⢼⡇⠐⣿⠘⠃⢸⡇⠞⢱⣿⠀⣿⠀⣿⡇⢸⠹⣦⡇⠀⢸⡇⠀⢸⢹⣖⢹⡇⢸⡇⠰⠀⠈⢻⣤⡇⠀⣿⡇⠀⠻⣦⡄⠀⠀⠀⠀⠀
⠀ ⠀⠿⡤⠞⠀⠼⢇⢤⡬⠋⠼⠇⠸⠇⠰⢿⠀⠀⡼⢇⠀⠘⠿⡤⠛⠀⠿⠇⠸⠄⠹⢧⠀⠸⢇⠀⠸⠸⠛⠸⢧⠘⢧⡤⠀⠴⡈⠿⢇⠀⠿⠇⠠⣤⠝⠁⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
Cha0s
Petit traité de sabotage collectif ou
Les 12 commandements du chaos organisationnel
Vous aussi vous voulez mettre en place un “collectif” ?
Voici quelques règles qui vous permettront d’éviter les
problèmes, toute forme de structuration formelle et claire et
toute blessure d’ego.
~~
1. N’édictez pas de règles explicites, laissez-faire
Le flou est un mode de régulation, jamais un problème.
L’opacité permet une prise de décision simple.
~~
2. Centralisez le pouvoir
L’idéal c’est de rendre une personne indispensable.
Mettez tous les moyens de contrôle en ses mains.
~~
3. Réglez les conflits individuellement.
L’idéal, c’est que la personne “indispensable”
occupe également le rôle de médiateur.
Arrangez-vous pour en choisir une que les conflits mettent
I only mal à l’aise.
~~
4. Tolérez les privilèges
~~
5. Tuez toute prise d’initiative dès la naissance
Critiquez, déniez, rabaissez, épuisez
~~
6. Variez les registres de justification
Si quelqu’un a le malheur de vous tenir un processus
argumentatif avec des faits observables, déniez ses
observations avec des considérations personnelles et
un registre psychologique.
Si quelqu’un a le malheur de vous présenter son ressenti,
assurez-vous de le dénier avec des arguments techniques.
~~
7. Si vous avez fait fi du point 1 et que vous avez édicté
des règles, assurez-vous de ne pas prévoir de sanction.
~~
8. Si vous avez fait fi des points 1 et 7, assurez vous
de ne jamais mettre en oeuvre la sanction.
Soyez à l’image du droit international.
~~
9. Assurez-vous que la personne “indispensable” se plaigne,
beaucoup, tout le temps.
Tout le monde a le droit de ventiler après tout.
~~
10. Faites en sorte que les gens qui s’investissent s’épuisent
Une fois qu’ils sont épuisés, assurez-vous de les encourager
à ne plus venir. Ce sont eux qui exagèrent.
~~
11. Ne respectez pas les libertés des autres. Vous seul comptez
~~
12. N’ayez aucune espèce de respect pour le travail
de maintenance des autres.
Et surtout, ne vous excusez jamais
- Quelqu’un a nettoyé les toilettes ?
Pissez à côté
- Quelqu’un a nettoyé la photocopieuse ?
Ajoutez de la poussière et des crasses dessus
- Quelqu’un a nettoyé la machine à café ?
Laissez la tourner pour que le bac déborde
- Quelqu’un a passé l’aspirateur ?
Jetez vos crasses par terre
- Quelqu’un a rangé les outils ?
Utilisez les puis laissez les où vous les avez utilisés
- Quelqu’un a amené du nouveau matériel ?
Détruisez le
~~
.==========. .==========.
// I .'..' \ // VII..'.. \
|| II .'..' | || VIII,'.' |
|| III .'." | || IX.'".'. |
|| IV ,','. | || X .'..', |
|| V '..'.' | || XI ..'." |
|| VI.'.,". | || XII ...' |
jgs .\___________/ .\___________/
-- EOF --
_____/\\\\\\\\\_______________/\\\\\_____/\\\\\\\________/\\\\\\\____
___/\\\///////\\\_________/\\\\////____/\\\/////\\\____/\\\/////\\\__
__/\\\______\//\\\_____/\\\///________/\\\____\//\\\__/\\\____\//\\\_
_\//\\\_____/\\\\\___/\\\\\\\\\\\____\/\\\_____\/\\\_\/\\\_____\/\\\_
__\///\\\\\\\\/\\\__/\\\\///////\\\__\/\\\_____\/\\\_\/\\\_____\/\\\_
____\////////\/\\\_\/\\\______\//\\\_\/\\\_____\/\\\_\/\\\_____\/\\\_
__/\\________/\\\__\//\\\______/\\\__\//\\\____/\\\__\//\\\____/\\\__
_\//\\\\\\\\\\\/____\///\\\\\\\\\/____\///\\\\\\\/____\///\\\\\\\/___
__\///////////________\/////////________\///////________\///////_bauds
┌────────────────────────────────┐
│ ISSUE No 3 - Avril 2026 02.TXT └─────────────────────────────────────────────┐
| Camp Trip report: WHY2025 |
| Xylitol <xylitol@temari.fr> |
| HACKGYVER HACKERSPACE (Belfort) |
└──────────────────────────────────────────────────────────────────────────────┘⠀
.
... :... .. . :
: --------------------------
: sHARE aND eNJOY !
: --------------------------
;
. .:.... . .
: * H A C K G Y V E R 2 . 0 *
:
: ..... ..... ..... ..... ..... ..... ..... .... .
: : [trip report] : : : : : : : : : : : :
: : : : : : : : : : : : : : : : : :
_ __:___:__ : ._:_ :_. : : : ' ' ' ' ' ' ' :
//_ | / ¬/_/ |_:_._:_._:_.::::::. .:::::. ::::::. ::::::. :
: \ || /! | ¬! | ¬! ::: ::: ::: ::: ::: :
: \ /\ / |. ' |. | |.:::::' ::: ::: .:::::' ::::::. :
: :\ /\ \ !:. . !:. ' !:::... ::. ::: :::... :: :
: : \ / \___\!___|___!__ __!::::::: ':::::' ::::::: ::::::: :
: : \ / : : : : /___\ . + 9600bauds03.tar.gz+ . . .
: : : : : : : : : : . . . . . : : :
: : : : : : : : : : : : : : : [02.TXT] :
. ..: :...: :...: :...: :...: :...: :...: :....: :...:
Et voilà, on est déjà en avril 2026... bientôt l'été et les vacances.
L'occasion de revenir sur un camping hackers auquel le Hackgyver a participé
l'année dernière...
Ce papier a pour but de vous présenter ce type de camping (ici la WHY2025)
et de synthétiser mon expérience là-bas.
Ce texte va être assez long car il s'est passé beaucoup de choses sur place et
j'en ai omis encore beaucoup...
Pour ceux qui préfèrent une version "TL;DR", la voici,
sinon vous pouvez skip le premier chapitre "Intro".
-- TL;DR --
WHY2025, c'est un grand camp hacker en plein air aux Pays-Bas (~3750 personnes),
où les participants montent leurs "villages" et font vivre un événement autogéré
(infra, bénévolat, confs, fêtes, ateliers) pendant 5 jours, non-stop.
Avec le Hackgyver, on a participé au montage du village français ("Lambda") près
du party stage (zone bruyante assumée), avec barnum loué à l'orga, une douzaine
de campeurs, et une ambiance très "camp" : apéros, musique, rencontres,
et entraide...
Plus quelques visites quotidiennes de la team Cohesion pour nous demander de
baisser le son.
Côté logistique, je suis venu en avion (plus léger niveau matos), avec une liste
"couple" pour ne rien oublier, un peu de provisions achetées à Amsterdam, et un
budget global d'environ 2421 € pour deux sur ~7 jours (transports, hôtels
tickets + merch, équipement camping, dépenses sur place).
Sur place : accueil nickel, shuttle depuis Alkmaar, kit de bienvenue,
infrastructures solides: eau, électricité, internet, DECT), mais aussi une
grosse panne électrique régionale le premier jour qui a annulé les confs et
perturbé les paiements.
Moments forts: bénévolat avec la team Badge (assemblage + epoxy/UV),
CTF + chasse aux “secret tokens”, carte ping-pong VS Chaospost, installations
artistiques (beaucoup de feu), release party de Phrack,
fondue avec Brittany Fairies, live-coding/demoscene projeté sur le barnum,
et une fin de camp en mode teardown + retour chargé en souvenirs et goodies
(avec un trip report vidéo "Game Boy camera" monté après).
-- Intro --
WHY2025 est un camp de hackers en plein air qui se déroule tous les 4 ans aux
Pays-Bas.
Cette année c'était à Geestmerambacht, qui est à environ 42 km au nord
d'Amsterdam.
La WHY2025 succède à MCH, SHA, OHM, et bien d'autres précédents camps, et c'est
le 2e plus gros camping pirate d'Europe avec 3750 personnes pour cette édition
En comparaison le CCCamp en Allemagne c'est 5000 personnes.
Le concept de la WHY et des campings pirates de manière générale sont simples:
les gens viennent du monde entier et construisent leur propre village à
l'intérieur de la zone de camping (village belge, village américain, etc...).
Certains viennent avec de gros moyens et construisent des villages/structures
vraiment intéressants. L'évènement dure 5 jours.
À côté de ça, il y a un programme de conférence officiel hébergé dans des
chapiteaux qui sont également dans la zone de camping.
En parallèle des conférences officielles, de nombreux campeurs organisent leurs
propres évènements dans leurs installations, cela donne une programmation non
officielle improvisée, gigantesque où il se passe beaucoup de choses 24 heures
sur 24.
-- Pourquoi j'aime les campings pirates --
Concernant pourquoi aller dans ce genre d'event, chacun aura ses propres
raisons, mais si je devais définir la mienne, c'est pour rencontrer des gens.
Le fait aussi qu'on ne soit pas pouponné comme dans un event classique.
Même s'il y a quand même un cadre et une organisation, c'est tout le monde
qui s'organise.
L'event est autogéré par la communauté, pas de sponsor CISCO, TrendMicro, etc...
Comme en conférence centralisée classique du genre Le Hack, La grehack et
similaire... Ici on se retrouve globalement entre personnes qui ont les mêmes
valeurs: la participation active et l'entraide.
L'organisation générale est bénévole, principalement portée par la scène et les
hackerspace des Pays-Bas vu que l'event est chez eux.
L'orga est découpée en plusieurs "teams", ou chacun aura son rôle à jouer
l'électricité, l'eau, la logistique, le réseau, le terrain, le parking, etc...
On est entre nous et nous-mêmes, ça nous met tous automatiquement une
responsabilité qu'on n'aura pas forcément ailleurs.
Chacun est responsable de soi-même et de ses amis, de ses voisins,
et de ses actions.
C'est le principe même de ces camps je dirais.
La bienveillance que tout le monde a, la facilité à aller rencontrer des gens.
On est à l'aise, dans un beau cadre que les campeurs façonnent de jour en jour
avec leur créativité, de la musique, de l'informatique, des échanges...
Pas de jugement ou de discrimination, tout le monde s'en fout de ce que vous
faites, tant que vous respectez les autres.
C'est un monde alternatif qu'on crée pour se sentir bien et faire la fête et
c'est dans ce genre d'évènement que je passe mes meilleures vacances.
C'est une expérience à vivre, plus qu'à raconter, vraiment.
-- Pre camp: La création du village Français --
Dans ce genre d'évènement, en général les personnes ne se rendent pas seules,
mais à plusieurs, pour y retrouver du monde.
Il y a bien sûr des zones de "camping libre" pour ceux qui viennent en solo,
mais le mieux reste de se rattacher à un village, ou bien d'en créer un.
Certains villages se rapprochent même d'autres villages pour se mettre côte à
côte et former un 'cluster'
Dans notre cas on va monter le village Français, toute l'organisation aura été
faite dans un groupe Signal créé pour ça.
Le nom a été décidé, ça sera 'Lambda' (non pas en référence à Half-Life, mais
au lambda-calcul)
Il ne reste plus qu'à créer la page Wikipédia du village sur le MediaWiki de
la WHY et de le remplir au fur et à mesure que le temps passe pour que la
team Terrain, se débrouille au mieux pour avoir une visu de la place que
l'on va occuper.
Le wiki de la WHY nous fournit une carte open street map approximative du
terrain où l'on peut poser un marqueur pour signaler à tout le monde
(l'orga, les autres villages) quel morceau de terrain nous intéresse.
Pour notre part ça sera dans la zone la plus bruyante du camping juste à côté du
main stage et du party-bar, car on prévoit d'être bruyant toute la nuit
en blastant de la musique.
On a aussi les douches et les toilettes à côté, vraiment pas très loin de tout !
À la WHY il y aura aussi un village Breton nommé Brittany Fairies, et un village
Suisse romand nommé Lemanicus, organisé par le Post Tenebras Lab.
Les Suisses romands ont préféré rester à côté de leur homologue alémanique
qui seront aussi présents plus haut sur le terrain, quant au village breton, ils
ont préféré rester à l'autre bout du terrain là où c'est le plus calme possible.
Pour cette même raison, on n'a pas trop de villages voisins à proximité, une
bonne partie de la parcelle 'bruyante' est à nous !
Du coup, pas de cluster français pour cette édition, mais un jumelage avec
Brittany Fairies et Lemanicus, et s'ils veulent être bruyant, ils pourront
toujours venir chez nous.
Pour notre village on louera aussi un barnum 5m x 5m (650 €) à la team
Moebelhaus qui s'occupe de fournir les fournitures au camp (table, chaises,
frigo, barnum, etc...)
Pour les barnums, cette team se charge aussi entièrement de faire le buildup
et le teardown.
Louer un barnum à l'orga permet aussi de définir un peu plus sérieusement notre
projet de faire un village, car certains villages sur le wiki ne seront au final
pas réalisés ou annulés.
On sait que l'on sera une douzaine dans notre village avec 8 tentes au minimum
autour du barnum, l'emplacement des tentes se définira sur site.
Maintenant qu'on a le village et les villageois de définis, il ne reste plus
qu'à s'organiser entre nous sur qui ramène quoi (chaises, tables, multiprises,
glacière electrique, café, Platine DJ, spécialité locale...)
Et qui arrive quand et repart quand.
Une fois ces choses mises au point, il y a plus qu'à attendre l'event en
regardant comment le wiki évolue.
-- Pre camp: faire ses valises et ne rien oublier --
Ayant une précédente expérience dans les campings pirates grâce au CCCamp je
sais déjà à quoi m'attendre et quoi amener.
La distance entre Belfort, et la WHY est sensiblement la même que pour le CCCamp
de 2019, environ 800km à faire..
Pour cet évènement, à la place de faire en covoiturage j'y vais avec Madame en
avion (sa première pour elle!).
8,9h en voiture vs 1h30 en avion, le choix a été vite fait.
Du coup... on amènera beaucoup moins de choses, car limité par le poids.
Miizix de mon hackerspace se rend là-bas en flixbus, il me prendra 2,3 affaires
encombrantes.
L'objectif étant aussi de ramener des choses sur place et de rapporter des
souvenirs de là-bas, il va falloir bien penser le packing.
Étant en avion tout ce qui est "liquide" est au format 100ml aussi étant donné
que je suis avec madame, et qu'elle n'est pas habituée à tout ça on a pris un
peu plus de choses pour le confort, si j'avais été solo ma liste aurait été plus
rustique sur le confort pour emporter plus d'électronique.
Du coup, voyez la liste suivante pour un couple
Hygiène:
- Dentifrice
- Brosse à dents
- Peigne/brosse
- Deo
- Produit de douche
- Shampoing
- Papier WC
- Sopalin
- Coton-tige
- Mouchoir
- Trousse de secours
- Bain de bouche
- Pince/élastiques
- Produit solaire
- Médicament
- Antimoustique
- Tampon/serviette de nuit
- Bouchon oreilles
- Lessive liquide
- Gant de toilette
Vaisselle/nourriture:
- Couvert en plastique
- Verre en carton
- Assiette en carton
- Shooter
- Torchon
- Sac poubelle
- Produit vaisselle
- Éponge
Vêtement:
- sous vêtement
- maillot de bain + serviette
- sweat ou veste
- short
- casquette
- jean
- chaussettes
- tong
- K-way
- sandale
Pour dormir:
- tente
- sac de couchage
- oreiller
- matelas
- lampe de poche
Divers:
- chargeurs
- appareil photo
- rallonge/multiprises
- sac souple
- lunette de soleil
- espèces
- x600 stickers du hackerspace
- Drapeau
- couverture de survie
- DECT
- pince à linge
- pochette téléphone
- câble
- carte européenne
- pèse bagage
- ciseaux
- scotch
- Dell XPS 17 9720
- Elgato HD60 X
- Analogue Pocket
- Gameboy color
- Gameboy camera x3
- batterie externe 20 000mAh (100Wh max en avion)
Concernant la nourriture et l'eau, on achètera quelques provisions à Amsterdam.
Je n'ai pas pris beaucoup de vêtements, car je prévois d'acheter du merch
au camp.
Pour le laptop, la gameboy etc., j'avais comme projet de participer à la
demoparty sur place du coup j'ai ramené ça.
J'ai mis tout ce qui est électronique/de valeur en bagage à main.
Faisons un point sur le budget maintenant.
-- Le budget: Voyage --
L'avion, avec KLM départ le 06/08/2025, Bale Mulhouse-Amsterdam, Schiphol
2 personnes et vol retour inclut le 14/08/2025 un total de 262.06 par personne,
avec 1 bagage en soute 23KG + 1 bagage à main 12KG par personne.
soit 524€ d'avion
Arrivé à l'aéroport, il y a un train sous le terminal pour aller à Amsterdam
centrale le ticket s'élève à 5.20€ par personne
Arrivés à Amsterdam, notre Ibis hôtel se situe dans la gare.
1 nuit, 2 adultes et Petit déjeuner buffet inclus pour 220.59 EUR
Pour le 07-08-2025, il nous faut se rendre au camp..
Le billet de train Amsterdam vers Alkmaar est à 9.40 EUR par personne
Ensuite le main event, la WHY2025 !
342.42 EUR, prix du ticket classique pour madame
moi je me suis un peu plus lâché avec le merch inclus dans le prix du billet.
2x Zipped hoodie: 130.00 €
2x Event T-shirt: 37.50 €
Design T-shirt: 25.00 €
Bucket hat: 22.50 € soit: €579.92 pour moi
Après le main event, il faut faire le trajet inverse...
le 13-08-2025, Alkmaar vers Amsterdam: 9.40 € par personne
Une seconde nuit dans le même hôtel cette fois-ci à 241.66 €
On mangera des pâtes dans le resto de l'hôtel: 38.50 € et enfin le train
Amsterdam central vers Schiphol airport à 5.20 par personne
Pour résumer le trip de 7 jours:
- 582.40 € de transports avion/train
- 500,75 € d'hébergement en hôtel (incluant le repas du resto)
- 922.34 € les deux tickets WHY2025 avec du merch.
Soit un total général de: 2 005,49 €
-- Le budget: stuff couchage --
Maintenant les objets pour dormir, ce que l'on a dû acheter :
Tente Décathlon MH100 XL 3 personnes Fresh & Black: 109,99 €
Matelas gonflable 2 personnes, 190x140 cm: 44,99 €
2x Oreiller de camping: 15,98 €
Sac de couchage ARPENAZ 15°C: 19,99 €
Serviette de bain microfibre 80 x 130 cm: 7,99 €
Étant donné que j'ai déjà mon sac de couchage et ma serviette de bain, on n'en
a acheté qu'un seul pour elle.
Total équipement camping : 198,94 €
-- Le budget: Le reste --
Bricole en tout genre sur place à Amsterdam en pendant l'event:
Sandwich aéroport: 11.16
Supermarché: 4.18+2.69 = 6,87
Apéro: 11.50
5G Amenesia haze: 45€
À la WHY2025:
Nourriture et boisson: 4,20 + 1,70 + 4,40 + 17 + 2,70 + 2 = 32 €
Coin du festival: 50€ kit de lockpicking: 40€
Badge romhack: 25€
-- Budget : Pour résumer --
En total, niveau dépense générale, on arrive à 2421.02 €.
Soit environ 1210.51 € par personne pour 7 jours.
Au final... ça va.
Les dépenses sur place s'élèvent à 221.53 €.
On va viser 150 € en plus, car on a sûrement oublié des choses,
comptez donc 377.53 €.
.
.:
.::
:::
:::
lets start! :::
:::
:::
:::::::::
: ::: :
: ::::::
:
::::::
:::
:::
:::
:::
:::
:'
'
| _ `¯|¯',_ ',_ ,_ _ ,_ _ ,_ |_
| ,(/, | | ´||_) | ´(/,|_)(_)| ´|_,
¯ ¯ | ¯ |
___ _____________________ _______________________ __________________________
(___\\____________________\\______________________\\_________________________)
-- WHY2025 - 07/08/25: arrivé: Jour zéro --
___ _____________________ _______________________ __________________________
(___\\____________________\\______________________\\_________________________)
On quitte Amsterdam pour prendre le train en direction d'Alkmaar, dans notre
rame on se retrouve avec d'autres campeurs, une partie du village italien, et du
village DIVD (Dutch Institute for Vulnerability Disclosure) on sympathise,
parle de l'event et m'offre même une bière pour boire avec eux.
Arrivé à la gare d'Alkmaar, on se dirige tous vers un point de rassemblement
organisé par la Team Shuttle des vans électrique conduits par des volontaires
qui viennent faire la navette entre la gare et l'event.
Nous pouvions même suivre en temps réel où sont les vans sur la carte
open street map de la why!
Une fois arrivé à l'event sur la zone de déchargement grâce à la team Shuttle,
on récupère nos bagages et on se dirige vers l'accueil.
On nous pose nos bracelets et on reçoit une pochette en papier kraft contenant
notre kit de bienvenue, quelques stickers, des flyers, une carte papier, un
petit guide pratique et une petite plaquette en plastique 'cyber' fait main.
On me propose aussi de me poser un bracelet "+18" pour me permettre d'acheter de
l'alcool, etc. (Pour pas que les volontaires du bar me demande une pièce
d'identité pour obtenir des boissons)
Mais bon je ne l'ai pas pris, ce n'est pas comme si ça ne se voyait pas à ma
tête que j'ai plus de 18...
Après tout ça on pose nos premier pas sur le site, vu que notre zone est tout au
fond on doit traverser tout le camping, on découvre au passage les installations
Tout est déjà fonctionnel, réseau d'eau, électrique, internet/intranet,
téléphone, buvettes, toilettes, douches, etc...
Les campeurs sont déjà en train d'installer leurs villages, certains sont déjà
en place depuis quelques jours..
Les engins de chantier circulent encore, tout doit être prêt pour demain.
On passe devant le ROC (Radio Operation Center), le POC (Phone Operation Center)
et le NOC (Network Operation Center), ainsi que 'Heaven' qui est le plus gros
bâtiment après les salles de conf.
Heaven, est une base-vie pour tous les volontaires, que l'on appelle des
"Angels", la coordination sur le travail à effectuer dans le camp
se fait à cet endroit.
On traverse et on passe devant le party stage.
Juste avant la WHY sur ce même terrain avait eu lieu Liquicity, un festival
Drum & Bass.
L'orga de la WHY a négocié avec Liquicity pour qu'il laisse en place le party
stage et les ponts.
Le camping réutilise leur infrastructure et s'occupera du démontage.
Puis on arrive sur notre zone, pour le moment on semble être les premiers,
aucune tente n'a encore été posée.
Le barnum, et un point de raccordement électrique sont déjà en place.
En ouvrant le barnum on retrouve Miizix à l'intérieur, il n'a pas encore sa
tente, nous aussi d'ailleurs.
On doit attendre l'arrivée de gadget, un villageois de Brittany Fairies qui nous
a pris notre tente pour être allégé dans l'avion.
On pose nos affaires dans le barnum et on part les 3 récupérer à l'infodesk
sa tente + son matelas qu'il a loué à la team Moebelhaus.
On gonfle le matelas directement à l'infodesk et on retourne dans notre village
installer sa tente.
+ on commence à installer l'électricité dans le barnum avec mon enrouleur
que Miizix a pris.
Après ça fait, on sort de nos baggages des supports de badge que l'on avait
imprimé en 3D chez nous en avance.
La team badge cherchait sur le wiki des imprimeurs..., on se rend à la tente de
la Team Badge pour leur remettre nos contributions.
Arrivé à la tente, il y a déjà plein de volontaires en train d'assembler les
badges de l'évènement, une personne de la team badge qui coordonne l'assemblage
vient nous voir, on lui donne nos pièces 3D et il nous demande si l'on est
intéressé par du travail...
On lui dit que l'on vient juste d'arriver et que l'on repassera après être prêt.
On repart, direction notre village pour enregistrer/activer mon téléphone DECT,
je choisis mon numéro à 4 chiffres, ça sera '2077' et je m'inscris dans
l'annuaire local.
On passe au POC pour tester ma ligne.
L'infrastructure téléphonique de la WHY repose sur un Alcatel OmniPCX 4400
composé de plusieurs châssis reliés en fibre, avec de multiples cartes DECT et
une liaison SIP fournie par Speakup.
En complément, on trouve un peu partout sur le terrain des fieldphones
du Chaosvermittlung, ces vieux postes filaires militaires robustes, reliés à
deux centraux manuels 30 ports, et deux uplinks DECT 4 ports.
On observera d'aillieurs quelques PCB de switch cachés un peu partout connectant
le camp.
On se rend ensuite à la base vie des volontaires qui est juste à côté pour
s'enregistrer, on nous remet nos badges de volontaire ainsi qu'une gourde.
On regarde vite fait la liste de shift, mais on ne trouve pas de travail pour
l'assemblage des badges...
Du coup on retourne directement à la tente badge motivé pour notre premier shift
en attendant que les autres du village arrivent.
Une fois là-bas le coordinateur nous demande notre expérience en électronique
puis nous assigne nos place sur la chaîne d'assemblage, je serai à la mise en
place du sticker de la membrane du clavier + au contrôle de certains éléments
soudé du badge, Miizix lui a été placé sur le vissage des cartes m.2
Ma copine quant à elle n'étant pas très à l'aise avec l'électronique a été mise
aux pliages/cassage des boites en carton de composants électroniques vides.
On restera dans la tente de la team badge à fabriquer des badges à la chaîne
pendant 4 heures, et on émargera nos heures sur une feuille en papier en sortant
Les gens de notre village commencent a arriver les uns après les autres, Benoit,
Solal, Tristan, rbnctl, Maxou56800... gadget lui aussi est arrivé, je passe au
village de Brittany Fairies en coup de vent récupérer ma tente pour commencer à
me poser moi aussi.
Première fois que je rencontre Maxou56800 au passage, après avoir discuté avec
pendant plus de 14 ans sur les IRCs et les boards, ça fait plaisir de se
rencontrer dans ce contexte.
Les tests de son commencent aussi sur le party stage à côté de nous, on aura le
droit à l'instrumentale de «Never gonna give you up» pendant 30 minutes avec
différents réglages d'égalisation et de volume.
Pendant ce temps Ludo arrive, le village est quasiment au complet, et notre
installation commence à ressembler à un village... touche finale..
On pose sur l'extérieur du barnum un drapeau lambda ainsi
qu'une guirlande lumineuse.
L'intérieur du barnum servira essentiellement pour cuisiner, charger nos laptops
téléphones DECT, et d'entrepôt pour nos bagages.
Le wifi étant excellent le village n'utilisera même pas de Datenklo.
Tout comme au CCCamp, l'AS64404 (EventInfra) s'occupe de gérer le réseau.
Voilà l'installation faite en dayz zéro, on va pouvoir commencer à se poser et
prendre l'apéro tous ensemble au village.
Les bars officiels tournent déjà, et ils fermeront assez tôt à cause de coupures
répétées de courant, paralysant au passage leur système de paiements, car ils on
quasiment tous misé sur le paiement en ligne.
On passera vite fait au marché installé dans le camp pour faire le plein de
Club-Mate.
___ _____________________ _______________________ __________________________
(___\\____________________\\______________________\\_________________________)
-- WHY2025 - 08/08/25: Day one --
___ _____________________ _______________________ __________________________
(___\\____________________\\______________________\\_________________________)
Ça y est la WHY démarre officiellement aujourd'hui, je me lève tranquille la
tente n'est pas un four, mais après ouverture je me rends compte que le soleil
est déjà levé et qu'il tape fort, même plus que prévu, ça va être une journée
bien chaude.
On prend un café avec la machine de Miizix et quelques biscuits...
Puis direction la douche...
Pendant la douche le party stage commence à jouer "Gimme Gimme" de ABBA,
l'expérience de la douche avec le sound system juste à côté était incroyable.
Bien que je me sentais de base frais, j'étais encore plus revitalisé.
Les douches sont propres, l'eau est chaude, pas de problème de débit d'eau,
rien à signaler.
On part explorer, il y a tellement de choses à découvrir et de gens à rencontrer
On en profite pour balancer des stickers 'Hackgyver' un peu dans toutes les
boites à stickers que l'on trouve dans les villages.
On passe devant une installation d'art, 'le ring of fire' un grand cercle ou
l'on peut passer en dessous, un bouton s'y trouve, appuyer dessus allume des
lance-flammes au gaz en cercle au-dessus de nous.
Entre temps Thanat0s et Xanax arrive au village, on passe à l'infodesk voir
la boîte à stickers centrale qui consiste en 2 bacs 50L, et aussi pour se faire
tamponner nos passeports Hackerspace avec le tampon officiel de la WHY2025.
La Chaospost est aussi à l'intérieur de l'infodesk, quelques tables avec des
stylos, crayons de couleur, feutres sont à disposition des campeurs pour écrire
une lettre, quelques tampons du CCC s'y trouve aussi, on en profite donc pour
rajouter des tampons dans nos documents.
Une fois rentré au village on passe déposer nos stickers que l'on a récupérés
et on attrape nos laptops.
Le CTF démarre à 18h, on se rend à la tente CTF pour le lancement, des rangées
de tables sont installées devant la tente, toute occupée par des campeurs, sur
un autre coté là où la tente fait de l'ombre il y a aussi du monde à même le sol
avec leur PCs.
On rentre dans la tente CTF, plusieurs tables sont installées et il y a un coin
chill avec des pouffes, il y a aussi quelques chaises massantes.
L'orga est dans un coin juste après la porte, des épreuves physiques s'y trouve,
notamment des cadenas, et une cartouche de gameboy avec une gameboy à côté.
Un écran est attaché à un IPN, il présente le top scoreboard, les dernières
validations, et annonce les premières validations d'épreuve qui ne tarde pas à
tomber, des haut-parleurs jouent le son 'first blood' de CS.
On ne restera pas trop longtemps dans la tente CTF, car la conf de Solal
"A journey into reverse engineering arcade PCBs for video game preservation
via FPGA emulation" allait démarrer.
On passe au village poser nos laptops on discute un peu et on repart direction
la tente de conf.
Arrivé à la tente, celle-ci est annulée, en fait toutes les confs restantes
d'aujourd'hui ont été annulées, une coupure électrique affectant le nord de
la hollande et survenu entre temps et tous les équipements raccordés au réseau
électrique régional, sont devenus hors service.
Les bars ont réouvert peu de temps après grâce à la power-grid du camping, on
part là-bas et on en profite pour prendre à manger, ça sera des pâtes.
On passe après à Brittany Fairies puis on rentre se poser dans notre village.
Je reprends mon pc et on se connecte au CTF faire quelques challs.
On créera une équipe aussi pour les secrets tokens, un sous-jeu du CTF où les
campeurs doivent trouver des tokens dissimulés un peu partout sur le terrain du
camping.
Ils peuvent être sur des installations, sur des sites web ou simplement sur un
élément du terrain, une tente ou peu importe.
Accessible à tous, et surtout à ceux qui n'ont pas envie de se lancer dans les
challenges techniques d'un CTF. Ces tokens peuvent être en texte clair, faire
partie d'un puzzle, codé ou offusqué.
Tous les campeurs peuvent aussi proposer des tokens qu'ils ont cachés
à faire trouver aux autres.
Une véritable chasse au trésor grandeur nature, évolutive et vivante qui pousse
les joueurs à aller visiter les villages des autres et faire des rencontres.
Notre participation en tant que bénévole nous a permis aussi de récupérer
100 points.
Le CTF est accessible en ligne à tout le monde, mais les épreuves sur-site
avantagent forcément ceux qui sont à domicile.
Un peu plus tard avec Miizix on se rendra ensemble à la tente de la team badge
pour refaire du bénévolat sur l'assemblage des badges, il restera 4 heures
et moi 5 heures à appliquer de la résine epoxy sur les connecteurs batterie des
badges et à faire polymériser ça avec une armée de séchoirs à ongles UV.
À 3h du matin, je serai d'ailleurs le dernier campeur à partir de la tente, il
ne restait plus que moi et quelques devs en train de bosser sur le firmware.
J'arrive au village, ça ronfle déjà pas mal, certains dorment même dehors sur
leurs chaises de camping, je me jette dans ma tente.
___ _____________________ _______________________ __________________________
(___\\____________________\\______________________\\_________________________)
-- WHY2025 - 09/08/25: Day 2 --
___ _____________________ _______________________ __________________________
(___\\____________________\\______________________\\_________________________)
Encore une journée bien chaude qui s'annonce, le programme de la ligne officiel
des confs a été refait pour étaler les confs annulées hier sur le reste des
jours restant.
Quelqu'un m'appelle sur mon DECT, je décroche et c'est un rick roll que j'ai au
bout de la ligne, quelqu'un a scrapé l'annuaire public et s'amuse à rickroller
massivement tout le monde, j'aurais été rickrollé 3 fois au total via mon DECT.
J'apprends que Korigan de hackbbs se trouve également quelque part chez
Milliways (le village américain) je me rends donc là-bas en espérant qu'il y
soit, mais je ne l'ai pas trouvé, il n'est pas non plus dans l'annuaire.
Je passe donc à la Chaospost pour lui poster une carte en interne.
J'en profite aussi pour fouiller la boîte à stickers centrale, les 2 bacs de 50L
sont quasi plein, et les stickers débordent maintenant sur la table qui est elle
aussi bien recouverte, ça devient chaotique il y en a partout...
Je repasse au village déposer mes stickers récupérés, prendre un peu d'argent
liquide et je retourne à Milliways pour acheter le coin challenge de cette année
Le coin challenge est une pièce commémorative qu'ils font pour chaque évènement
auquel ils participent.
Chaque pièce arbore un design unique en lien avec le thème de l'évènement.
Et ça fait un joli souvenir, j'en ai déjà quelques-unes de mes anciens camps.
Je passe ensuite à la tente CTF où je retrouve Miizix et Maxou56800 pour faire
les épreuves de crochetage, on aura réussi à crocheter 4 cadenas sur 6 !
On part ensuite pour la conf sans doute la plus attendue de l'évènement: le talk
du staff de phrack, pour leurs 40 ans d'existence ils reviennent sur toutes
leurs aventures.
En plus de célébrer leurs 40 ans, leur talk fait aussi office de release party
pour Phrack 72.
A cette occasion ils ont imprimé le zine sur papier... et en couleur en plus.
Au milieu de leur talk il s'arrête et nous demande de se servir nous-mêmes dans
les cartons pour récupérer une copie de leur magazine, nous serons les premiers
lecteurs du numéro 72, la sortie en ligne pour tout le monde et prévue
la semaine suivante.
À la fin du talk on reste un peu pour se faire dédicacer nos magazines.
Et comme ils ne font pas les choses à moitié, ils nous ont donné rendez-vous au
village Milliways pour célébrer la fête de lancement et nous offrir de la bière
gratuite et des encas !
Les bières sont aussi servies dans une ecocup commémorative Phrack,
vraiment ils ont mis le paquet pour la communauté, ça fait plaisir.
Je repars de Milliways avec plein de stickers phrack, 7 magazines papier du
numéro 72, et des gobelets collector phrack,
l'impression d'avoir fait un braquage !
Après tout ça on débriefe un peu et on se met à résoudre les secret tokens que
l'on a croisés en se baladant.
Un peu plus tard Gadget du village Brittany Fairies organise une fondue Suisse
dans notre village, on avait déjà prévu le coup bien en avance et chacun a
ramené des piques, du vin, assiettes etc pour rendre ça possible.
Miizix s'occupe du remuage, plus de 10 kilos !
Ça fait aussi plaisir de manger avec les gens de Brittany, après la release
party de phrack, encore un grand moment de convivialité.
Le fromage provenait de chez Fromani, une marque distributeur du Lidl Suisse,
terriblement efficace.
En parallèle on joue aussi du son principalement de la musique tracké de C64,
joué via une vraie C64 connectée au soundsystem du village, l'orga de la WHY ou
du moins une personne de la team Cohesion viendra d'ailleurs nous voir pour que
l'on baisse le volume, un comble pour nous qui avons choisi cet emplacement pour
être bruyant la nuit.
J'apprends aussi qu'il était déjà passé hier soir à notre village pour la même
raison, je ne le sais pas encore, mais la team Cohesion passera chaque soir nous
demander de faire moins de bruit.
Après ça je passe au bar me prendre du Club-Mate, en revenant un campeur
m'attrape et me dit de venir au "great firewall", que le spectacle va commencer,
je rentre au village avertir tout le monde et on se dirige tous là-bas.
Le firewall est une installation d'art, un mur de feu littéralement ou des
lance-flammes dirigés vers le ciel sont synchronisés sur 200 mètres pour
faire un spectacle. C'est magnifique.
Tous les soirs cette installation fonctionnera aléatoirement.
À côté de notre village, des lance-flammes ont aussi été installés en haut du
party stage et fonctionnent aléatoirement.
À côté de notre village aussi se trouve le cluster Area42, c'est eux qui gèrent
la plupart des installations avec les lance-flammes.
De retour à notre village on rencontre un sacré personnage, une personne qui
repassera nous voir chaque soir.
Si une personne m'a marqué auquel je ne m'y attendais pas ça sera peut-être
bien lui.
Un teuffeur de la première heure, Floran, très friendly qui ne connaît pas
grand-chose au hacking, mais il restera avec nous et passera ses soirées entre
visiter notre village et aller danser au party stage.
Il laissera même quelques-unes de ses affaires dans notre village.
___ _____________________ _______________________ __________________________
(___\\____________________\\______________________\\_________________________)
-- WHY2025 - 10/08/25: Day 3 --
___ _____________________ _______________________ __________________________
(___\\____________________\\______________________\\_________________________)
Encore du soleil, la douche a été chaotique ce matin, j'ai été dans une autre
point de douche que celui d'habitude le terrain et la douche étant en pente, une
partie de l'eau de toutes les douches se retrouve déversée à un endroit et
provoque une grande mare à l'entrée d'une cabine.
Pour rentrer c'est pas un problème vu que l'on va à la douche, mais une fois
propre, on doit faire un saut de 1m pour éviter de toucher l'eau mélangée à la
terre et l'herbe coupées.
N'ayant pas trop réfléchi, j'ai choisi la dernière cabine qui évidemment était
la seule à être libre.
Et mince, j'ai oublié la demoparty dans tout ça, elle a lieu ce soir à 21h30...
L'idée c'est de filmer dans la why avec une gameboy camera, et de faire un trip
report avec le hackerspace, ça sera certainement pas prêt pour la demoparty
tant pis.
Du coup on va prendre notre temps, Et sortir ça après.
Pourtant j'ai quand même préparé et codé les trucs bien en avance..
Je fouille dans mes affaires je sors 3 cartouches de gameboy camera, une où j'ai
remplacé le firmware par "Photo! v1.10" pour faire de la photographie,
une où j'ai fait une extension de la tête avec un câble RJ45 de 1m50 pour
pouvoir filmer et avoir plus de liberté de mouvement, et une dernière cartouche
non modifiée en backup au cas où..
Allez hop, je prépare le setup je mets tout dans mon sac
(laptop, elgato, gameboy, batterie externe, etc., je lance OBS en mode
enregistrement et on commence à se balader dans le camp avec notre tête de
gameboy qui sort du sac avec Miizix.
Pas mal de curieux viennent nous voir, du coup finalement on sortira le laptop
du sac histoire de montrer en live les images que l'on capture et d'expliquer
aux gens ce que l'on fait.
L'idée de faire un trip à la gameboy dans un camp me trottait dans la tête
depuis un moment, et c'est suffisamment low résolution pour que par défaut il
n'y ait pas besoin de flouter les gens qui ne souhaitent pas être filmés ou quoi
que ce soit.
Le elgato couplé à l'analog pocket me sort un flux gameboy HD 1080p, quant à mon
ordinateur, c'est un Dell XPS 17 avec un i9, RTX 3060, 32Go RAM, 1TO SSD, enfin
bref une config overkill pour enregistrer de la gameboy, ça ne devrait pas ramer
ni même pour la postprod !
Après avoir pas mal filmé on retourne au village, mon DECT sonne, un postier de
la Chaospost a une lettre pour moi, on se fixe un point de rendez-vous
au party stage.
Il me remet ma carte, je pensais que Korigan m'avait répondu, mais non.
Un autre campeur que je ne connais pas m'a envoyé une carte postale
ping-pong.
Très bien, que le jeu entre moi, le campeur et la Chaospost commence.
┌──────────────────────────────────────────────────────────────────┐
│ │
│ i : | | | │
│ ^ │
│ │ │
│ 1. +1 here ──┘ │
│ if i is odd │
│ 2. Post again .DECT 6510 │
│ │
│ if i is even │
│ .DECT 2077 │
│ │
└──────────────────────────────────────────────────────────────────┘
L'instruction est simple, le receveur ajoute un trait sur la carte pour
incrémenter i, et renvoie la carte à la Chaospost, si le routage est impair,
alors le facteur doit distribuer à la personne qui a le DECT 6510.
Si c'est pair, alors c'est 2077 (moi) qui doit recevoir la carte.
C'est un jeu assez courant dans les campings pirates où la Chaospost est
présente et c'est un moyen rigolo d'occuper les facteurs et les faire réfléchir
sur qui doit recevoir la carte.
Au final sur cette journée je la re-recevrai 3 fois.
Merci pour le fun DECT 6510 :)
Faire facteur pour la Chaospost c'est aussi un bon moyen de rencontrer du monde,
parcourir tout le terrain et frapper aux villages pour une raison concrète.
Un jour je le ferai sans doute.
En repostant ma carte à la Chaospost j'en reprofile pour voir les nouveautés
dans les bacs à stickers.
Ceux-ci ont évolué, maintenant il n'y a plus les deux bacs, mais à la place une
piscine gonflable pour enfant, tous les stickers sont dedans.
À côté il y a plein de livres à donner sur des langages de programmation ou des
technos de serveur. Je n'en prendrais aucun car ça ne m'intéresse pas plus que
ça, et la plupart couvrent des langages obsolètes genre la v5 de PHP.
J'arriverai à trouver des stickers que je n'avais pas encore vus.
Bon allez, il est temps de retourner au village, je passe devant une
installation d'art "Aurora" ça fait plaisir, la dernière fois que je l'ai vu
c'était en Allemagne au CCCamp en 2019 !
C'est une grande sculpture cinétique en forme de soleil composée de plein de
miroirs découpés en triangle, derrière les miroirs il y a des servomoteurs qui
permettent de bouger indépendamment chaque miroir.
La sculpture peut suivre automatiquement la position du soleil, et aussi
concentrer toute la lumière sur un point précis.
Bon on rentre, une deuxième fondue est organisée au village de Brittany fairies,
je passerai en coup de vent leur dire bonjour.
Une annonce est tombée aussi la distribution des badges va commencer, on se rend
avec Miizix à la tente de la team badge et on rentre par la porte dérobée de
derrière, étant donné qu'on n'a pas mal tryhard l'assemblage on va recevoir nos
badges en avant première.
Ce qui nous évitera au passage une queue d'attente au soleil de plus de 2 heures
On rentre au village commencer à prendre en main nos badges avec Miizix,
zekah des Brittany Fairies passe nous faire un coucou avec sa fursuit et son
gobelet, je boirai aussi un coup de Tschunk dans son verre.
le Tschunk, c'est une autre boisson typique des camps de pirate dont j'avais
oublié l'existence jusqu'à ce que zekah se ramène.
C'est un genre de mate-mojito, voici la recette:
- 4 cl de rhum doré
- 1 tranche de citron vert
- 1 cuillère à café de sucre de canne
- 20 cl de Club-Mate de la glace pilée
Couper les citrons verts en dés, le mettre avec le sucre de canne dans un grand
verre et piler/écraser le tout ensemble.
Ajouter la glace pilée et verser le rhum et le Club-Mate par-dessus
Ajouter une paille et c'est bon.
Bon après tout ça Miizix part à un atelier de demoscene, moi je passe voir les
gars du village suisse, ils ont réussi à mettre doom sur un TPE, je fais une
partie vite fait, c'est rigolo.
Un peu plus tard dans la nuit je retrouve Miizix, et quelques gars de
Brittany Fairies avec qui on ira faire la chasse au secret token.
Après ça on rentre au village, on valide nos secret tokens et on se met
sur le CTF.
Arrivé à 23h le gars de la team Cohesion nous demande de baisser drastiquement
le volume, on passe au party stage pour prendre des casques de la silent party
étant à côté du party stage, la couverture du signal des casques est très bonne
et on peut faire le CTF tranquille dans notre village avec de la musique
dans le casque.
Notre ami teufeur est là aussi, il nous regarde faire du CTF.
il nous demande s'il peut prendre de la MDMA.
On le laissera faire tout seul, mais intrigué on discutera de drogue un peu
toute la soirée en parallèle de faire du CTF.
Quelques heures plus tard, on entend du bruit provenant de area42, on va faire
un tour pour voir ce qu'il s'y passe, ils ont installé un lance-flamme sur
un trépied, et des campeurs font la queue pour l'essayer pendant
quelques secondes.
La zone dangereuse a ne pas franchir a été délimitée avec de la rubalise, au
milieu de cette zone se situe aussi un braséro alimenté en haute tension?
Je ne sais pas exactement ce qu'il se passe, comment c'est possible.
Mais parfois un arc électrique était visible pendant quelques secondes avec le
bruit qui va avec, entre les flammes du braséro et les flammes du lance-flamme.
Pas très loin d'area42 un vidéoprojecteur sur un barnum nous interpelle, on va
jeter un coup d'œil rapidement, un quiz de type "qui veut gagner des millions"
version informatique était en cours.
Le participant devait répondre juste à des questions en 4 choix, il a le droit
aussi à quelques jokers:
- L'appel à un ami (DECT uniquement)
- Demander à l'audience (tout le monde doit répondre d'un coup)
- Demander à un LLM (en dessous de 400MB!)
- Boire un shot (supprime une réponse)
c'était franchement hilarant, et l'animateur était au top.
Une couche de brume enveloppe le camping, Milliways enfume tout le monde avec
des machines à fumée, cela fait ressortir toutes les lumières des installations
encore plus.
On voit des personnes apparaître et disparaître, l'ambiance était
particulièrement cyberpunk.
On passe un coup au party stage, il y a une silent party comme tous les soirs
après 23h, des mecs du village radio sont aussi là, et s'amusent à brouiller les
fréquences des casques avec un setup radio qu'il tire dans une charrette.
___ _____________________ _______________________ __________________________
(___\\____________________\\______________________\\_________________________)
-- WHY2025 - 11/08/25: Day 4 --
___ _____________________ _______________________ __________________________
(___\\____________________\\______________________\\_________________________)
Encore un jour ensoleillé, on repasse aux douches d'hier, des palettes en bois
ont été placées à l'extérieur afin de réduire la boue.
On peut enfin sortir et rentrer sans se mouiller les pieds dans la boue de
la dernière cabine.
À midi, on ira manger à la base-vie des Angels avec quelques-uns de
Brittany Fairies, vu que nous sommes volontaires, les repas sont offerts.
Début d'après-midi, à area42 des mecs font un workshop sur comment construire
un lance-flamme pour 230eur.
Bien évidemment il n'y avait déjà plus de place pour participer.
Le workshop commence par de la théorie et les principes des effets de flamme du
propane puis sur les précautions à prendre avec de grandes flammes.
La deuxième partie consiste en un accompagnement pratique, étape par étape,
pour la construction du lance-flamme.
Le workshop s'achève sur un test des lance-flammes dans une zone voisine.
Voici la liste du matériel pour votre curiosité.
Je ne détaillerai pas l'assemblage.
part count price
- ¾ FFF Tee (Brass) 2 € 10,70
- ¾ M to ⅜ F adaptor (Brass) 2 € 3,65
- ⅜ M to ¼ M 2 € 2,00
- ¼ F Needle valve 1 € 8,95
- ¼ M to ¼ M 0 € 1,55
- 3/4M M Nippel 1
- 30-50 mbar regulator ¼ F in ⅜ F out 1 € 16,95
- ⅜ M to Hose 1 € 2,30
- ¼ M To Hose 1
- Propane hose 18×18 ×4cm 3m € 2,50/m
- 30mm wrench 1 € 4,95
- 50cm 8mm copperpipe 50cm € 14,50/m
- Hose clamps 10-20 mm 4 € 0,60
- ¾ M steel threaded pipe 200mm 1 € 8,65
- ¾ M steel threaded pipe 100mm 2 € 4,70
- Stainless steel scrubber 1 € 0,69
- High Pressure regulator Shell to hose 0-3 bar 1 € 29,95
- Large hose clamps 18 x 25 2 € 2,00
- Solenoid Valve DF-SA 3/4 brass FKM 0-10bar 230V AC 1 €95,83
- Thread Sealant Loxeal Mfr. Part: 55-03/10 1 €15,35
- CO2 fire extinguisher 1
It is important that the neck uses a ¾” thread
Je passe à la tente CTF, il termine à 18h et il ne reste plus que quelques
heures avant la fin.
Une nouvelle épreuve sur site est apparue où il faut trouver un signal wifi
dans le camping.
Je l'aurais trouvé, mais pas réussi à aller plus loin, ni à progresser dans le
reste des épreuves.
Le Hackgyver terminera à la 34ème place sur les 1134 équipes participantes au
CTF, pour les secret tokens faisables en présentiel uniquement on finira à la
32ème place sur 317 équipes participantes.
Quelqu'un m'appelle sur mon DECT, je décroche et je me retrouve dans une
conversation géante avec tous ceux qui ont décroché.
Je rentre au village, des mecs du village demoscene sont là, entre temps Miizix
a sympathisé avec ceux qui ont donné une conf quelques jours plus tôt, ce soir
avec un rétroprojecteur ils se sont installés dans notre village et font du
live-coding avec Hydra et Strudel projeté sur notre barnum.
Quelques curieux de passage restent à regarder ce qu'il se passe.
Un dilemme s'impose, rester au village, ou bien aller voir Solal, sa conf sur
l'émulation FPGA va démarrer.
On bougera voir Solal, une petite partie du village est restée pour le
live-coding de shader sur le barnum.
Plus tard dans la nuit ils partiront sur le party stage continuer à live-coder
en animant la silent party, leur visuels projetés sur scène devant tout le monde
On passe manger à Milliways qui ont cuisiné une délicieuse paella, et en donne
à tout le monde qui leur ramène une assiette, et à côté il continue toujours
d'offrir de la bière, ils nous auront mis bien.
On repart dans notre village prendre l'apéro, Tristan nous donnera un cours de
haskell et de lambda-calcul, pendant que Meglyne héberge une Goth Party dans
notre village et nous passe de la Darkwave derrière.
On reviendra peu de temps après à Milliways armé de nos verres à shots, ils
organisent une conférence 'whiskyleaks' où chacun ramène sa bouteille de
whisky et la pose sur leur table.
Ayant déjà participé à un 'whiskyleaks' au CCCamp organisé par Milliways, je
savais déjà que la quantité de whisky différent allait être incroyable.
Je n'ai pas été déçu.
Un peu plus tard on va à "Symphony of Fire" un spectacle musical avec comme
instrument principaux, des bobines de tesla, des lance-flammes, et des
explosions, pas mal de gens était là, et le spectacle était incroyable.
Après cela je suis retourné dans notre village, le gars de la team Cohesion
était repassé apparemment à propos de notre sound system... puis je suis reparti
aussitôt un peu pompette, Miizix étant fatigué il se prépare à aller se coucher,
moi je ne sais plus trop ce que j'ai fait de ma soirée,
mais j'ai erré un peu dans tous les villages.
En revenant je retrouve Miizix revitalisé, il me raconte qu'en partant se
coucher un mec d'area42 est venu le trouver et lui demander si ça lui plairait
de cracher du feu, et donc il n'a pas été se coucher et a participé à un
workshop improvisé crachage de feu, et que c'était incroyable.
___ _____________________ _______________________ __________________________
(___\\____________________\\______________________\\_________________________)
-- WHY2025 - 12/08/25: Day 5 --
___ _____________________ _______________________ __________________________
(___\\____________________\\______________________\\_________________________)
Le dernier jour toujours sous le soleil, le main stage commence à être démonté
tout ce qui est light et sonorisation est enlevée, pas mal de gens plient déjà
leurs tentes, certains villages ont perdu la moitié de leurs habitants.
Quelques villageois partent aussi de chez nous.
L'ambiance change, moins d'agitation, plus de discussions posées, la Chaospost
ne distribue plus le courrier interne.
On sent déjà que la why est en train de se dissoudre.
On restera entre nous, à refaire un tour du terrain une dernière fois.
Prendre des photos des installs.
On passe dire au revoir à quelques têtes croisées toute la semaine,
On prend des crêpes au passage, un village en distribuait gratuitement pour tout
le monde.
Le soir, pas de grosse fête. Juste un apéro tranquille une dernière fois à se
raconter nos expériences de la WHY.
Entre temps on a invité des gens du village Geraffel pour leur faire le tour de
notre village et boire un coup.
Ce sont des vétérans du milieu des campings pirates, ils participent aux
camps hackers depuis 1999.
Ils nous racontent leur ressenti sur cette édition, et que chez eux aussi la
team Cohesion est passée quelques fois.
Côté Brittany Fairies, ceux qui ne sont pas partis ont opté pour faire un
karaoké.
Area42 a coté de notre village s'amuserons une bonne partie de la nuit a vidé
tout leur propane qu'il reste dans leur lance-flamme sur trépied.
On sait que demain ce sera le démontage, la poussière, les sacs trop lourds et
le retour à la réalité.
Alors on ne traine pas de trop et on va dormir.
___ _____________________ _______________________ __________________________
(___\\____________________\\______________________\\_________________________)
-- WHY2025 - 13/08/25: Day 6 --
___ _____________________ _______________________ __________________________
(___\\____________________\\______________________\\_________________________)
C'est l'heure du teardown, les engins de chantier et les 4x4 des différents
teams rentrent en action pour récupérer leurs matériels sur les villages qui ont
déjà rendu le terrain.
Je me lève tôt pour profiter une dernière fois de la douche avant qu'il coupe
l'eau, on a toujours l'électricité aussi.
Un dernier café et je commence à replier ma tente, puis ensuite refaire mes
bagages avec tous mes souvenirs.
Nos heures de bénévolat nous permettent de récupérer un tshirt de bénévole,
on se rend à la base-vie pour le récupérer.
Entretemps l'eau est coupée partout, les seules toilettes et douches dispo sont
celles à côté de la base-vie et ils resteront opérationnels le temps que les
bénévoles démontent tout le reste.
De retour au village, la team Waste nous ramène des poubelles, je ne jetterai
pas grand-chose, une multiprise n'aura pas survécu, le reste assiette, etc,
je n'en ai plus, ça a été utilisé à la why.
Je serai un des derniers à partir du village, je me dirige vers la team shuttle
et il nous ramène à la gare de Alkmaar.
Voilà, la WHY est finie, des souvenirs pleins la tête et pas mal de goodies
récupérés de là-bas.
Je donnerai des trucs notamment les numéros de phrack 72 que j'ai récupérés à
quelques personnes du hackerspace, Mumbly qui est venu me récupérer à l'aéroport
de Bâle merci encore !
Je fais le montage vidéo des rush gameboy dans la foulée et j'upload ça sur le
serveur de scene.org.
https://files.scene.org/view/parties/2025/why25/misc/hg-why2025-trip-report.zip
La communauté link ensuite sur la page de la party, vous pouvez retrouver toutes
les prods ici: https://demozoo.org/parties/5376/
___ _____________________ _______________________ __________________________
(___\\____________________\\______________________\\_________________________)
-- Petite conclusion --
___ _____________________ _______________________ __________________________
(___\\____________________\\______________________\\_________________________)
Personnellement mon camp de coeur reste le CCCamp, mais j'ai beaucoup aimé
la WHY.
Cette édition est une belle réussite, partie sur une base de 3500 personnes,
le camp aura su s'étendre jusqu'à 3750 campeurs.
Tout le camping a fonctionné de manière fluide, je n'ai jamais eu besoin
d'attendre aux toilettes, pour les douches pas plus de 5 minutes.
Les quelques couacs ont su être résolus rapidement.
J'y ai vu des choses que je ne reverrai sans doute pas ailleurs, et rencontré
des gens comme Floran que je ne reverrai sans doute pas de sitôt.
Au niveau de ce qui me chagrine, j'aurais aimé pouvoir réutiliser ma puce du
CCCamp pour le GSM, mais bon le réseau DECT fonctionnait très bien aussi.
La règle de l'arrêt du bruit à 23h aussi, c'est dommage.
L'attente pour récupérer le merch, et les badges, aurait pu être améliorée.
Concernant les talks, il y en avait sûrement plein de sympas, mais perso je n'en
aurais pas assisté à beaucoup. Ça fait déjà quelques temps que je préfère
m'amuser dans les villages plutôt qu'assister à des talks techniques.
De base je ne travaille pas dans la tech, et les events du genre la Grehack,
etc... m'intéressent de moins en moins de par leur aspect corporate.
Je suis là pour le fun, pas pour réseauter en mangeant des coquillettes payées
par CISCO en golden sponsor.
Le CTF et la chasse au secret token m'aura bien amusé sinon, et le Hackgyver
peut être fier de ses classements à la WHY.
Les camps ça se raconte mal, la WHY ne fait pas exception, du moins ici ça
sera à travers mon prisme.
Vous pouvez lire ce texte dix fois ou lire d'autres trip reports, plus axés sur
les talks, ça reste une expérience à vivre avant tout.
Si ce papier vous a donné envie, sachez qu'un premier camping hacker français
arrive: le camp Interhack, du 2 au 5 juillet 2026 en Loire-Atlantique.
C'est exactement le genre d'event dont je vous parle depuis le début: autogéré,
communautaire, sans sponsor.
Le Hackgyver ne pourra probablement pas y être cette année, mais vous, rien ne
vous en empêche.
On se retrouve à la prochaine ?
https://2026.camp.interhacker.space/
_/\_
. .__ __.___ ___.__. \__/______ ._____ .__. .
-:-------------| V ¬|| Y ¬/| | | ¬| ¬|/___ ¬\| |----------------:-
: ... |_ _|| | \| |__| |__ __|| | || |__ ... :
: : : | _ |\_ _/| | ¬| | | | | | || | ¬| : : :
: : : | | | | | | | | | | | | | || | | : : :
: :.:........-|__| | |___| |___ |__| |__| |___ ||___ |........:.: :
:...: ' `--' ' `--' ' `--' `--' :....:
<-- Pax in vultu, bellum in corde ---->
_____/\\\\\\\\\_______________/\\\\\_____/\\\\\\\________/\\\\\\\____
___/\\\///////\\\_________/\\\\////____/\\\/////\\\____/\\\/////\\\__
__/\\\______\//\\\_____/\\\///________/\\\____\//\\\__/\\\____\//\\\_
_\//\\\_____/\\\\\___/\\\\\\\\\\\____\/\\\_____\/\\\_\/\\\_____\/\\\_
__\///\\\\\\\\/\\\__/\\\\///////\\\__\/\\\_____\/\\\_\/\\\_____\/\\\_
____\////////\/\\\_\/\\\______\//\\\_\/\\\_____\/\\\_\/\\\_____\/\\\_
__/\\________/\\\__\//\\\______/\\\__\//\\\____/\\\__\//\\\____/\\\__
_\//\\\\\\\\\\\/____\///\\\\\\\\\/____\///\\\\\\\/____\///\\\\\\\/___
__\///////////________\/////////________\///////________\///////_bauds
┌────────────────────────────────┐
│ ISSUE No 3 - Avril 2026 03.TXT └─────────────────────────────────────────────┐
| Développement de driver sous Windows 11: Leçon 2 |
| Xylitol <xylitol@temari.fr> |
| HACKGYVER HACKERSPACE (Belfort) |
└──────────────────────────────────────────────────────────────────────────────┘⠀
-- 0x0: Prélude --
On a créé notre premier driver dans l'épisode précédent, maintenant l'étape
logique consiste à faire de la communication entre notre driver et l'user-land.
Dans cet article nous allons donc voir comment depuis l'user-land demander
quelque chose à notre driver et que celui-ci nous réponde "Bonjour!".
Voici le sommaire, alors accroche ta sangle, c'est parti.
- 0x1: Les API kernels
- 0x2: IOCTL et IRP
- 0x3: Notre deuxième driver
- 0x4: Notre application user-land
- 0x5: Le test !
- 0x6: Le mot de la fin
-- 0x1: Les API kernels --
En kernel mode les choses marchent un peu différemment de l'user-land, ici on
n'a pas de DLLs qui exportent des fonctions publiques comme kernel32.dll ou
user32.dll. À la place Windows nous fournit un ensemble d'interfaces internes
accessibles via des fonctions du Kernel Mode Runtime (ntoskrnl.exe)
Ces fonctions portent des préfixes spécifiques (Io, Rtl, Zw, etc...) et
permettent d'interagir avec toutes les couches du système (périphériques,
mémoire, fichiers, etc.)
Voici ce que vous allez rencontrer comme préfixe en kernel...
━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
TAG ┃ COMPOSANT KERNEL ┃ FONCTION/ROLE
━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Io ┃ I/O Manager ┃ Créer/supprimer des devices, gérer IRP et i/o
Rtl ┃ Runtime Library ┃ Fonctions utilitaires kernel (mémoire, chaînes..)
Zw ┃ System Calls ┃ Appels système pour fichiers, registres...
Ke ┃ Kernel Executive ┃ Threads, timers, synchronisation
Ex ┃ Executive Support ┃ Gestion mémoire (pools, listes)
Mm ┃ Memory Manager ┃ Pages, mapping mémoire, MDL
Ps ┃ Process Manager ┃ Gestion process & threads
Ob ┃ Object Manager ┃ Gestion des objets et handles
Dbg ┃ Debug ┃ Messages debug kernel (DbgPrint)
Cm ┃ Configuration Manager ┃ Registre bas niveau (CmRegisterCallback)
━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Dans notre cas nous aurons besoin surtout de fonctions provenant d'Io pour gérer
le device et les IRP, mais aussi de Rtl pour manipuler les chaines et buffers,
et de Dbg pour tracer les logs dans DebugView.
Attention aux exceptions !
En user-land les exceptions non gérées du type violation d'accès, etc..
provoquent généralement le plantage du programme, en kernel mode c'est un peu
plus chiant, car on peut provoquer un BSoD.. Il est donc conseillé d'éviter
toute déréférence hasardeuse, valider les tailles/pointeurs et de retourner des
NTSTATUS propres..
Évitez d'utiliser des gestionnaires d'exceptions fourre-tout ils sont peu
professionnels... Si votre code génère des exceptions, il y a de fortes chances
que vous fassiez une erreur.
-- 0x2: IOCTL et IRP --
Un programme user-land peut communiquer avec un driver de plusieurs façons.
L'une des plus courantes est par l'intermédiaire de commandes de contrôle d'I/O,
ou «IOCTL» (I/O Control). Ces commandes sont en fait des messages de commande
pouvant être définis par le développeur.
L'IRP on en a parlé un peu plus tôt, mais qu'est-ce que c'est que cette merde?
Cela veut dire «I/O Request Packet», c'est une structure interne du kernel
utilisée par le gestionnaire d'I/O (I/O Manager) pour transporter les requêtes
d'entrée/sortie dans le kernel. Un programme user-land peut ouvrir un handle de
périphérique et faire des opérations comme lire, écrire, envoyer un IOCTL, etc..
Au niveau du kernel, cette opération d'écriture ou de lecture sera représentée
par un IRP correspondant à cette action. Par exemple si un programme écrit la
chaine "Bonjour Driver!" dans le handle, le kernel générera un IRP
(IRP_MJ_WRITE) contenant le buffer avec cette chaine et l'enverra au driver
concerné via sa routine de dispatch.
Voici un petit tableau avec quelques IRP... très loin d'être complet, mais juste
pour que vous voyiez l'idée.
━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━
user-land (API) ┃ IRP (kernel) ┃ Description
━━━━━━━━━━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━
CreateFile() ┃ IRP_MJ_CREATE ┃ Ouverture du device
DeviceIoControl() ┃ IRP_MJ_DEVICE_CONTROL ┃ Appel IOCTL
ReadFile() ┃ IRP_MJ_READ ┃ Lecture
WriteFile() ┃ IRP_MJ_WRITE ┃ Écriture
CloseHandle() ┃ IRP_MJ_CLOSE ┃ Fermeture
━━━━━━━━━━━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━
Le «MJ» dans les noms d'IRP signifie «Major», c'est le type principal de la
requête IRP. nous avons aussi «MN» pour «Minor» un sous-type, mais je ne vais
pas vous embrouiller avec ça.
Les API user-land ne génèrent pas directement un IRP, ce n'est pas inclus dans
le tableau par manque de place à cause de la limite des 80 chars, mais entre les
deux il y a ntdll.dll qui fait le lien entre l'espace utilisateur et le kernel.
Les API comme CreateFile() ou ReadFile() dans kernel32.dll sont des wrappers de
fonctions interne de ntdll.dll (NtCreateFile(), NtReadFile(), etc.). Ces
dernières invoquent ensuite un syscall qui transfère l'exécution à ntoskrnl.exe
C'est alors que l'I/O Manager à l'intérieur du kernel crée et envoie l'IRP au
driver concerné. Lors du chargement, le kernel a créé pour chaque driver un
objet «DRIVER_OBJECT», qui contient entre autres la table MajorFunction[].
Cette table associe chaque type d'IRP (CREATE, READ, WRITE, DEVICE_CONTROL,
etc.) à la routine de dispatch correspondante du driver.
C’est donc par cette table que l'I/O Manager sait quelle fonction du driver
appeler pour traiter l'IRP.
Par exemple quand une application appelle DeviceIoControl(), le kernel génère un
IRP_MJ_DEVICE_CONTROL et y place les buffers d'entrée et de sortie. Mais il faut
encore définir comment ces buffers seront transmis entre l'user et le kernel.
pour spécifier la méthode de transfert, on passera par «CTL_CODE», nous avons 4
grandes méthodes pour ça:
METHOD_BUFFERED: Le kernel copie les buffers, parfait pour de petites données.
METHOD_IN_DIRECT et METHOD_OUT_DIRECT: Les buffers sont mappés directement dans
la mémoire kernel, c'est utilisées pour les gros transferts entre périphériques
vers l'user, et inversement.
METHOD_NEITHER: Le driver reçoit les pointeurs user-mode, c'est utilisées dans
des cas spéciaux, risqués s'il n'y a pas de validation côté kernel.
Dans notre cas, la méthode buffered est parfaite pour nous.
Intéressons-nous maintenant au flux complet de ce que l'on veut faire.
Pour commencer, notre application en user-land va appeler DeviceIoControl() avec
le code IOCTL que nous aurons défini.
Le nom de l'IOCTL contenant le code n'a pas de préfixe obligatoire commençant
par "IOCTL" mais pour une raison de clarté on l'appellera «IOCTL_GET_BONJOUR»
Pour que notre driver puisse être appelé par DeviceIoControl() on doit créer un
device et son lien symbolique.
Nous allons utiliser IoCreateDevice() pour créer un objet dans le namespace NT
sous le nom «\Device\BonjourDrv» Ce nom est interne au kernel, inaccessible
directement depuis l'user-land. Nous allons donc créer un lien symbolique DOS
«\DosDevices\Bonjour» avec IoCreateSymbolicLink()
Ce lien agit comme une passerelle entre le kernel et l'user-land, ainsi notre
application user-land pourra ouvrir notre device en utilisant le chemin Win32
classique: «\\.\Bonjour» C'est grâce à cette chaine d'alias que
CreateFileA("\\.\Bonjour", ...) finira par atteindre notre driver dans le kernel
Une fois «IOCTL_GET_BONJOUR» envoyé, le kernel va créer un IRP_MJ_DEVICE_CONTROL
et y place les buffers d'entrée/sortie et le transmet à notre driver.
Ensuite on va nommer une autre fonction DispatchDeviceControl() pour recevoir
l'IRP et lire le champ IoControlCode via IoGetCurrentIrpStackLocation(), on
traite la commande et on écrit «Bonjour!» dans «Irp->AssociatedIrp.SystemBuffer»
(car METHOD_BUFFERED) On remplit ensuite «Irp->IoStatus.Status» et
«Irp->IoStatus.Information» puis on appelle IoCompleteRequest() pour terminer
l'IRP et renvoyer le résultat à l'application user-land.
-- 0x3: Notre deuxième driver --
Maintenant que l'on sait ce qu'est un IOCTL, un IRP et comment les données
circulent entre l'user et le kernel, on va mettre tout ça en pratique.
On va écrire notre driver qui lorsqu'on lui envoie une commande
«IOCTL_GET_BONJOUR» il répondra simplement «Bonjour!».
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
#include <ntddk.h>
#define IOCTL_GET_BONJOUR CTL_CODE(FILE_DEVICE_UNKNOWN, 0x800, METHOD_BUFFERED, FILE_ANY_ACCESS)
VOID DriverUnload(IN PDRIVER_OBJECT DriverObject);
WCHAR DeviceName[] = L"\\Device\\BonjourDrv";
WCHAR DosDeviceName[] = L"\\DosDevices\\Bonjour";
UNICODE_STRING USDeviceName;
UNICODE_STRING USDosDeviceName;
NTSTATUS DispatchCreateClose(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
NTSTATUS DispatchDeviceControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
NTSTATUS DispatchInvalid(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)
{
UNREFERENCED_PARAMETER(RegistryPath);
PDEVICE_OBJECT DeviceObject = NULL;
NTSTATUS Status;
RtlInitUnicodeString(&USDeviceName, DeviceName);
RtlInitUnicodeString(&USDosDeviceName, DosDeviceName);
Status = IoCreateDevice(
DriverObject,
0,
&USDeviceName,
FILE_DEVICE_UNKNOWN,
FILE_DEVICE_SECURE_OPEN,
FALSE,
&DeviceObject
);
if (!NT_SUCCESS(Status))
{
DbgPrint("BonjourDrv: IoCreateDevice failed: %X\n", Status);
return STATUS_FAILED_DRIVER_ENTRY;
}
Status = IoCreateSymbolicLink(&USDosDeviceName, &USDeviceName);
if (!NT_SUCCESS(Status))
{
DbgPrint("BonjourDrv: IoCreateSymbolicLink failed: %X\n", Status);
IoDeleteDevice(DeviceObject);
return STATUS_FAILED_DRIVER_ENTRY;
}
for (ULONG i = 0; i <= IRP_MJ_MAXIMUM_FUNCTION; ++i)
DriverObject->MajorFunction[i] = DispatchInvalid;
DriverObject->MajorFunction[IRP_MJ_CREATE] = DispatchCreateClose;
DriverObject->MajorFunction[IRP_MJ_CLOSE] = DispatchCreateClose;
DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = DispatchDeviceControl;
DriverObject->DriverUnload = DriverUnload;
DbgPrint("BonjourDrv: Driver Initialized Successfully!\n");
return STATUS_SUCCESS;
}
NTSTATUS DispatchDeviceControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
{
UNREFERENCED_PARAMETER(DeviceObject);
PIO_STACK_LOCATION isl = IoGetCurrentIrpStackLocation(Irp);
ULONG code = isl->Parameters.DeviceIoControl.IoControlCode;
if (code == IOCTL_GET_BONJOUR)
{
const CHAR msg[] = "Bonjour!";
const ULONG len = (ULONG)sizeof(msg);
ULONG outLen = isl->Parameters.DeviceIoControl.OutputBufferLength;
if (outLen < len)
{
Irp->IoStatus.Status = STATUS_BUFFER_TOO_SMALL;
Irp->IoStatus.Information = 0;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return STATUS_BUFFER_TOO_SMALL;
}
RtlCopyMemory(Irp->AssociatedIrp.SystemBuffer, msg, len);
Irp->IoStatus.Status = STATUS_SUCCESS;
Irp->IoStatus.Information = len;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return STATUS_SUCCESS;
}
Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST;
Irp->IoStatus.Information = 0;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return STATUS_INVALID_DEVICE_REQUEST;
}
NTSTATUS DispatchCreateClose(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
{
UNREFERENCED_PARAMETER(DeviceObject);
Irp->IoStatus.Status = STATUS_SUCCESS;
Irp->IoStatus.Information = 0;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return STATUS_SUCCESS;
}
NTSTATUS DispatchInvalid(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
{
UNREFERENCED_PARAMETER(DeviceObject);
Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST;
Irp->IoStatus.Information = 0;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return STATUS_INVALID_DEVICE_REQUEST;
}
VOID DriverUnload(IN PDRIVER_OBJECT DriverObject)
{
IoDeleteSymbolicLink(&USDosDeviceName);
IoDeleteDevice(DriverObject->DeviceObject);
DbgPrint("BonjourDrv: Driver Unloaded!\n");
}
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
-- 0x4: Notre application user-land --
Maintenant que l'on a notre driver de compilé et d'installer (vous pouvez
relire le premier article si vous avez un trou sur comment faire) Il ne nous
reste plus qu'à faire notre application user-land.
J'ai choisi l'assembleur syntaxe MASM32 pour ça, car c'est mon langage de coeur.
Si vous n'avez pas MASM, vous pouvez le télécharger ici:
-> https://www.masm32.com/download.htm
Ensuite, créez un fichier «bonjour.asm» contenant ceci:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
.386
.model flat, stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib
.const
INVALID_HANDLE_VALUE equ -1
IOCTL_GET_BONJOUR equ 00222000h
; FormatMessage flags
FORMAT_MESSAGE_IGNORE_INSERTS equ 0200h
FORMAT_MESSAGE_FROM_SYSTEM equ 1000h
.data
devPath db "\\.\Bonjour",0
msgTitle db "BonjourDrv",0
msgOpenFail db "Erreur: impossible d'ouvrir \\.\Bonjour",0
msgIoFail db "Erreur: DeviceIoControl a échoué",0
outBuf db 64 dup(?)
errBuf db 512 dup(?) ; buffer pour FormatMessageA
bytesRet dd ?
errCode dd ?
.code
start:
; Ouvrir le device
invoke CreateFileA, ADDR devPath, (GENERIC_READ or GENERIC_WRITE), 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL
cmp eax, INVALID_HANDLE_VALUE
jne @f
; Erreur ouverture -> afficher texte système
invoke GetLastError
mov errCode, eax
invoke FormatMessageA, (FORMAT_MESSAGE_FROM_SYSTEM or FORMAT_MESSAGE_IGNORE_INSERTS), NULL, errCode, 0, ADDR errBuf, SIZEOF errBuf, NULL
; si FormatMessageA n'a rien renvoyé, montrer un message générique
test eax, eax
jnz _msg_open
invoke MessageBoxA, NULL, ADDR msgOpenFail, ADDR msgTitle, MB_ICONERROR
jmp _exit
_msg_open:
invoke MessageBoxA, NULL, ADDR errBuf, ADDR msgTitle, MB_ICONERROR
jmp _exit
@@:
mov ebx, eax
; Envoyer l'IOCTL
invoke DeviceIoControl, ebx, IOCTL_GET_BONJOUR, NULL, 0, ADDR outBuf, SIZEOF outBuf, ADDR bytesRet, NULL
test eax, eax
jnz @f
invoke GetLastError ; -- erreur IOCTL -> texte système
mov errCode, eax
invoke FormatMessageA, (FORMAT_MESSAGE_FROM_SYSTEM or FORMAT_MESSAGE_IGNORE_INSERTS), NULL, errCode, 0, ADDR errBuf, SIZEOF errBuf, NULL
test eax, eax
jnz _msg_ioctl
invoke MessageBoxA, NULL, ADDR msgIoFail, ADDR msgTitle, MB_ICONERROR
jmp _close
_msg_ioctl:
invoke MessageBoxA, NULL, ADDR errBuf, ADDR msgTitle, MB_ICONERROR
jmp _close
@@:
; Succès !
invoke MessageBoxA, NULL, ADDR outBuf, ADDR msgTitle, MB_ICONINFORMATION
_close:
invoke CloseHandle, ebx
_exit:
invoke ExitProcess, 0
END start
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Le CTL_CODE de IOCTL_GET_BONJOUR ici et traduit par «00222000h» ça fait peut
être assez magie noire comparer a notre version en C, mais on peut le calculer
à la main. Même si dans la réalité personne ne fait ça (hormis nous pour le fun)
Dans leur doc en ligne Microsoft nous propose la structure d'un IOCTL sous forme
de diagramme:
https://learn.microsoft.com/fr-fr/windows-hardware/drivers/kernel/defining-i-o-control-codes
En voici une version ascii pour le zine:
31 30 16 15 14 13 12 2 1 0
┌────────┬─────────────────────┬────────────┬────────┬─────────────────┬──────┐
│ Common │ Device Type │ Access │ Custom │ Function │Method│
└────────┴─────────────────────┴────────────┴────────┴─────────────────┴──────┘
Pour faire court (et parce que la doc l'explique très bien)
un code IOCTL est un DWORD (32 bits), numérotés de 0 à 31, le bit 0 est le plus
à droite, et le bit 31 est le plus à gauche.
on veut reproduire
IOCTL_GET_BONJOUR CTL_CODE(FILE_DEVICE_UNKNOWN, 0x800, METHOD_BUFFERED, FILE_ANY_ACCESS)
pour connaitre ces valeurs, il faut regarder dans les définitions de la WDK.
devioctl.h:
#define FILE_DEVICE_UNKNOWN 0x00000022
wdm.h:
#define FILE_ANY_ACCESS 0x00000000
#define METHOD_BUFFERED 0
Pour «Function» on la définit nous même, on a choisi «0x800».
Si on transpose ça à notre diagramme:
DeviceType: bits 31 à 16 --> (FILE_DEVICE_UNKNOWN)
Access: bits 15 à 14 ------> (FILE_ANY_ACCESS)
Function: bits 13 à 2 -----> 0x800
Method: bits 1 à 0 --------> (METHOD_BUFFERED)
On fait un décalage à gauche pour calculer tout ça..
«DeviceType» commence à 16, donc on décale de 16 positions vers la gauche
31 0
┌─────────────────────────────────────┐
0x00000022 en binaire ça donne: 0000 0000 0000 0000 0000 0000 0010 0010
En décalé: 0000 0000 0010 0010 0000 0000 0000 0000
Résultat: 0x00220000
«FILE_ANY_ACCESS» commence à 14, mais vaut zéro, donc ça fait toujours zéro.
Pareil pour la méthode buffered qui vaut zéro dans les définitions donc osef.
Reste plus que 0x800 décalé de 2:
0x800 en binaire ça donne: 0000 0000 0000 0000 0000 1000 0000 0000
En décalé: 0000 0000 0000 0000 0010 0000 0000 0000
Résultat: 0x00002000
l'opération est plutôt simple du coup ici: 0x00220000+0x00002000 = 0x00222000
Voilà, c'était l'instant psychopathe du zine.
Pour compiler notre client user-land, on va créer un «make.bat» à placer dans le
même dossier que notre «bonjour.asm» avec:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
@echo off
\masm32\bin\ml.exe /c /coff bonjour.asm
\masm32\bin\link.exe /SUBSYSTEM:WINDOWS /RELEASE /VERSION:4.0 /OUT:BonjourDriver.exe bonjour.obj
del bonjour.obj
pause
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Pensez à créer une exclusion peut-être pour votre programme dans le centre de
sécurité Windows, pour une raison que j'ignore après la compilation l'antivirus
intégré de Windows pense que BonjourDriver.exe est hostile.
Celui-ci semble chez moi détecté en tant que: Trojan:Win32/Wacatac.C!ml
-- 0x5: Le test ! --
Bon et bien si votre driver tourne, il n'y a plus qu'à exécuter BonjourDriver
celui-ci devrait vous retourner une MessageBox contenant "Bonjour!"
Si quelque chose ne va pas, que le driver n'est pas initialisé, vous devriez
avoir un message du genre "Le fichier spécifié est introuvable."
Signifiant que CreateFileA a échoué.
-- 0x6: Le mot de la fin --
Voilà, le driver parle enfin avec l'user-land, et c'est déjà la fin de ce petit
tuto d'introduction au développement kernel. Si vous voulez en savoir plus sur
le fonctionnement de ntoskrnl et du système I/O, le livre «Windows Internals»
(en anglais) est la meilleure ressource que vous pouvez espérer lire a l'heure
où j'écris ces lignes...
J'espère que j'aurai réussi à en intéresser quelques-uns d'entre vous, et à la
prochaine dans un autre numéro ou dans un autre zine !
Une petite pensée au passage pour tous mes mates du défunt forum kernelmode.info
RIP (ou IRP, chacun voit midi à sa porte.)
________ __________
| ____. . ________ ____ \__ ____/__ -|-- - -----:-
| \_ `-|-' /_____ _/ \___ / /\__| | __________
|_ ___ /____| \ / \ /_ (/ / . \ |____ |
/ `-------\______ _/_____/ /_/ | /__ \ |
____//__ _ cWHQ! ---' \___/ \____/ `----' ________|
/ _ _ _______ _______ _ _ .:.
//__ __\\ t*****.fr :
- x - y - l - i - t - o - l - \/ elite only! -: -------
-- EOF --
_____/\\\\\\\\\_______________/\\\\\_____/\\\\\\\________/\\\\\\\____
___/\\\///////\\\_________/\\\\////____/\\\/////\\\____/\\\/////\\\__
__/\\\______\//\\\_____/\\\///________/\\\____\//\\\__/\\\____\//\\\_
_\//\\\_____/\\\\\___/\\\\\\\\\\\____\/\\\_____\/\\\_\/\\\_____\/\\\_
__\///\\\\\\\\/\\\__/\\\\///////\\\__\/\\\_____\/\\\_\/\\\_____\/\\\_
____\////////\/\\\_\/\\\______\//\\\_\/\\\_____\/\\\_\/\\\_____\/\\\_
__/\\________/\\\__\//\\\______/\\\__\//\\\____/\\\__\//\\\____/\\\__
_\//\\\\\\\\\\\/____\///\\\\\\\\\/____\///\\\\\\\/____\///\\\\\\\/___
__\///////////________\/////////________\///////________\///////_bauds
┌────────────────────────────────┐
│ ISSUE No 3 - Avril 2026 04.TXT └─────────────────────────────────────────────┐
| Le chiffonnier bénévole d'internet. |
| ANoN |
└──────────────────────────────────────────────────────────────────────────────┘⠀
>>> Chiffonnier (métier):
>>> Un chiffonnier est une personne dont le métier consiste à circuler dans les
>>> zones urbaines pour récupérer, ramasser ou racheter des choses usagées et
>>> les revendre à des entreprises de transformation.
Bonjour à tous! Comme dirait l'autre, un hacker qui s'ennuie est un hacker qui
peut trouver des trucs.
Chaque bidouilleur a son moyen préféré de passer le temps sur de la cyber.
Il y en a qui font du web quand ils s'ennuient, il y a les malades du cerveau
qui font du pwn, d'autres qui font du reverse de jeux, moi personnellement ce
que j'aime faire quand je n'ai plus d'inspiration, c'est d'arpenter les moteurs
de recherche d'IP publiques. J'ai dû y passer plusieurs centaines d'heures.
Chacun son kink.
Je vais donc ici essayer d'expliquer pourquoi je trouve ça cool et ma démarche
de recon quand on n'a aucun objectif, vous allez voir au début, c'est plus une
démarche maïeutique (le truc de Socrate là), qu'une démarche technique.
Pourquoi c'est cool ?
Personnellement, se perdre sur Google, Shodan ou autre moteur de recherche,
c'est un peu un retour en enfance, tu découvres un endroit, il y a plein de
trucs partout, tellement de trucs partout que tu peux juste regarder ce qu'il
y a et repartir pour faire la même chose autre part.
C'est comme découvrir que la maison des grands-parents a un grenier, et que tu
as enfin le droit d'y aller pour fouiller, chaque trouvaille peut se trouver
être des trésors.
L'idée de base est donc d'explorer internet et à partir d'une idée de base
courir dans le sens qu'on veut.
Socrate, il vient faire quoi là-dedans ?
La maïeutique, pour faire court, c'est le concept de faire accoucher
l'esprit d'une personne d'une vérité qu'il possède déjà.
Pour cet article je vais prendre l'exemple d'un sujet que j'aime bien, les
systèmes cyber-physiques (Système matériel et logiciel qui collecte et traite
les données d'un ou de plusieurs objets connectés et commande les actionneurs
nécessaires à leur fonctionnement.)
Je sais que ces systèmes pullulent sur internet, et il y en a tellement que je
ne sais pas par où commencer.
Donc on va essayer de créer un cheminement cognitif autour de ce concept de
système cyber-physique (SCP).
(pour ceux qui n'ont pas la réf qui va suivre, jouez à Disco Elysium)
[[--
YOU — Donc, je veux trouver des SCP. Des systèmes cyber-physiques exposés
sur internet. Il y en a des milliers. Des dizaines de milliers. Mais par où
on commence ?
INLAND EMPIRE [Moyen : Réussite] — Tu les _sens_, n'est-ce pas ? Derrière
les adresses IP, il y a des machines qui respirent. Des capteurs qui
clignotent dans des armoires poussiéreuses, quelque part dans un sous-sol
d'Europe de l'Est. Elles t'attendent. Elles ont toujours attendu.
YOU — Je ne suis pas sûr qu'elles m'attendent.
INLAND EMPIRE — Elles ne le savent pas encore. Mais toi, tu sais qu'elles
sont là. Tu vis en Europe. Commence par regarder autour de toi. Quelque
chose de proche. De familier. Comme fouiller dans les poches d'un vieux
manteau.
LOGIC [Moyen : Réussite] — Arrête avec tes métaphores. Soyons méthodiques.
La France a probablement des systèmes exposés, mais ce n'est pas le meilleur
angle d'attaque. Tu cherches un ratio signal/bruit favorable. Il te faut un
pays suffisamment connecté pour avoir des équipements en ligne, mais
suffisamment peu doté en hygiène cyber pour que ces équipements soient
_visibles_.
YOU — Un pays plus petit, alors.
LOGIC — Plus petit, oui. Moins de budget cybersécurité, moins de régulation,
moins d'audits. Mais avec une infrastructure industrielle quand même. C'est
une simple question de probabilités conditionnelles.
ENCYCLOPEDIA [Moyen : Réussite] — Les pays slaves, pour être précis. Il y en
a treize, séparés en trois blocs linguistiques et culturels.
Les slaves orientaux : Russie, Ukraine, Biélorussie.
Les slaves occidentaux : Pologne, République tchèque, Slovaquie.
Et les slaves méridionaux : Serbie, Croatie, Bosnie-Herzégovine, Slovénie,
Monténégro, Macédoine du Nord, Bulgarie. La Serbie, notamment, possède un
tissu industriel non négligeable avec un indice de maturité cyber
relativement bas selon les rapports de l'ITU...
YOU — D'accord, d'accord, merci Wikipédia.
ENCYCLOPEDIA — ... et un secteur des télécommunications en pleine expansion
depuis les années 2010, avec plusieurs fabricants d'équipements réseau
locaux.
HALF-LIGHT [Difficile : Réussite] — Écoute. Écoute-moi bien.
Oublie les pays. Oublie la géographie. Remonte la chaîne. Si tu trouves un
constructeur d'équipements, tu ne trouves pas un système. Tu trouves _tous_
les systèmes. Chaque routeur, chaque gateway, chaque boîtier qu'ils ont
vendu et qui traîne sur internet avec sa config par défaut. Tu fais d'une
pierre quarante coups. C'est comme trouver le nid au lieu de chasser les
insectes un par un.
YOU — Et la Serbie ?
HALF-LIGHT — La Serbie fera l'affaire. Petit pays, fabricants locaux, moins
de regards indiscrets. Vas-y. Maintenant.
SUGGESTION [Facile : Réussite] — Un routeur GSM. C'est ton angle d'approche.
Réfléchis : c'est un des points d'accès principaux pour les systèmes
cyber-physiques. Ils sont partout, ils ont des interfaces web, et surtout
— surtout — personne ne pense à les cacher. Les gens protègent leurs
serveurs, leurs bases de données. Mais un routeur ? Un petit boîtier GSM
dans une armoire technique ? Il est _invisible_ par excès de banalité. Et ce
qui est invisible n'est pas protégé.
YOU — On ne va pas essayer de se connecter, hein ?
VOLITION [Moyen : Réussite] — Non. On ne va pas essayer de se connecter.
C'est la ligne, et on ne la franchit pas. L'idée est d'observer la surface
exposée, pas de la pénétrer. Tu peux apprendre énormément d'un système sans
jamais y entrer : les en-têtes, le favicon, les fichiers JavaScript publics,
la page de login elle-même. Tout ce qui est _déjà_ public. Reste de ce côté
de la porte. C'est là que réside la discipline, et c'est ce qui fait la
différence entre la curiosité et le délit.
YOU — Bien. Il me faut un constructeur serbe de routeurs GSM. Je ne connais
rien au marché local.
ENCYCLOPEDIA [Moyen : Échec] — Les fabricants serbes d'équipements réseau...
il y a... je suis presque sûr que... Non. Je n'ai pas cette information.
C'est trop spécialisé. Il va falloir demander à internet, ou à un de ces
grands modèles de langage.
ELECTROCHEMISTRY [Facile : Réussite] — Mmmh. _Geneko_. Regarde-moi ce site
web. Geneko, basé à Belgrade. Des routeurs industriels, des gateways IoT,
des modems. Tu sens ce frisson ? C'est l'odeur d'une piste. Prends-les en
exemple. Allez.
VOLITION — Reste concentré. On prend Geneko comme exemple. On regarde ce qui
est public. Rien de plus.
YOU — Super. Merci les voix dans ma tête. On a notre objectif.bien sûr c'est
exagéré, mais allez quand même, jouez à Disco Elysium.
--]]
Donc on trouve facilement le site de Geneko (https://www.geneko.rs/), et là on
va commencer simple, comme le mec qui a fait tomber YGG, on va commencer par
un favicon. On va essayer d'appliquer la théorie suivante, dans les systèmes
embarqués il y a de grandes chances d'avoir un serveur web, il y a donc un monde
où un constructeur d'équipements réutilise des favicons.
Donc on trouve un moyen de récupérer le favicon du site web, avec ça on peut
commencer à pivoter
- https://www.geneko.rs/favicon.ico
Il existe plein de solutions pour générer un hash de favicon, personnellement
j'utilise ce site web.
- https://favicon-hash.kmsec.uk/
Ok, donc c'est cool, on peut se rendre compte que le site web de Geneko utilise
le même favicon pour ses produits. Si vous voulez extraire les informations de
Shodan et que vous avez un compte, vous pouvez utiliser ce script
import shodan
SHODAN_API_KEY = 'API'
FAVICON_HASH = 1490525349
api = shodan.Shodan(SHODAN_API_KEY)
LIMIT = 400
def search_by_favicon_hash(favicon_hash, limit=400):
query = f'http.favicon.hash:{favicon_hash}'
count = 0
servers = []
for result in api.search_cursor(query):
if count >= limit:
break
ip = result['ip_str']
port = result['port']
servers.append((ip, port))
count += 1
return servers
if __name__ == '__main__':
servers = search_by_favicon_hash(FAVICON_HASH, LIMIT)
with open('ip_port_shodan.txt', 'w') as f:
for ip, port in servers:
f.write(f'http://{ip}:{port}\n')
Donc on a maintenant une liste d'IP et de ports. Mais les faire à la main c'est
laborieux et je n'ai pas envie de perdre du temps avec cela. Pour pallier à ce
problème j'utilise GoWitness
https://github.com/sensepost/gowitness
GoWitness est un outil de screenshots web basé sur Golang, il utilise Chrome
headless. Si vous êtes sous Kali Linux, un simple "apt install gowitness"
devrait faire l'affaire.
gowitness scan file -f FILENAME.txt
Voilà, avec ça vous avez un bon visuel de ce qu'il y a.
On creuse un peu.
Bien sûr c'est pas fini, on va tenter de regarder ce qu'il y a en public.
Essayons de voir s'il ne pourrait pas y avoir des infos sur les méthodes de
connexion.
--------------------------------------------------------------------------------
NOTE: les actions suivantes ont été drop par le proxy (Burp Suite), il n'y a
donc eu aucune tentative de connexion.
--------------------------------------------------------------------------------
Si on place un proxy (Burp Suite) pour une tentative de connexion, on se rend
compte que notre mot de passe et username sont en base 64, ça veut dire que le
chiffrement des credentials se fait en local puis est envoyé sur le serveur.
Quand on cherche un peu les appels JS on tombe sur /lib/gwr.js, un gros blob de
JS de plusieurs milliers de lignes. Et dedans il y a une petite surprise, une
petite fonction nommée hpasswd
function hpasswd(a) {
a = a.split("");
var b = a[0],
d = a[4],
e = a[3];
a[0] = a[2];
a[2] = b;
a[3] = d;
a[4] = e;
a.join("");
b = [];
d = Math.round(a.length / 2);
for (e = 0; e < a.length; e++)
if (e < d) {
var f = a[e].charCodeAt(0),
g = 33;
120 >= f && (g = f + 5);
b.push(a[e]);
b.push(String.fromCharCode(g))
} else b.push(a[e]);
return b.reverse().join("")
}
Vous l'aurez compris, c'est la fonction de hash de mot de passe, qui est plus un
scramble qu'autre chose. Donc avec ça, on active le mode bruteforce si on était
des méchants, mais ce n'est pas notre cas, donc on va s'arrêter là.
C'est court, et je n'explique pas tout, mais l'idée est là. Si vous voulez
trouver un truc sur internet vous le trouverez, mais il faut avoir l'idée de
chercher et surtout de quoi chercher.
-- EOF --
_____/\\\\\\\\\_______________/\\\\\_____/\\\\\\\________/\\\\\\\____
___/\\\///////\\\_________/\\\\////____/\\\/////\\\____/\\\/////\\\__
__/\\\______\//\\\_____/\\\///________/\\\____\//\\\__/\\\____\//\\\_
_\//\\\_____/\\\\\___/\\\\\\\\\\\____\/\\\_____\/\\\_\/\\\_____\/\\\_
__\///\\\\\\\\/\\\__/\\\\///////\\\__\/\\\_____\/\\\_\/\\\_____\/\\\_
____\////////\/\\\_\/\\\______\//\\\_\/\\\_____\/\\\_\/\\\_____\/\\\_
__/\\________/\\\__\//\\\______/\\\__\//\\\____/\\\__\//\\\____/\\\__
_\//\\\\\\\\\\\/____\///\\\\\\\\\/____\///\\\\\\\/____\///\\\\\\\/___
__\///////////________\/////////________\///////________\///////_bauds
┌────────────────────────────────┐
│ ISSUE No 3 - Avril 2026 05.TXT └─────────────────────────────────────────────┐
| Android sur x86 ? |
| Ako <ako@timewire.fr> |
| Grenoble Hackerspace |
└──────────────────────────────────────────────────────────────────────────────┘⠀
$ ls -lah
total 32K
drwxr-xr-x 2 ako ako 4,0K 25 mars 23:43 .
drwx------ 81 ako ako 4,0K 25 mars 23:43 ..
-rw-r--r-- 1 ako ako 389 25 mars 23:40 01-introduction.txt
-rw-r--r-- 1 ako ako 1,6K 25 mars 23:40 02-options.txt
-rw-r--r-- 1 ako ako 1,3K 25 mars 23:42 03-firsttry.txt
-rw-r--r-- 1 ako ako 1,8K 25 mars 23:42 04-secondtry.txt
-rw-r--r-- 1 ako ako 386 25 mars 23:43 05-thirdtry.txt
-rw-r--r-- 1 ako ako 1,1K 25 mars 23:43 06-conclustion.txt
$ tail -n +1 *
==> 01-introduction.txt <==
Un jour comme les autres, j'arrive au taf. Je m'asseois à mon bureau, je me
prépare pour ma journée. Et là, y'a un collègue tout content qui veint me voir.
> Dis moi Emi, on est en train de dev un nouveau kiosque web sur Android, est-ce
> que tu peux me dire si y'a moyen de faire tourner ça sur un mini-pc en x86_64?
De quoi cracher son thé n'est-ce pas ? j'ai craché le mien.
==> 02-options.txt <==
Le problème majeur, vous vous en doutez, c'est qu'Android est prévu pour tourner
sur des processeurs ARMv7 ou AARCH64, car tous les téléphones utilisent des SoC
type Snapdragon.
Etant donné que du monitoring et de la remontée d'informations système était
prévue, l'idée de faire de la virtualisation a vite été oubliée. Il me fallait
faire tourner le système de manière native sur la machine, à mon grand regret.
Après quelques recherches, j'ai découvert tout un écosystème.
Android GSI =>
Littéralement une image système générique, une compilation de l'AOSP (Android
Open Source Project) sans modification
De base, c'est fait pour être flashé sur un téléphone ayant déjà Android, donc
l'idée de l'utiliser a vite été avortée.
AOSP étant basé sur un kernel Linux, il me semble qu'il fallait aussi compiler
son kernel Linux et soyons honnêtes, j'avais pas la patience pour ça.
Android_x86 =>
Projet prometteur, c'est à l'origine un port de l'AOSP qui faisait du patch
hosting. Maintenant, c'est devenu une sorte de distro de base pour tous les
systèmes Android compatibles x86. Problème : la distribution est archivée et
plus maintenue depuis fin 2025.
BlissOS (et BassOS, et autres) =>
Une distribution Android qui se base sur Androix_x86. Elle, elle est encore
maintenue contrairement à Android_x86. Par contre, on est obligé de récupérer
des images précompilées sur une archive sourceforge. Aucun moyen de choper les
ISOs sur le site officiel, et il y en a une quantité aberrante.
==> 03-firsttry.txt <===
Dans un premier temps j'ai tenté l'installation d'Android_x86. Vu que c'est une
distribution légère, j'me suis dit "boh, ça devrait marcher du tonnerre !"
Je prends une clé USB bootable linux, je branche, je lance l'installateur.
Déjà, premier problème: la version que j'avais chopé ne détectait pas les block
devices type ROM (mmcblk), prenait seulement les block devices solides (sda) ou
NVME (nvme). Bon, ça encore, j'ai pu faire abstraction en changeant d'ISO de
base.
Second problème: l'installateur voulait FORCER l'installation BIOS et non UEFI.
C'est fort problématique, car le démarrage LEGACY était coupé dans le BIOS.
J'ai pu contourner ça plus tard, j'avoue ne plus avoir les détails de comment.
Troisième problème : la création automatique des partitions était foireuse et
créait une partition EFI trop petite. J'ai dû la recréer à chaque fois.
Après plusieurs heures de débacles, j'arrive enfin à démarer un Android !
Enfin... c'était sans compter divers drivers absent, qui permettent notamment
de faire fonctionner les cartes réseaux. Cocasse pour afficher un kiosque web !
Au vu du bordel que c'était pour faire *une* installation, je me suis mise à
l'évidence et j'ai abandonné l'option.
==> 04-secondtry.txt <==
Ok, Android_x86 c'était la galère.
C'est parti pour tester une distribution faite pour du desktop !
Alors parce que oui, BlissOS est une distribution *faite* pour être hybride
Desktop/Portable, donc je ne devrais plus avoir ces problèmes de drivers.
Déjà, la moitié des problèmes de la première tentative ont disparus. Il me
restait que le troisième problème, ce qui est complètement manageable.
Je lance le système...
HURRAY ! Tout fonctionne !
Même si naviguer c'est la tannée et que l'application qui sert d'overlay desktop
est INFÂME, on peut activer ADB dans les paramètres pour installer le kiosque.
^-----------------------------^
c'est intéressant à noter, le débogage USB fonctionne en
réseau. Pratique pour provisionner des devices Android !
On installe le kiosque, on lance la page web, tout fonctionne.
On change l'URL pour tester avec de la vidéo... Et là, c'est le drame. Rien
n'est lu. Bon, c'est parti pour débugger.
On plug une connexion ADB, on chope les logs du kiosque, et il s'avère que la
webview du système ne possédait AUCUN codec vidéo. Enfin, c'est pas qu'il ne les
possédait pas, c'est que les liens symboliques ont pétés. Car l'arborescense
système dans un Android_x86 c'est très fouillis. On a un semblant de FHS Linux,
mais là avec un mélange de dossiers nommés pour de l'ARM64 et de dossiers nommés
pour du AMD64 (x86). Encore pire, certains linkages de fichiers binaires n'ont
juste pas marchés, et allez savoir pourquoi tout démarre et fonctionne quand
même.
Après un peu de recherches, on a découvert avec mon collègue que c'était un
problème DANS LA DISTRIBUTION et qu'il fallait REVERT le système pour aller sur
une version obsolète. On était sur BlissOS 16, on a dû passer sur BlissOS 15.
==> 05-thirdtry.txt <==
Et on est repartis...
J'installe BlissOS 15, on retrouve le troisième problème que je commence à
connaître et que je contourne, et on arrive sur le système.
On a toujours le bureau/tray buggé, j'active ADB dans les paramètres, on
installe le kiosque, on lance.
A L L E L U J A H !
On a un affichage vidéo !
Des métriques remontent dans notre interface, le compte est bon.
==> 06-conclustion.txt <==
Après une semaine à faire des installations en boucle, à burn une dizaines d'ISO
différents sur une clé USB, à faillir faire un dd d'un device sur lui-même et
d'autres péripéties, j'ai pu installer Android_x86 sur un mini-pc.
Je vous ai évidemment épargné tous les petits détails, les tentatives
d'installation de distributions obsolètes, les quelques zoives qui s'amusent à
vendre des licences pour une distrib Android_x86 custom et le dépit absolu quand
on m'a dit qu'on allait changer de hardware pour prendre des Android TV.
Est-ce que c'était fun à faire ? Oui, de ouf !
Est-ce que je suis censé être la seule à savoir faire ça dans une alternance ?
Non, vraiment pas.
Est-ce que je le referais, et est-ce que je recommanderais à quelqu'un de faire
une installation Android_x86 ?
SURTOUT PAS. Sauf si vous avez une raison précise ou un usage spécifique,
Android_x86 est un projet STALE/NON MAINTENU qui est très instable. Si vous
pouvez faire de la virtualisation ou de l'émulation, privilégiez plutôt cette
piste.
C'était mon retex sur cette purge qu'était l'installation d'un Android sur pc
x86.
| /
Sur ce, peace out. |_/.
| //
|_|
$ ^D
-- EOF --
_____/\\\\\\\\\_______________/\\\\\_____/\\\\\\\________/\\\\\\\____
___/\\\///////\\\_________/\\\\////____/\\\/////\\\____/\\\/////\\\__
__/\\\______\//\\\_____/\\\///________/\\\____\//\\\__/\\\____\//\\\_
_\//\\\_____/\\\\\___/\\\\\\\\\\\____\/\\\_____\/\\\_\/\\\_____\/\\\_
__\///\\\\\\\\/\\\__/\\\\///////\\\__\/\\\_____\/\\\_\/\\\_____\/\\\_
____\////////\/\\\_\/\\\______\//\\\_\/\\\_____\/\\\_\/\\\_____\/\\\_
__/\\________/\\\__\//\\\______/\\\__\//\\\____/\\\__\//\\\____/\\\__
_\//\\\\\\\\\\\/____\///\\\\\\\\\/____\///\\\\\\\/____\///\\\\\\\/___
__\///////////________\/////////________\///////________\///////_bauds
┌────────────────────────────────┐
│ ISSUE No 3 - Avril 2026 06.TXT └─────────────────────────────────────────────┐
| Archive photo sur android avec syncthing |
| ./nap |
└──────────────────────────────────────────────────────────────────────────────┘⠀
INTRO ------------------------------------------------------------------
128GB de stockage contiennent à peu près 6 années de mes photos. Il
me reste 4GB, il est grand temps d'acheter un nouveau smartphone ! Et
non pas du tout. Plutôt que de passer à 256GB, voyons comment
archiver nos photos sur un ordinateur équipé de syncthing!
SOMMAIRE ---------------------------------------------------------------
1. Côté android
2. Côté laptop
3. L'archivage à longs termes
4. Plus loin
1. CÔTÉ ANDROID -------------------------------------------------------
Sur mon téléphone android, j'ai créé un dossier DCIM-archives, en
plus du dossier DCIM qui contient les précieux clichés.
Je déplacerai ici mes vidéos et photos à archiver.
/storage/
└── emulated
└── 0
├── DCIM
└── DCIM-archives
Grâce à syncthing sur android, je partage DCIM-archives avec mon
laptop.
2. CÔTÉ LAPTOP --------------------------------------------------------
Sur mon laptop équipé de syncthing, j'ai donc le même dossier
"DCIM-archives" dans mon /home.
J'ajoute également un second nouveau dossier
"DCIM-long-term-archives". Il contiendra au final les photos
archivées.
~/
├── DCIM
├── DCIM-archives
└── DCIM-long-term-archives
Notons que le dossier DCIM est déjà une synchro complète du DCIM de
mon appareil mobile android, en mode "envoi seulement" depuis mon
mobile. Il n'est donc pas utile dans le cadre de cet article.
3. L'ARCHIVAGE À LONGS TERMES -----------------------------------------
Lorsque je souhaite archiver des photos de mon téléphone android, je
les déplace dans le dossier DCIM-archives du téléphone.
Syncthing upload automatiquement les fichiers vers mon laptop, et sur
ce dernier, un cron va déplacer les photos de DCIM-archives vers
DCIM-long-term-archives.
Le petit cron suivant créé aussi une arboresence par années, mois et
jours pour éviter un unique dossier qui contiendrait des milliers de
fichiers.
... crontab
0 * * * * cd $HOME ; for FILE in $(find DCIM-archives -type f -not -name ".*") ; do LTA="DCIM-long-term-archives/$(date +%Y/%m/%d --reference $FILE)"; mkdir --parents $LTA ; mv $FILE ${LTA}/; done &> /tmp/photo-archive.log
...
Notes :
- dans un cron il faut échapper les % avec \% donc pour la commande
date ce sera : date +\%Y/\%m/\%d
Les fichiers (côté laptop) étant déplacés, le dossier "devient"
vide. Syncthing va ainsi le répercuter sur le téléphone en vidant
également DCIM-archives du téléphone.
Et voilà, espace libéré !
4. PLUS LOIN ----------------------------------------------------------
Penser aux backups...
Et pourquoi ne pas partager ce dossier DCIM-long-term-archives depuis
le laptop vers d'autre syncthing ? Mais attention opter pour du "Send
only" ce qui évitera des problèmes !
_____/\\\\\\\\\_______________/\\\\\_____/\\\\\\\________/\\\\\\\____
___/\\\///////\\\_________/\\\\////____/\\\/////\\\____/\\\/////\\\__
__/\\\______\//\\\_____/\\\///________/\\\____\//\\\__/\\\____\//\\\_
_\//\\\_____/\\\\\___/\\\\\\\\\\\____\/\\\_____\/\\\_\/\\\_____\/\\\_
__\///\\\\\\\\/\\\__/\\\\///////\\\__\/\\\_____\/\\\_\/\\\_____\/\\\_
____\////////\/\\\_\/\\\______\//\\\_\/\\\_____\/\\\_\/\\\_____\/\\\_
__/\\________/\\\__\//\\\______/\\\__\//\\\____/\\\__\//\\\____/\\\__
_\//\\\\\\\\\\\/____\///\\\\\\\\\/____\///\\\\\\\/____\///\\\\\\\/___
__\///////////________\/////////________\///////________\///////_bauds
ISSUE No 3 - Avril 2026
9600@ghspace.fr
#9600 sur irc.libera.chat
┌────────────────────────────────┐
│ ISSUE No 3 - Avril 2026 07.TXT └─────────────────────────────────────────────┐
| Transformer du texte en musique |
| Aucuno |
| Grenoble Hackerspace (Grenoble) |
└──────────────────────────────────────────────────────────────────────────────┘⠀
_______________________________________
/|.......................................|
| |: "Transformer du texte en musique" :|
| |: :|
| |: ,-. _____ ,-. :|
| |: ( `)) [_____] ( `)) :|
|v|: `-` ' ' ' `-` :|
|||: ,________________. :|
|^|........../::O:: Aucuno ::O::\.........|
|/`---------/--------------------`--------|
`._________/ /====/ /=//=/ /====/_________/
`--------------------'
|
-_-____-_--_---_-_---_-_---_-_-_-_-_____-_-_-_-_-_-___-_-_-- 0 - Introduction
| ============
Quand vous faites de la musique il y a de fortes chances qu'un jour vous
entendiez parler de Midi[1]. Ces quatres lettres peuvent definir plusieurs
choses mais ici nous allons nous concentrer uniquement sur le SMF[[[2].
De plus, créer de la musique est pour la plupart des gens un exercice
difficile alors pouvoir en faire à partir de texte brut raisonne comme une
idée assez interessante.
Mais, un fichier midi pourrait aussi servir à cacher du texte sans avoir
pour but de créer de la musique.
Ce sont ici, les deux domaines que nous allons aborder.
|
___---_-_---_-_--_-_-_-_-___-_-_--_---_-_--_---_--_-_-___-_ 1 - Midi File
| =========
Description rapide
==================
Pour commencer, si on veut se représenter à quoi ressemble l'interieur
d'un fichier midi, il ne faut pas penser y trouver de l'ASCII. Dedans c'est
simplement un fichier binaire (comme tout les fichiers sur un ordinateur
en effet).
Ainsi, si on veut juste regarder son contenu, un editeur de texte lambda
est parfaitement inutile. On peut toutefois l'ouvrir avec des logiciels
d'edition de ce type de fichier par exemple MuseScore Studio est un logiciel
de partition qui prend aussi en compte la lecture des fichiers au format
".mid" en plus de son format propriétaire. Il est aussi amusant de noter
qu'un hexdump est tout a fait possible sur un fichier midi :
_.-=-._.-=-._.-=-._.-=-._.-=-._.-=-._.-=-._.-=-._.-=-._.-=-._
.-'--- - --- -- --- - -- ---- - ---`-.
) (
( $ hexdump exemple.mid )
) 0000000 544d 6468 0000 0600 0100 0100 e001 544d (
( 0000010 6b72 0000 a46c c000 0000 4990 200c 4b80 )
) 0000020 2040 4b90 811d 8002 4049 9000 135c 420a (
( 0000030 002a 2d4c 550a 2b19 2e3f 8000 4040 5e00 )
) 0000040 2040 4041 9000 4842 4b00 0010 0f5c 8036 (
) 0000050 404b 9015 124b 8000 405c 5315 2b40 404b )
( 0000060 9015 124b 5e00 561c 4980 2040 5590 2b2a )
) 0000070 5c80 0a40 4990 002a 1d5e 8036 4040 9036 (
( 0000080 2442 6700 0a09 4e80 1540 4049 6700 1540 )
) 0000090 4990 4c36 5c80 0a40 5e90 3613 5c80 1540 (
) 00000a0 5e90 361e 5e80 1540 5e90 150c 4280 0040 )
( 00000b0 4055 5c0a 1540 4290 001b 135e 5020 0019 )
) 00000c0 5e80 2040 4049 9000 0f57 800a 4050 9000 (
( 00000d0 305c 6300 0a13 2e50 490a 0a17 6380 0a40 )
) 00000e0 4057 9015 0b65 800a 4042 6320 1540 6590 (
) 00000f0 0a14 0d42 5500 0a19 4980 0a40 4063 900a )
( 0000100 164b 8015 4052 420a 0040 5090 0034 5580 )
) 0000110 0a40 6590 2013 1f40 8000 4065 490a 0a40 (
( 0000120 6390 000d 2963 4b15 001f 0d65 8015 4061 )
) 0000130 650a 2b40 6190 3609 0e65 8020 4061 4215 (
) 0000140 0040 4067 9015 1763 6500 3616 2d40 8036 )
( 0000150 405e 670a 2040 4061 634c 0a40 404b 900a )
) 0000160 3265 570a 3612 5580 0040 5c90 203f 0f55 (
( 0000170 6100 0a12 104b 8020 4061 570a 0a40 404b )
) 0000180 9000 0b63 550a 1526 204b 8000 4061 9000 (
) 0000190 0d65 800a 4042 9020 2b40 8000 4067 522b )
( 00001a0 1540 404b 9000 3a52 4920 200e 2465 8020 )
) 00001b0 404b 900a 2861 4915 0016 0d55 8036 4057 (
( 00001c0 424c 0040 4049 9000 2455 4215 152d 2d49 )
) (
(___ _ _ _ _ _ _ ___)
`-._.-' (___ _) (__ _ ) (_ _) (__ _) (__ _ ) `-._.-'
`-._.-' ( ___) ( _ _) (__ __) `-._.-'
`-._.-' (__ _) `-._.-'
`-._.-'
Voici qui nous donne une bonne vision de ce que contient un fichier midi en
son sein. Néamoins ce charabia hexadecimal à vocation à être compris et avec la
documentation on peut en tirer des informations importantes sur l'écriture
du dit fichier.
Chunks
======
Pour bien introduire les chunks en Midi, voici un extrait de la documentation
les concernants.
"MIDI Files are made up of chunks. Each chunk has a 4-character type and a
32-bit length, which is the number of bytes in the chunk. This structure allows
future chunk types to be designed which may easily be ignored if encountered
by a program written before the chunk type is introduced. Your programs
should expect alien chunks and treat them as if they weren't there." -SMF1.0[3]
Oui, le Midi est vraiment écrit pour être étendu longtemps après sa
création.
Donc, un fichier Midi contient des chunks qui contiennent des messages
(ce n'est pas important pour l'instant ce dont il s'agit).
Le premier des chunks du fichier est un header chunk qui contient le minimum
vital d'info pour la bonne lecture du fichier Midi.
Il prend cette forme : <Header Chunk> = <chunk type> <length> <format>
<ntrks> <division>
<chunk type> contient les 4 caractère l'identifiant comme header soit
"MThd"
<lenght> représente la longueur du chunk sur un entier 32b commençant
par le poid fort
<format> représente le format du fichier (0, 1, 2) sur 16b
<ntrks> représente le nombre de chunk "track" présent dnas le fichier
sur 16b
<division> représente le "delta time" (n'est pas réellement utile pour
nous en plus d'être compliqué a comprendre)
Le gros d'un fichier midi est constitué des track chunk. Il s'agit des
chunks contenant le plus interessant : les events et les messages.
On reviendra dessus plus tard cela dit.
Format
======
Par défaut, il existe trois formats:
0: Parfait pour ce qu'on doit faire (make things)
1: Utilisons celui-ci (make interesting things)
2: On s'en fiche (make another things)
Cependant, si le format n'est pas connu par le programme lisant le fichier,
il sera interprété comme un format 1.
Un fichier en format 0 est juste un header suivit d'un seul track contenant
tout ce qui est necessaire pour faire du son.
Un fichier en format 1 est juste un header suivit d'un ou plusieurs tracks
et est un format "par défaut" quand le format n'est pas reconnu.
Un fichier en format 2 est exactement pareil que le format 1 mais fonctionne
différement.
Messages
========
Lisez la doc moi je passe aux choses interessantes.
Sinon, on peut préciser que parmis tout les messages, certains contiennent
une note et c'est ça qui va nous interesser principalement par la suite.
|
_____-_-_---------_-_-_-__-____-_-_-_-_-______---_-_-__- 2 - Du texte au Midi
| ================
Une note est un caractère
=========================
Ici, l'idée est assez simple : on va se servir des messages contenant des
notes. Une note est représentée sur un octet signée entre 0 et 127 tout
comme l'ASCII. Vous l'aurez compris, on va exploiter cette information pour
directement écrire de l'ASCII dans une note.
Donc pour résumer, on commence a écrire un fichier midi des plus classiques,
avec son header, son type (0 ou 1) et on ajoute des messages qui jouent une
note durant une certaine durée (admettons égale a la valeur du nombre en
ASCII) qui sont nos caractères ASCII qu'on veut écrire, rien de plus simple.
Mais, pour les fichiers qui ne sont pas en ASCII ? Admettons qu'en bon
français.e vous avez décidé d'utiliser des accents, il serait judicieux
que cela puisse aussi passer dans un fichier Midi, après tout c'est du
texte non ? Et bien avec cette méthode cela n'est malheureusement pas possible.
Une note par bit ?
==================
Soit, admettons que pour ne pas nous être limité par le concept des
codages on se décide de descendre d'un cran. Exit les routeurs, place au
physique! (blague résident dans le modèle OSI). Il est tout a fait possible
de représenter un bit par note. Après tout 0 et 1 sont inclus dans [|0;127|].
Cependant on va se retrouver avec un probleme de monotonie : on n'aurai que
deux notes différentes, ce n'est pas très joli (et je veux pouvoir écouter
ce que je cache).
Un fichier clef
===============
C'est ici que commence l'idée de cacher du texte dans du midi et qu'on sors
legèrement du simple encodage (on aborde enfin tout ce qui était promis
dans l'introduction).
Imaginons que nous avons n bits à cacher dans un fichier midi. Pour le faire
de manière discrète il va falloir se doter d'un fichier midi préexistant
(clef.mid). Une fois cela fait pour chacun des n bits que nous avons a encoder
nous allons lui associer le message i des m messages qui jouent des notes
de clef.mid et les chiffrer. Si n <= m tout va bien mais si n > m, alors il
y a plus de bits a chiffrer que de message pour les chiffrer. Pour cela il
suffit de rajouter exactement le même pool de message juste après qu'il se
soit fini et ce jusqu'à ce qu'il y ai assez de message pour le nombre de bit.
Pour chiffrer nous allons proceder avec une fonction f : (b, note) -> note
défini par f(b,note) = note - 1 [128] si b = 0 sinon note + 1 [128]. Ce
qui donne un fichier résultat qui est une concatenation de n/m + m notes
de musiques de clefs qui sont toutes fausses (oui c'est pas très jolie mais
c'est mieux que deux notes).
Note : (il s'agit clairement de chiffrement symétrique [4])
Un caractère est une note
=========================
Pour décoder du texte avec ce format on va tout simplement faire effectuer
les opérations inverse a la partie 2.1, c'est à dire identifier les messages
qui sont des notes, et écrire la valeur de cette note comme un caractère
ASCII et le tour est joué.
Un but par note
===============
Même principe que pour 3.1 mais avec des bits, on identifie les notes et
on écrit bit à bit.
Le fichier clef
===============
Le trick ici pour décoder ce qu'on vient de faire c'est d'avoir la clef
qui a servit a encoder (chiffrement symétrique oblige). Et on refait tout
dans le sens inverse. Cependant, pour ce qui est d'inverser le modulo cela
nécessite quelques règles :
1. Si la note de la clef qui correspond est superieure a la note du
fichier et que la note du fichier est 0 alors le bit est 1
2. Si la note de la clef qui correspond est inferieure a la note du
fichier et que la note du fichier est 127 alors le bit est 0
3. Si la note de la clef qui correspond est superieure a la note du
fichier alors le bit est 0
4. Si la note de la clef qui correspond est inferieure a la note du
fichier alors le bit est 1
Il faut vérifier dans cette ordre précis (vous pouvez biensur intercharger
l'ordre des etapes 1-2 entres elles ainsi que l'ordre des 3-4 aussi) pour
récupérer l'effet du modulo sur les notes et éviter de mésécrire des bits.
|
___-----_-_-_-_----_--_-_-_--_-_-_-__-_-_-_-_-__-_-_- 4 - POur aller plus loin
| ====================
XOR de notre texte
==================
Précédement (1.3) j'ai énnoncé les différents formats de base d'un
fichier MIDI. Ces formats sont extensibles selon l'outil qui va lire le
fichier (on peut donc avoir un format 3,4,...) et si l'outil qu'on utilise
ne le reconnait pas, il va se placer dans un type 1 ou 2 selon ce qu'il
décide pour interpréter le fichier. Donc, on peut utiliser une valeur
pour XOR notre texte avant de le passer en midi et ajouter cette clef dans
le fichier final et ce quelque soit la méthode employé (2.1, 2.2 ou 2.3)
le tout avec une discretion maximale)
Chiffrement Asymetrique [5]
===========================
Les 4 règles énnoncées dans 3.3 pour décoder avec un fichier clef laissent
la place a la possibilité d'encoder avec un fichier et d'arriver a décoder
avec un autre si l'effet de ses notes est similaire, cependant cela risque
fort d'être juste limité a une entrée par couple si on garde ce système
précis de règle (je n'ai pas vérifié peut être qu'elles suffisent)
mais il y a l'air d'etre possible de généraliser cet ensemble pour créer
un chiffrement asymétrique avec un couple clef public/privée.
|
---_-_-_--_-____-_-__________-_-__--__-_-_-_-_-_-_-__----_-_- 5 - Conclusion
| ==========
Maintenant vous savez qu'on peut faire n'importe quoi avec du texte et des
fichiers midi, ça n'est pas très utile mais c'est plutot marrant. L'idée
d'origine était d'encoder des fichier quelconque en fichier midi pour
les envoyer par IPP d'un ordinateur a un autre, les décoder et obtenir un
système de transfert de fichier TRES bizzare. Cependant, la partie IPP a
été abandonnée mais pas l'encodage du midi et c'est en travaillant sur
cette idée qu'est né cet article. Peut-etre avec le temps je mettrais cette
solution en place dans un système de transfert de fichier maison histoire
de pimenter les choses. Si c'est le cas je vous partagerais cette experience.
Source
======
[1]:https://midi.org/
[2]:https://midi.org/standard-midi-files
[3]:https://drive.google.com/file/d/1t4jcCCKoi5HMi7YJ6skvZfKcefLhhOgU/view?u
[4]:https://fr.wikipedia.org/wiki/Cryptographie_sym%C3%A9trique
[5]:https://fr.wikipedia.org/wiki/Cryptographie_asym%C3%A9trique
_____/\\\\\\\\\_______________/\\\\\_____/\\\\\\\________/\\\\\\\____
___/\\\///////\\\_________/\\\\////____/\\\/////\\\____/\\\/////\\\__
__/\\\______\//\\\_____/\\\///________/\\\____\//\\\__/\\\____\//\\\_
_\//\\\_____/\\\\\___/\\\\\\\\\\\____\/\\\_____\/\\\_\/\\\_____\/\\\_
__\///\\\\\\\\/\\\__/\\\\///////\\\__\/\\\_____\/\\\_\/\\\_____\/\\\_
____\////////\/\\\_\/\\\______\//\\\_\/\\\_____\/\\\_\/\\\_____\/\\\_
__/\\________/\\\__\//\\\______/\\\__\//\\\____/\\\__\//\\\____/\\\__
_\//\\\\\\\\\\\/____\///\\\\\\\\\/____\///\\\\\\\/____\///\\\\\\\/___
__\///////////________\/////////________\///////________\///////_bauds
┌────────────────────────────────┐
│ ISSUE No 3 - Avril 2026 08.TXT └─────────────────────────────────────────────┐
| Schem-ASCII |
| Beemo <nflatrea@mailo.com> |
| Grenoble Hackerspace (Grenoble) |
└──────────────────────────────────────────────────────────────────────────────┘⠀
-- iNFO --
Quelques schémas répurérés par ci par là, en ASCII bien évidemment...
1. Pont de diodes normales
2. Pont de diodes doubles
3. Pont redresseur HT
4. Diode HT
5. Réfraction
6. Relais + diodes TOR R/C
7. Plaque simple
9. Bulleur hho
8. Plaques tête-bêche
10. Alim moteur vélo
11. Alim moteur vélo + chargeur
12. Tranformateur multi-tension
13. LEDs en série
14. Alim moteur vélo + relais
15. Relais
16. Ampli micro electret à LM386
17. Schéma générateur hho
18. Pinout commutateur arcade
19. Comparateur luminosité à LM386
20. Hacheur
1. Pont de diodes normales
--------------------------
[~] --------+----[>|----+-------- [+]
| |
| |
+----|<]--------+
| |
| |
+--------[>|----+ |
| |
| |
[~] ----+--------|<]--------+---- [-]
2. Pont de diodes doubles
-------------------------
_______
| |
| O |
| |
|_______|
| | |
| | |
| | |
[~] -----+ +-------------------- [+]
| |
| |
| | _______
| | | |
| | | O |
| | | |
| | |_______|
| | | | |
| | | |
| | | |
+----------+ +----+
| |
| |
| _______ |
| | | |
| | O | |
| | | |
| |_______| |
| | | | |
| | | |
| | | |
[~] ---------+------+ +----+---- [-]
3. Pont redresseur HT
---------------------
[~] --------+----[>|-[>|-[>|----+-------- [+]
| |
| |
+----|<]-|<]-|<]--------+
| |
| |
+--------[>|-[>|-[>|----+ |
| |
| |
[~] ----+--------|<]-|<]-|<]--------+---- [-]
4. Diode HT
-----------
[+] ----------[>|-[>|-[>|---------- [+]
[-] ------------------------------- [-]
5. Réfraction
----------
| |
AIR | VERRE | AIR
.. | |
.. | |
.. | |
.. .. | |
.. .. | |
.. | |
.. .. |\ |
.. .. | \ |
.. | \ |
.. |\ \ |
.. | \ \ |
| \ \ |
|\ \ \ |
| \ \ \ |
| \ \ \|
| \ \ |
| \ \ | ..
| \ \| ..
| \ | ..
| \ | .. ..
| \| .. ..
| | ..
| | .. ..
| | .. ..
| | ..
| | ..
| | ..
| |
| |
6. Relais + diodes TOR R/C
-----------------------
[1]------+------------------+
| |
| |
| |
--- ---
R / \ \ /
E --- ---
C | |
E | | | |
P _|_ | _|_ |
T | | o | | o
E | /| \ | /| \
U | / |-----\ | / |-----\
R |/ | \ |/ | \
|___| o o |___| o o
| | | | | |
| | | | | |
| |
[2]------+------------------+
7. Plaque simple
-------------
+------+
| |
| |
| +-------+
| |
| |
| |
| |
| |
| |
| |
+--------------+
8. Plaques tête-bêche
---------------------
+--------------+
| |
| |
| |
| |
| |
+-------+ |
+------+| |
| || |
| |+------+
| +-------+
| |
| |
| |
| |
+--------------+
9. Bulleur hho
--------------
from hho to hho
generator torch
| | | |
| | | | A |
| V | | | |
| | | |
+------|---|---------|---|------+
| | | | | |
| | | | | |
| | | | | |
| | | |
|~~~~~~|~~~|~~~~~~~~~~~~~~~~~~~~|
| | | O |
| | | O |
| | | O |
| O | | |
| | | water |
| | | |
| | | O |
| O | | O |
| | | |
| | | O |
| | | |
| | | O |
| O | | |
| O |
+-------------------------------+
10. Alim moteur vélo
--------------------
/
+----------[~~~]---------o o---------+
| |
| fusible BP |
___|___ |
___ 12V _|_
| / \
| | M |
| \___/
___|___ |
___ 12V |
| |
| |
+--------------------------------------+
11. Alim moteur vélo + chargeur
-------------------------------
/
+-----------+----------[~~~]---------o o---------+
| | |
_|_ | |
| | | fusible BP |
| c | ___|___ |
| h | ___ 12V _|_
| a | | / \
| r | | | M |
| g | | \___/
| e | ___|___ |
| u | ___ 12V |
| r | | |
|___| | |
| | |
+-----------+--------------------------------------+
12. Tranformateur multi-tension
-------------------------------
_____ || __________________________________________________________
) || (
) || ( 1.5V
) || (______
) || ______|-------------------------------------------
) || (
) || ( 1.5V
) || (______
) || ______|----------------------------------
) || (
) || ( 1.5V
) || (______
) || ______|-------------------------
230V ) || ( 12V
) || ( 1.5V
) || (______ 9V
) || ______|----------------
) || ( 7.5V
) || ( 1.5V
) || (______ 6V
) || ______|-------
) || ( 4.5V
) || (
) || ( 3V
) || (
) || (
_____) || (__________________________________________________________
||
13. LEDs en série
-----------------
[+12V]----\/\/\/\----+
|
|
|
---
\ /
---
|
|
|
---
\ /
---
|
| A
| |
--- |
\ / |
--- | U=3.4V
| |
| |
I=20mA | |
[GND]--------<-------+ |
14. Alim moteur vélo + relais
-----------------------------
+-----------+----------[~~~]---------+-------------+
| | | |
| | fusible | _|_
| | | / \
| | | | M |
_|_ | o \___/
| | | \ BP |
| c | ___|___ o |
| h | ___ 12V | +------+
| a | | _|_ |
| r | | | | o
| g | | | /| \
| e | ___|___ relais | / |-----\
| u | ___ 12V |/ | \
| r | | |___| o
|___| | | |
| | | |
| | | |
| | | |
+-----------+------------------------+------+
15. Relais
----------
2 1
| |
_|_ |
| | o
| /| \
relais | / |-----\
|/ | \
|___| o
| |
| |
3 4
16. Ampli micro electret à LM386
--------------------------------
[+9V]----+---------+------------------------------------------------------+
| | |
| | 10µF 16V |
| | | | |
| / +---------| |---------+ |
| \ | | | + | |
| 4.7K / | ____ ____ | |
| \ + MIC | _| \_/ |_ | |
| / O +--|_|1 8|_|--+ |
| + | | _| L |_ |
4.7µF ----- | | 100nF +--|_|2 M 7|_| |
16V ----- | 2.2K | | | | _| 3 |_ |
| +-----/\/\/-----+-----| |-----|--|_|3 8 6|_|-----+ 47µF 16V
| | | | | | _| 6 |_ | | 100R
| | | +--|_|4 5|_|-----+-----| |-----/\/\/-----O +HP
| | + | | |___________| | + | |
| 10µF ----- 20nF ----- | |
| 16V ----- ----- | 100nF -----
| | | | -----
| | | | |
| | - MIC | | |
[GND]----+---------+-------O-------+-------------+------------------------+-----------------------O -HP
Atténuateur sélectionnable pour VU-mètre
----------------------------------------
Signal ----------+----------O
| -----O---------+
| +----O |
| | |
| | *---------------*
/ | | \ |
\ | | \ |
/<----+ | \ |
\ | O |
/ *---------------*
| |
| |
| |
GND ----------+-------------------------+
17. Schéma générateur hho
-------------------------
+---------+
[~]-----------+----- || -----|~ +|---+---+
| )||( | | | |
| )||( | pont de | |+ |
230V | )||( 12V | diodes | --- |
| )||( | 12V/5A | --- |
| )||( | | | |
[~]-+---------|----- || -----|~ -|---+---|-------------------------------+
| | +---------+ | | |
| | | | |
| | | | led bleue |
| +---|----------------------------+ +---------/\/\/-------[>|-------+
| | | | sous tension |
| | | | |
| _|_ | | |
O | | | | |
/ | /| | | led orange |
/-----| / | | 6V/40A +--o--o---/\/\/-------[>|-------+
/ |/ | | | N1 niveau bas |
O |___| | | |
| | | | |
| | | | |
| | | | |
| +---|-----+ o |
| | | N2 / |
| | | o o |
| | _|_ | | led rouge |
| O | | +---|-------/\/\/-------[>|-------+
| / | /| | manque d'eau |
| /-----| / | 6V/40A | |
| / |/ | | |
| O |___| o |
| | | T° / |
| | | o o |
| | | | | led rouge |
| | | | +-----/\/\/-------[>|-------+
| | | | surchauffe |
| | | | |
| | | | |
+-----------+ | o |
| variateur | | P2 / |
| à triac | | o o |
| 230V/16A | | | | led rouge |
+-----------+ | | +-------/\/\/-------[>|-------+
| | | | surpression |
| | | | |
| | | | |
| | | o |
| | | PORTE / |
| | | o o |
| | | | | led jaune |
+-----------+ | +---|---------/\/\/-------[>|-------+
| pont de | | | porte ouverte |
| diodes | | | |
| 380V/20A | | | |
+-----------+ | o |
| | | P1 / |
| | | o o |
| | | | led verte |
| | +------------------------+-----------/\/\/-------[>|-------+
| | production hho
| |
| | +---------+----------------------------+-----------------+
[+] [-] | Capteur | Consigne | Représentation |
vers générateur +---------+----------------------------+-----------------+
| N1 | 1cm au dessus des plaques | < à la consigne |
| N2 | bord supérieur des plaques | < à la consigne |
| P1 | réglable de 0.1 à 0.75 bar | < à la consigne |
| P2 | 1 bar | < à la consigne |
| T° | 80°C ou 90°c | < à la consigne |
| PORTE | 5mm à l'ouverture | porte ouverte |
+---------+----------------------------+-----------------+
18. Pinout commutateur arcade
-----------------------------
/!\ brochage côté soudures /!\
Connecteur alim/vidéo/audio [9 pins]
V1 V2 V3 V4
,----------------.
/ 06 07 08 09 \ DB-9
/ 01 02 03 04 05 \ male
'--------------------'
M VS AS RS 2P
,--------------------.
\ 01 02 03 04 05 / DB-9
\ 06 07 08 09 / Femelle
`----------------'
V1 V2 V3 V4
1 M masse générale (blanc)
2 VS signal vidéo (jaune)
3 AS signal audio (rouge)
4 RS signal reset (blanc)
5 2P signal 2 players (jaune)
6 V1 Vcc pcb 1 (rouge)
7 V2 Vcc pcb 2 (rouge)
8 V3 Vcc pcb 3 (rouge)
9 V4 Vcc pcb 4 (rouge)
Connecteur player 1 & 2 (à faire en 2 exemplaires) [12 pins]
1S 2S NC US RS DS LS
,----------------------------.
/ 09 10 11 12 13 14 15 \ DB-15
/ 01 02 03 04 05 06 07 08 \ male
'--------------------------------'
1M 2M NC NC UM RM DM LM
,--------------------------------.
\ 01 02 03 04 05 06 07 08 / DB-15
\ 09 10 11 12 13 14 15 / Femelle
`----------------------------'
1S 2S NC US RS DS LS
01 1M masse bouton 1 (jaune)
02 2M masse bouton 2 (rouge)
03 NC non connecté
04 NC non connecté
05 UM masse up (jaune)
06 RM masse right (blanc)
07 DM masse down (blanc)
08 LM masse left (blanc)
09 1S signal bouton 1 (jaune)
10 2S signal bouton 2 (rouge)
11 NC non connecté
12 US signal up (jaune)
13 RS signal right (blanc)
14 DS signal down (blanc)
15 LS signal left (blanc)
19. Comparateur luminosité à LM386
----------------------------------
[+5V]--------+---------+-------------------------------+
| | |
| | |
| / |
| \ |
| / LDR ____ ____ |
| \ _| \_/ |_ |
/ / |_|1 8|_| |
\ | _| L |_ |
P /<--------|------------|_|2 M 7|_| |
\ | _| 3 |_ |
/ +------------|_|3 8 6|_|--+
| | _| 6 |_ 180R
| | +--|_|4 5|_|-----/\/\/-----+
| / | |___________| |
| \ | |
| / 100K | _|_
| \ | LED \_/
| / | |
| | | |
| | | |
[GND]--------+---------+---------+----------------------------------+
20. Hacheur
-----------
*--------*
[~] ------------------------|~ ~|----------------+
| | |
+---|+ -|---+ |
| *--------* | |
| | |
| | |
_ _ _ |/ C | *---------*
|_| |_| |_ B ---| | | charge |
PWM |\ E | *---------*
| | |
| | |
| | |
+----------------+ |
|
[~] --------------------------------------------------+
_ === B____ _e_
( `\( ) | __ |e__| -_|___m_ __o
`> /~\ _* | __ -| -_|___| | . |
(_/ /\/ |_____|___| |_|_|_|___|
\ \ 2026 nflatrea@mailo.com
`./ . . . Noë Flatreaud ~_~
-- REFERENCES --
[^1] http://biduleohm.free.fr/fichiers/ascii.html
-- EOF --
_______ ___ ______ ______
/" _ "\ /. ") / " \ / " \
(: (_/ :| /: / // ____ \ // ____ \
\____/ |) // /___ / / ) :)/ / ) :)
_\ '| ( / _ \(: (____/ //(: (____/ //
/" \__|\|: /_) :)\ / \ /
(________)\_______/ \"_____/ \"_____/ bauds
ISSUE No 4 - Juin 2026
9600@ghspace.fr
#9600 sur irc.libera.chat
┌────────────┐
│ DISCLAIMER └─────────────────────────────────────────────────────────────────┐
│ Ce zine est une oeuvre collective, à but informatif, écrite par des gens qui |
| savent (parfois) ce qu'ils font. En aucun cas ils ne peuvent être tenus |
| responsables de vos bêtises. │
└──────────────────────────────────────────────────────────────────────────────┘
-- INFO --
9600 bauds est un ezine inter-hackerspaces francophones à l'initiative de
GRENOBLE HACKERSPACE. Vous pouvez partager vos projets, vos actualités, vos
réflexions, vos tutoriels, vos retours d’expérience, ou tout autre contenu de
votre communauté dans un format volontairement minimaliste et nostalgique
-- FAQ ---
Q: Pourquoi ASCII/ANSI seulement ?
A: Parce qu’écrire en ASCII ça fait mal aux doigts, mais c'est puré classe.
-- RTFM --
Format : Texte ASCII brut (pas de mise en forme riche).
Longueur : 1 à 2 articles par hackerspace.
Largeur : 80 colonnes maximum (pour rester lisible en terminal).
Encodage : UTF-8 (accents et caractères spéciaux acceptés sauf émojis).
Envoyez votre proposition à 9600@ghspace.fr (en corps de mail ou en pj.txt)
Date limite : 10 juin 2026 (minuit, UTC+2).
Publication : 25 juin 2026.
Structure :
Titre : Moins de 76 caractères
Auteur : Un pseudo court + nom complet (optionnel).
Hackerspace : Nom du hackerspace que vous représentez.
Contenu : Libre, mais clair et concis.
Contenu attendu :
Priorité aux projets concrets, retours d’expérience, actualités, présentations
de hackerspaces, tutoriels, ou réflexions techniques.
- Hardware : Rétro-ingénierie, modifications de matériel, prototypage
- Security : Vulnérabilités documentées, retex pentest, analyses de firmware
- Réseaux : Protocoles obscurs, SDR, mesh networking
- DIY/Art : Projets artistiques
- Essais : Articles autour de l'Infosec, du Libre, du Piratage etc..
- Spaces : Présentations de lieux, outils partagés, retex
À éviter :
- Les tutoriels basiques sans originalité (ex: "Installer Linux sur un PC").
- Les sujets hors scope (ex: "Ma recette de bière maison")
- Le contenu purement théorique sans application pratique (sauf essais)
Politiques Spécifiques:
1. Vulnérabilités 0-day
Accepté si :
- La vulnérabilité est déjà publique (patch dispo depuis ≥7 jours).
- Pas de patch mais rapporté depuis ≥90 jours (avec preuve de contact).
- Cible très pertinente pour la communauté
Rejeté si :
- Divulgation prématurée sans coordination avec les mainteneurs.
- Cible triviale.
2. Malware
Accepté sous conditions :
- Analyses techniques de malware existants
- Outils offensifs légitimes
- Recherche défensive
Exemple rejeté :
- "Comment chiffrer un fichier et demander une rançon en Monero"
Exemple accepté :
- "Reverse engineering d’un keylogger"
3. Utilisation de l’IA
Autorisé :
- Correction grammaticale ou reformulation de phrases (à déclarer)
- Articles sur l’IA incluant des outputs générés
Interdit :
- Contenu généré par IA /!\ FUCK AI
Licence :
Par défaut : CC BY-NC-SA 4.0 (vous gardez vos droits, mais autorisez
la réutilisation et l’adaptation sous les mêmes conditions).
Précisez dans votre soumission si vous souhaitez une autre licence.
Sélection :
Les articles sont choisis pour leur pertinence, leur originalité et leur
respect des règles. Si votre soumission n’est pas retenue pour le #1, elle sera
automatiquement considérée pour le #2. Aucune contribution ne sera perdue.
Archivage:
9600 bauds sera conservé et partagé (site miroir, archives, etc.).
Exemple de soumission:
---
title : "Intro au piratage Hardware - Root Shell avec UART"
author : lavomatik
full_name: Lavo Matik <lavomatik@mail.com>
hackerspace: GRENOBLE HACKERSPACE (Grenoble)
---
[Corps de l’article en texte brut, 80 colonnes max...]
Date limite : 10 juin 2026
Publication : 25 juin 2026
Contact : 9600@ghspace.fr
-- CONTACT ---
Vous pouvez nous contacter via :
- IRC: #6900 sur irc.libera.chat 6667
- EMAIL: Staff 9600 <9600@ghspace.fr>
Besoin de confidentialité ?
-----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEaMau5BYJKwYBBAHaRw8BAQdAIriSQTvU+voZh3ol3A5lZpOzO0Hf4a3ie5dc
0TAcQTy0HFN0YWZmIDk2MDAgPDk2MDBAZ2hzcGFjZS5mcj6IkwQTFgoAOxYhBDxY
ZnlHx05Ta/BFq3t6TmyI4pAlBQJoxq7kAhsDBQsJCAcCAiICBhUKCQgLAgQWAgMB
Ah4HAheAAAoJEHt6TmyI4pAl4rUA/2RhQ1zFNjG1sbpYn2yhd4vW6ELWv3jbHSbv
k9hxhFAYAP436htohxy36vUY/lZAaShInBXd3ThVcfgbGZ04rfy7BLg4BGjGruQS
CisGAQQBl1UBBQEBB0BXqqHHKxM0ZPHJty2Hzn8MGL5Mn1R6BiaGbCDqW122UgMB
CAeIeAQYFgoAIBYhBDxYZnlHx05Ta/BFq3t6TmyI4pAlBQJoxq7kAhsMAAoJEHt6
TmyI4pAlog4A/2/eb+Y/CwJhIJ8WUS3ftNw6Yi929SBizt9JAu5eVpACAQCyu6ku
/U2Zk/Ia96Lc3J0CoresASYjVc2vjt+7V9uVAQ==
=Rvqt
-----END PGP PUBLIC KEY BLOCK-----
%%% %%%%%%% |#| >(( 9600bauds01 ))<
%%%% %%%%%%%%%%% |#|#### /
%%%%% % %%% |#|=#####
%%%%% % @ @ %% | | ==####
%%%%%% % (_ () ) %% | | ===##
%% %%% % \_ | %% | | =##
% %%%% % u^uuu %% | | ==#
%%%% %%%%%%%%% | | V
Matthew Kott
-- EOF --
__9600__ __9600__ __9600__ __9600__ __9600__ __9600__ __9600__ __9600__
\_____ \ \_____ \ \_____ \ \_____ \ \_____ \ \_____ \ \_____ \ \_____ \
_(__ < _(__ < _(__ < _(__ < _(__ < _(__ < _(__ < _(__ <
/ \ / \ / \ / \ / \ / \ / \ / \
/_--___ //___-__ //--__-_ //___--_ //__-_-_ //__---_ //___--_ //_--___ /
0011100\/00110110\/ 0110000 \/0110000\/01100010 \/1100001 \/1110101 \/1100100\/
1110011 00100000 01101110 01101111 00110011 ... . . . . .
_____/\\\\\\\\\_______________/\\\\\_____/\\\\\\\________/\\\\\\\____
___/\\\///////\\\_________/\\\\////____/\\\/////\\\____/\\\/////\\\__
__/\\\______\//\\\_____/\\\///________/\\\____\//\\\__/\\\____\//\\\_
_\//\\\_____/\\\\\___/\\\\\\\\\\\____\/\\\_____\/\\\_\/\\\_____\/\\\_
__\///\\\\\\\\/\\\__/\\\\///////\\\__\/\\\_____\/\\\_\/\\\_____\/\\\_
____\////////\/\\\_\/\\\______\//\\\_\/\\\_____\/\\\_\/\\\_____\/\\\_
__/\\________/\\\__\//\\\______/\\\__\//\\\____/\\\__\//\\\____/\\\__
_\//\\\\\\\\\\\/____\///\\\\\\\\\/____\///\\\\\\\/____\///\\\\\\\/___
__\///////////________\/////////________\///////________\///////_bauds
ISSUE No 3 - Avril 2026
9600@ghspace.fr
#9600 sur irc.libera.chat
. . . . . ... 00110011 0011100 00110110 0110000
__1110011_0110000_01100010_1100001_1110101_1100100 00100000_01101110_01101111_
\_____ \ \_____ \ \_____ \ \_____ \ \_____ \ \_____ \ \_____ \ \_____ \
_(__ < _(__ < _(__ < _(__ < _(__ < _(__ < _(__ < _(__ <
/ \ / \ / \ / \ / \ / \ / \ / \
/__9600__//__9600__//__9600__//__9600__//__9600__//__9600__//__9600__//__9600__/