1 Punkte von GN⁺ 2025-08-04 | 1 Kommentare | Auf WhatsApp teilen
  • Das IOCCC28 wurde nach vier Jahren Pause wieder aufgenommen und verzeichnete zahlreiche Einreichungen hochausgearbeitet obfuskierten C-Codes von Entwicklerinnen und Entwicklern aus aller Welt.
  • Durch den Neuaufbau von Website und Infrastruktur, die Einführung des mkiocccentry Toolkits und Verbesserungen beim Einreichungssystem wurde die betriebliche Effizienz deutlich gesteigert.
  • Der Bewertungsprozess wurde im Vergleich zur Vergangenheit komplexer und strenger, doch die Bewertungsdauer wurde im Vergleich zu üblichen Abläufen stark verkürzt.
  • Obwohl die Codegrößenbeschränkung gelockert wurde, wurden zahlreiche kleine und qualitativ hochwertige Beiträge ausgewählt, weshalb nur geringe Änderungen der zukünftigen Contest-Regeln zu erwarten sind.
  • Mit interessanten und originellen Gewinnerwerken, Obfuskationstechniken sowie experimentellen Virtuellen Maschinen und Emulatoren wurde ein Beitrag zur Weiterentwicklung der C-Programmierung geleistet.

Überblick und Hintergrund von IOCCC28

  • Die 2024 ausgerichtete 28. Ausgabe des International Obfuscated C Code Contest (IOCCC28) war ein Wettbewerb für kreative und schwer lesbare C-Codes, an dem Entwickelnde aus aller Welt teilnahmen.
  • In dieser Zeit wurde die offizielle IOCCC-Website im Rahmen von „Great Fork Merge" mit über 6.168 Commits grundlegend neu aufgebaut.
  • Auf operativer Ebene wurden unter anderem das mkiocccentry Toolkit, ein neues Registrierungsverfahren und der Submissionsserver eingeführt, wodurch sich die Effizienz der Prüfung und die Geschwindigkeit der Codeveröffentlichung verbessert haben.
  • Die Einreichungen liefen vom 5. März 2025 bis zum 5. Juni 2025, und die Juryphase endete in nur 33 Tagen; der Quellcode wurde dann innerhalb von rund zwei Stunden nach Ende des Wettbewerbs vollständig veröffentlicht.

Trends bei Einreichungen und Gewinnern

  • Beim diesjährigen IOCCC28 stieg durch die deutliche Zunahme von Anzahl und Qualität der Einreichungen auch die Schwierigkeit der Bewertung, wodurch insgesamt 23 Gewinner – ein historischer Höchstwert – ausgewählt wurden.
  • „Obwohl die vierjährige Pause zu besseren Einreichungen geführt hat, haben die Teilnehmenden insgesamt deutliche Fortschritte sowohl in der Obfuskation als auch in der C-Programmierung erzielt.“
  • Obwohl eine neue Codegrößenbegrenzung eingeführt wurde (ca. 21 % höher), wurden mehr als die Hälfte der Gewinner mit weniger als zwei Dritteln des Gesamtlimits eingereicht, zehn sogar mit unter der Hälfte, was Effizienz und Qualität gleichermaßen zeigt.
  • Daraus wird erwartet, dass sich die Codegrößenregeln in den nächsten zehn Jahren kaum verändern werden.

Bewertungsregeln und Ausblick

  • Die IOCCC-Regeln und Leitlinien sollen künftig noch innovativ und intuitiver angepasst werden; die IOCCC-Juroren bereiten außerdem die für Dezember 2025 geplante Vorbereitung auf IOCCC29 vor.
  • Es sind außerdem auf Pull-Request-Basis ergänzende Patches für das GitHub-Repository der IOCCC-Winner und das Repository des mkiocccentry-Toolkits vorgesehen.

