1 points par GN⁺ 2025-08-04 | 1 commentaires | Partager sur WhatsApp
  • Cette année, IOCCC28, relancé après 4 ans, a vu un grand nombre d’œuvres de code C extrêmement complexe soumis par des développeurs du monde entier
  • La refonte du site web et de l’infrastructure, l’adoption du kit d’outils mkiocccentry et l’amélioration du système de soumission ont considérablement amélioré l’efficacité opérationnelle
  • Le processus de sélection est devenu plus complexe et plus exigeant qu’auparavant, mais sa durée a été considérablement raccourcie par rapport à l’habitude
  • Bien que la règle de taille de code ait été assouplie, de nombreuses œuvres petites et de qualité ont été primées, ce qui laisse penser que les règles futures du concours ne changeront que peu
  • Les lauréats aux concepts intéressants et originaux, les techniques d’obfuscation, ainsi que les machines virtuelles et émulateurs expérimentaux présentés ont contribué à améliorer le niveau de programmation en C

Aperçu de l’IOCCC28 et contexte de l’édition

  • L’IOCCC28 tenue en 2024 a repris après une interruption de 4 ans avec des développeurs du monde entier participant à une compétition de code C créatif et obfusqué
  • Au cours de cette période, le site officiel d’IOCCC a été totalement reconstruit à grande échelle sous le nom de "Great Fork Merge" avec plus de 6 168 commits
  • Sur le plan opérationnel, plusieurs innovations ont été mises en place, notamment l’outil mkiocccentry, les nouvelles procédures d’inscription et le serveur de soumission, ce qui a amélioré l’efficacité de la revue et la vitesse de publication du code
  • Les soumissions ont été acceptées du 5 mars 2025 au 5 juin 2025, et le jugement s’est terminé en seulement « 33 jours », avec publication de l’intégralité des codes sources environ 2 heures après la fin du concours

Soumissions et tendances de sélection

  • Pour l’IOCCC28, la hausse marquée du nombre et de la qualité des soumissions a également accru la difficulté de la correction, et un nombre record de 23 lauréats a été retenu
  • « La pause de 4 ans a permis d’obtenir de meilleures soumissions dans certains cas, mais globalement, les participants ont montré un progrès notable en matière d’obfuscation et de maîtrise du C »
  • Malgré l’instauration d’une nouvelle limite de taille du code (environ +21 %), plus de la moitié des lauréats font moins de 2/3 de la limite globale, tandis que 10 d’entre eux sont en dessous de la moitié de la taille, montrant à la fois efficacité et qualité
  • En conséquence, on prévoit qu’il y aura très peu d’évolution des règles de taille du code au cours des 10 prochaines années

Règlement de sélection et plans futurs

  • Les règles et lignes directrices de l’IOCCC seront revues plus en profondeur à l’avenir, de manière plus innovante et plus intuitive, et les IOCCC Judges préparent l’IOCCC29 prévu pour décembre 2025
  • Des correctifs additionnels basés sur des pull requests sont également prévus pour le dépôt GitHub des lauréats IOCCC et le dépôt du toolkit mkiocccentry

Présentation des lauréats et points forts

  • Des lauréats de thèmes variés ont été retenus, avec les œuvres et caractéristiques principales suivantes

    • ChatIOCCC : implémente un moteur d’inférence LLM open source basé sur LLaMA 2 de Meta, l’un des plus compacts au monde, avec une fonction de chatbot originale
    • Eh : implémente un code obfusqué d’éditeur plus pratique qu’ed(1), avec des accents UTF-8
    • One-liner de 135 octets : un code obfusqué extrêmement court, basé sur des valeurs hexadécimales saisies, qui produit des sorties diverses
    • C-Preprocessor Art : rend un affichage d’images en exécutant le préprocesseur entre plusieurs milliers et plusieurs centaines de milliers de fois, avec des temps d’exécution de script très longs et une expérience unique
    • Machine virtuelle Z₃ : implémente une machine virtuelle inspirée de la troisième version de la Z-machine, permettant de lire le code source comme dans un jeu
    • Environnement virtuel avec émulateur C64 : une machine virtuelle qui permet de tester en toute sécurité des scénarios potentiellement dangereux comme les fork bombs et la suppression de fichiers, avec C64 intégré
    • Émulation de la puce Intel 4004 : reproduction artistique reproduisant au niveau des portes logiques le circuit du premier microprocesseur commercial au monde, lancé en 1971, en code C
    • Puzzle multilingue : une obfuscation originale pour les personnes à l’aise avec au moins trois langages (C, anglais et autres)

Participants au concours et recommandations futures

  • Une obfuscation similaire aux lauréats précédents rapporte peu de points ; l’originalité et le niveau de finition sont des critères clés de la sélection
  • Pour les participants non primés, il est recommandé d’améliorer puis de présenter à nouveau leur soumission, ou d’essayer diverses approches
  • La publication séparée des œuvres non lauréates est également la bienvenue

Instructions de compilation et d’exécution des lauréats

  • Selon les cas, des problèmes de compatibilité peuvent survenir avec certains compilateurs C, donc il est recommandé d’utiliser la version la plus récente de clang ou gcc
  • Le guide pour résoudre les problèmes et soumettre des corrections est fourni via la FAQ et la documentation officielle

Téléchargement des lauréats de l’IOCCC28 2024

  • L’ensemble des lauréats est fourni sous forme d’archive (2024.tar.bz2), et les pages web détaillées de chaque œuvre, les sources ainsi que les commentaires des auteurs permettent d’apprendre des techniques d’obfuscation créatives

(Consultez le site officiel pour les liens de téléchargement des lauréats et les descriptions détaillées de chaque lauréat disponibles directement depuis cette publication.)

1 commentaires

 
GN⁺ 2025-08-04
Avis Hacker News
cc -Wno-implicit-int -Wno-implicit-function-declaration phase.c && ./a.out
  • À cause de la refonte, tous les liens vers les anciennes entrées IOCCC sont cassés. Des liens diffusés pendant des décennies sur Wikipédia et divers autres sites ont été bloqués sans redirection, et désormais il faut absolument un navigateur avec JavaScript pour voir les entrées sur GitHub
  • Pour y accéder dans un environnement sans JS, on peut cloner le dépôt avec git clone
  • En regardant cette entrée, j’ai parcouru d’anciennes soumissions de l’IOCCC, et ce one-liner de décompression d’image affiche son propre logo si on lui passe en argument la valeur de hachage du code source. C’est fascinant
  • Je me demandais comment ce tour avec le hash fonctionnait, et l’explication est dans les notes. Au passage, le contenu des notes est vraiment hilarant
    Il y est écrit que « la brièveté est plus valorisée que l’obscurité, mais ce programme satisfait malgré tout encore aux critères de clarté propres à l’IOCCC »
  • Coïncidence absolument incroyable, le nombre de bits du format d’entrée correspond presque exactement au log2 du nombre d’évaluations MD5 qu’un GPU vieux de cinq ans peut effectuer en une heure
  • C’est aussi la personne qui a créé jq
  • Écrit en 135 octets ! On est presque dans la zone du savant fou. C’est totalement difficile à croire
  • Les règles des entrées IOCCC sont excellentes. C’est une réglementation très précise qui montre clairement comment elles ont été exploitées par le passé
Rule 2

La Rule 2 exige qu’une soumission satisfasse à la fois les Rule 2a et 2b  
On peut vérifier si un code passe cette règle avec l’outil iocccsize(1)  
Il suffit de lui passer un nom de fichier comme prog.c en argument

Rule 2a  
La taille du code source du programme ne doit pas dépasser 4993 octets

Rule 2b  
Lorsqu’on mesure la taille du code avec l’outil iocccsize(1), la valeur affichée ne doit pas dépasser 2503

Pour plus de détails à ce sujet, voir la FAQ ou la Rule 17
  • Donc cela veut dire qu’il est permis de mettre 2053 octets de données supplémentaires dans le nom de fichier. Règle étonnamment souple
  • 4993 octets, ça donne envie de savoir comment ils ont choisi un chiffre aussi bizarre
  • J’aimerais bien que underhanded-c.org rouvre aussi
  • Je me demande s’il faut vraiment une meilleure démonstration pour ne pas utiliser C. On dirait une conclusion à la fois claire et sérieuse
  • On peut écrire ce genre de code obscur dans n’importe quel langage. C convient particulièrement bien, mais la plupart des entrées IOCCC utilisent des techniques applicables à plusieurs langages
  • C’est l’une de mes soumissions IOCCC préférées, et en plus une gagnante
    Voir persano.c de 2005
  • Si j’étais programmeur, mon travail semblerait probablement aux yeux des autres n’être qu’un pur chiffrement dénué de sens
  • C’est vraiment génial
    Entrée macke 2024
    Ce programme est un émulateur qui exécute un système Linux moderne complet avec un ensemble de fonctionnalités réduit au minimum
  • Auteur ici. Ce binaire de 1,6 Mo exécute un Linux moderne. J’ai utilisé toutes sortes d’astuces pour réduire au maximum sa taille. Il a aussi été compilé en WebAssembly, ce qui permet de le lancer directement dans le navigateur
  • Cette entrée m’a paru particulièrement déroutante