Gewinner und Highlights

  • Es wurden Gewinner aus unterschiedlichen Themenfeldern ausgewählt, mit folgenden Hauptbeiträgen und Merkmalen:

    • ChatIOCCC: Implementiert ein auf Meta's LLaMA-2 basierendes Open-Source-Large-Language-Modell als weltweit kleinstmöglichen LLM-Inferenz-Engine und bietet eine unterhaltsame Chatbot-Funktion.
    • Eh: Ein verschleierter Editor mit UTF-8-Akzent, der eine praktischere Umsetzung als ed(1) liefert.
    • 135-Byte-One-Liner: Extrem kurzer Obfuskationscode, der basierend auf eingegebenen Hexadezimalwerten unterschiedliche Ausgaben erzeugt.
    • C-Preprocessor-Art: Führt den C-Präprozessor von tausenden bis hunderttausenden Mal aus, um Bild-Rendering zu realisieren, und bietet eine sehr lange Skriptausführungszeit mit einem einzigartigen Erlebnis.
    • Z₃ Virtual Machine: Implementierung einer virtuellen Maschine basierend auf der dritten Version der Z-Machine, bei der das Interpretieren von Quellcode wie ein Spiel erlebt werden kann.
    • Virtualisierung inklusive C64-Emulator: Eine VM, in der auch riskante Szenarien wie Fork Bomben oder Dateilöschvorgänge sicher getestet werden können; inkl. C64.
    • Intel-4004-Chip-Emulation: Künstliche Repräsentation eines 1971 veröffentlichten kommerziellen Mikroprozessor-Layouts auf Gatterebene in C-Code.
    • Mehrsprachiges Puzzle: Originelle Obfuskation für Personen, die mit mindestens drei Sprachen (C, Englisch und weiteren) vertraut sind.

Teilnehmende und künftige Hinweise

  • Obfuskationen, die bestehenden Gewinnerwerken ähneln, erhalten nur wenige Zusatzpunkte; Originalität und Fertigstellung sind die Hauptkriterien der Bewertung.
  • Nicht ausgezeichneten Teilnehmenden wird empfohlen, ihre Beiträge zu überarbeiten und neu einzureichen oder unterschiedliche Herangehensweisen zu erproben.
  • Die separate Veröffentlichung von Nicht-Gewinnern wird ebenfalls begrüßt.

Anleitung zum Kompilieren und Ausführen der Gewinner

  • Für mögliche Kompatibilitätsprobleme mit einigen C-Compilern wird empfohlen, die jeweils neuesten Versionen von clang oder gcc zu verwenden.
  • In den FAQ und offiziellen Dokumenten werden Fehlerbehebung und das Einreichen von Korrekturen erläutert.

IOCCC28-Gewinner 2024 herunterladen

  • Das komplette Gewinnerpaket steht als Archivdatei (2024.tar.bz2) bereit; über die Detailseiten der einzelnen Beiträge, den Quellcode und die Autorenkommentare können kreative Obfuskationstechniken erlernt werden.

(Der direkte Zugriff auf die Download-Links der Gewinnerbeiträge sowie deren detaillierte Beschreibungen pro Beitrag findet sich auf der offiziellen Website.)

1 Kommentare

 
GN⁺ 2025-08-04
Hacker-News-Kommentare
  • Wirklich beeindruckend :)
    Dieser Code zeichnet die aktuelle Mondphase in der Konsole. Wenn ich ein Werwolf wäre, könnte ich damit die Mondphase beobachten.
  • Dieser Code wirkt wie eine Hommage an donut.c
    Link zu donut.c
  • Der Code erinnert auch ein wenig an den IOCCC-Beitrag aus dem Jahr 1988, der den Wert von Pi berechnet hat
    Referenz zum Pi-Code von 1988
  • Lässt sich direkt im Compiler Explorer ansehen
    Direkt zum Compiler Explorer
  • So lässt sich der Code kompilieren
cc -Wno-implicit-int -Wno-implicit-function-declaration phase.c && ./a.out
  • Durch das Redesign sind alle Links zu früheren IOCCC-Beiträgen kaputtgegangen. Links, die über Jahrzehnte auf verschiedenen Seiten wie Wikipedia verbreitet waren, wurden ohne Redirect blockiert, und um Beiträge auf GitHub anzusehen, braucht man jetzt zwingend einen Browser mit JavaScript-Unterstützung
  • Für den Zugriff in einer Umgebung ohne JS kann man stattdessen das Repository per git clone klonen
  • Beim Anschauen dieses Beitrags habe ich ältere IOCCC-Einreichungen gelesen, und dieser Einzeiler zur Bilddekompression gibt das eigene Logo-Bild aus, wenn man ihm den Hashwert des Sourcecodes als Argument übergibt. Total faszinierend
  • Ich habe mich gefragt, wie dieser Hash-Trick funktioniert, und in den Notizen wird es erklärt. Die Notizen sind übrigens auch wirklich witzig
    Dort steht: "Kürze wird zwar höher bewertet als Unverständlichkeit, aber dieses Programm erfüllt weiterhin den für den IOCCC typischen Maßstab an Klarheit"
  • Durch einen wirklich erstaunlichen Zufall stimmt die Bitzahl des Eingabeformats fast genau mit dem log2 der Anzahl an MD5-Auswertungen überein, die eine fünf Jahre alte GPU in einer Stunde schaffen kann
  • Das ist auch die Person, die jq gemacht hat
  • In 135 Byte geschrieben! Das ist fast schon die Kategorie verrückter Wissenschaftler. Kaum zu glauben, wie extrem das ist
  • Die Regeln für IOCCC-Beiträge sind großartig. Es sind sehr konkrete Bestimmungen, die klar zeigen, wie sie in der Vergangenheit ausgenutzt wurden
Rule 2

Regel 2 verlangt, dass ein Beitrag sowohl Regel 2a als auch 2b erfüllt  
Mit dem Tool iocccsize(1) kann man prüfen, ob der Code diese Regel besteht  
Dazu übergibt man einfach einen Dateinamen wie `prog.c` als Argument

Regel 2a  
Die Größe des Programmquelltexts darf 4993 Byte nicht überschreiten

Regel 2b  
Wenn die Codegröße mit dem Tool iocccsize(1) gemessen wird, darf der ausgegebene Wert 2503 nicht überschreiten

Weitere Details dazu stehen in den FAQ oder in Regel 17
  • Das heißt also, dass im Dateinamen zusätzliche Daten von 2053 Byte erlaubt sind. Erstaunlich lockere Regeln
  • 4993 Byte, da fragt man sich schon, wie sie auf so eine seltsam krumme Zahl gekommen sind
  • Ich wünschte, underhanded-c.org wäre wieder online
  • Ich frage mich, ob man überhaupt noch ein besseres Argument dafür braucht, C nicht zu verwenden. Das wirkt wie ein klares und zugleich ernst gemeintes Fazit
  • Solchen obfuskierten Code kann man in jeder Sprache schreiben. C eignet sich nur besonders gut dafür, aber die meisten IOCCC-Beiträge verwenden Tricks, die sich auch auf viele andere Sprachen übertragen lassen
  • Einer meiner Lieblingsbeiträge beim IOCCC und außerdem ein Gewinner
    Siehe persano.c von 2005
  • Wenn ich Programmierer wäre, würden meine Arbeiten für andere wahrscheinlich wie reine, bedeutungslose Geheimschrift aussehen
  • Das ist wirklich großartig
    macke-Beitrag von 2024
    Dieses Programm ist ein Emulator, der mit minimalster Funktionalität ein komplettes modernes Linux-System ausführt
  • Ich bin der Autor. Diese Binärdatei startet mit 1,6 MB ein modernes Linux. Ich habe alle möglichen Tricks benutzt, um die Größe so weit wie möglich zu reduzieren. Es wurde auch nach WebAssembly kompiliert, sodass es im Browser laufen kann
  • Dieser Beitrag war für mich ziemlich verwirrend