The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Результаты 22 чемпионата по написанию запутанного кода на языке Си

05.01.2014 23:54

Опубликованы исходные тексты работ, победивших в двадцать втором конкурсе IOCCC (International Obfuscated C Code Contest), целью которого было написание наиболее запутанного и трудноразбираемого кода на языке Си.

Участвующие в конкурсе работы, с одной стороны, должны препятствовать анализу кода и пониманию сути решаемой задачи, но, с другой стороны, код должен быть интересен и чем-то примечателен, например, быть необычно оформленным или выделять неожиданные стороны языка Си. Размер исходного кода программы не должен превышать 4096 байт, программа должна собираться и выполнять какое-либо осмысленное действие.

Лучшие работы:

  • Adrian Cable - эмулятор IBM PC, способный запустить MS DOS и такие программы, как Windows 3.0, Excel, MS Flight Simulator, AutoCAD, Lotus 1-2-3;
  • Christopher Mills - HTTP-сервер, при открытии страницы отображающий 3D-часы;
  • Adrian Cable - система распознавания текста;
  • Yves-Marie Morgan - графический (X11) симулятор солнечной системы, отображающий позиции 8 планет по заданной дате;
  • Don Yang - горизонтальное или вертикальное слияние файлов. При первой сборке получается программа для горизонтального слияния, используя которую для слияния двух файлов с кодом текущей программы получается приложение для вертикального слияния (./horizontal_cat misaka.c misaka.c > misaka2.c).
  • Yusuke Endoh - реализация SKI-исчисления;
  • Qiming Hou - система трассировки лучей;
  • Arch Robison - вычислитель произвольных арифметических выражений (например, echo '10*(20*(1+(9*5)))/3' | ./robison). Код оформлен в виде набора функций str* и memset;
  • Michael Birken - игра в тетрис. Код оформлен в виде сцены игры в тетрис;
  • Yusuke Endoh - генератор JPEG-файла с изображением кода программы;
  • Yves-Marie Morgan - игра в домино (X11 и ASCII);
  • Yusuke Endoh - формирует 3D-представление многогранника на основе заданных вершин;
  • Лучшие однострочники:
    • Yusuke Endoh - синтезатор музыки на основании нотной записи ABC (размер программы 137 байт);
    • Adrian Cable - определяет к какой партии относится выбранный президент США (размер программы 88 байт);
    • J. David Lowe - визуализация входных данных в форме графика (149 байт)


  1. Главная ссылка к новости (http://developers.slashdot.org...)
  2. OpenNews: Опубликованы работы, победившие на 21 чемпионате по написанию запутанного кода на языке Си
  3. OpenNews: Опубликован код работ, победивших на соревновании по написанию самого запутанного кода на языке Си
  4. OpenNews: Возобновлено соревнование по написанию самого запутанного кода на языке Си
  5. OpenNews: Анонсировано соревнование по созданию запутанного кода на языке Си
  6. OpenNews: Соревнование по созданию невинно-выглядящего кода на языке Си
Лицензия: CC-BY
Тип: К сведению
Ключевые слова: gcc
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение (51) Ajax | 1 уровень | Линейный | Раскрыть всё | RSS
  • 1.1, Аноним (-), 01:09, 06/01/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +11 +/
    Однострочник на перл - чемпион на все времена! :)
     
     
  • 2.9, Anonn (?), 07:03, 06/01/2014 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Ларри Уолл в этом конкурсе неоднократно участвовал. И видно ведь, что не один perl может быть краток.
     
  • 2.46, Grammar Nazi (?), 08:09, 09/01/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    на Перле, ёптa
     

  • 1.2, Жорж (?), 01:33, 06/01/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +6 +/
    Как это так эмулятор ibm pc в 4кб уложился? фантастика нафик.
     
     
  • 2.3, pavlinux (ok), 01:59, 06/01/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Там плюс 12 кило BIOS и 3.7 Makefile
    А в Makefile есть вот такая фича

    # Defines
    DEFS=-DKB='(kb=read(H(8),r+1190,1))&&H(7)'

    Как судьи пропустили такую подставу, нипанятна.

     
     
  • 3.5, Аноним (-), 02:24, 06/01/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А ты вставь этот дефайн в C файл, размер всё равно будет меньше 4096.
     
  • 3.6, Аноним (-), 02:37, 06/01/2014 [^] [^^] [^^^] [ответить]  
  • +18 +/
    > Как судьи пропустили такую подставу, нипанятна.

    Obfuscation test PASSED!

     
     
  • 4.21, Аноним (-), 12:17, 06/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    /thread
     
  • 3.22, xdbxd (?), 12:46, 06/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    В однострочнике J. David Lowe, в makefile
    CFLAGS= ${CWARN} ${CSTD} ${ARCH} ${OPT} ${LIBS} -include stdio.h -include stdlib.h -D'_(x)=strtof(b[x],0)'
     
     
  • 4.24, pavlinux (ok), 14:18, 06/01/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Давайте устроим соревнование: кто больше кода в Makefile перенесёт. :)
     
     
  • 5.41, Аноним (-), 10:13, 08/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Предлагаю решение для хранения данных:
    Создаешь 100500 файлов. Нулевого размера. С именами в которых данные заколочены. Суммарный размер - ноль. Зато подчитав оглавление диры можно свои данные получить. Таким макаром чувак смог compression contest разок выиграть, "типа, сжав" данные :). Он честно спросил - можно ли более 1 файла. Ему сказали - можно. Ну он и сохранил данные в файлах 0-го размера :).
     
  • 3.38, svlasov (ok), 14:13, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Читайте hint.text:

    On UNIX-based systems we can get raw keystrokes using stty. However Windows has no stty. Therefore the Makefile includes a -D entry to define a “keyboard driver” KB which as it stands is suitable for UNIXes, but maybe not non-UNIX platforms.

     
  • 2.10, Anonn (?), 07:05, 06/01/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Этому эмулятору вчера Alan Cox удивлялся.
     
     
  • 3.25, pavlinux (ok), 14:25, 06/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    >[оверквотинг удален]
    > - Intel 8086/186 CPU
    > - 1MB RAM
    > - 8072A 3.5" floppy disk controller (1.44MB/720KB)
    > - Fixed disk controller (supports a single hard drive up to 528MB)
    > - Hercules graphics card with 720x348 2-color graphics (64KB video RAM), and CGA 80x25 16-color text mode support
    > - 8253 programmable interval timer (PIT)
    > - 8259 programmable interrupt controller (PIC)
    > - 8042 keyboard controller with 83-key XT-style keyboard
    > - MC146818 real-time clock
    > - PC speaker

    Это ж конфиг моего первого ПиСюка, РАМы правда было 768кб

     

  • 1.4, Okarin (ok), 02:04, 06/01/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    >misaka.c

    AWWWWW!

     
     
  • 2.7, ano (??), 05:44, 06/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    cc misaka.c -o hcat && ./hcat misaka.c misaka.c > misaka2.c && cc misaka2.c -o vcat && ./vcat misaka.c misaka.c > misaka3.c && cc misaka3.c -o longcat && ./longcat misaka.c misaka.c > misaka4.c && cat misaka4.c
     
  • 2.8, Аноним (-), 06:31, 06/01/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    О-карин! Ня!
     
  • 2.11, pkunk (ok), 08:06, 06/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    В прошлом году от него же Нярко была.
     

  • 1.12, zed_0xff (?), 08:37, 06/01/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    последний скриншот (зеленый) - фотошоп!
     
     
  • 2.13, www2 (ok), 10:03, 06/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Если посмотреть исходники, то можно увидеть, что там используются символы из Unicode.
     
  • 2.14, Аноним (-), 11:25, 06/01/2014 [^] [^^] [^^^] [ответить]  
  • +3 +/
    >  последний скриншот (зеленый) - фотошоп!

    Уникод еще и не такое позволяет.
    Вот те фотошоп:
    ▒▒▒▄▄▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▄▄
    ▒▒█▒░░░░▄▄▄▄▀░░░░░▒▀▀▄▄▄▒▒█
    ▒█▒░░░░░▄▀▀▄▄░░░░▒▄▄▄▒▒▒▒▒▒█
    █▒▀▄▄▒░░██▄▄▄█░░▒██▄▄█▒▒▒▒▒▒█
    █▒▒░▄▀▄▄▄▀░░░░░░▒▒█▒▒▒▒▒▒▒▒█
    █▒░░█▄▄░░░░░█▀░░░░▀▄▒▒▄▀▀▀▄█
    █▒░░▀█▄█▀▀▄░▀▀▀▀▄▄▄▀▒▒▒█▒▒█  
    ▒█▒░░░▀█▄▄█▀▀▀█▀▀▀█▀█▀██▒▒█  
    ▒▒█▒░░░░▀██▄▄▄█▄▄▄█▄██▒▒▒▒█▄
    ▒▒▒█▒░░░░░░░░░░░░░▒▒▒▒▒▒▒▒▒█
    ▒▒▒▒▀▀▀▀▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▀▀

     

  • 1.15, Аноним (-), 11:25, 06/01/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    У меня давно сложилось ощущение, что половина программ в Линуксе писалась для этого чемпионата.
     
     
  • 2.16, Аноним (-), 11:40, 06/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > У меня давно сложилось ощущение, что половина программ в Линуксе писалась для
    > этого чемпионата.

    В винде и похуже бывает. Гуглить про "в общем какой-то козел стал гoвнистость" - там показано как программы пишут виндовые програмеры :)

     
     
  • 3.18, Fomalhaut (?), 12:10, 06/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Судя по тому, что нам на работе на заказ пишут (не кислые комплексы пачками за не менее некислые деньги) - виндовые проггеры зачастую их пишут в туалете в процессе дефекации с использованием соответствующей бумаги.
    Зато как звучит название этих проггероФФ: сположные "системные интеграторы" и "разработчики систем SCADA/АСУТП"...
     
     
  • 4.19, Fomalhaut (?), 12:11, 06/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    А по томе: просто великолепно! Весьма впечатлён.
     
  • 4.20, Аноним (-), 12:11, 06/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    А ты поищи упомянутый текстик. Там виндовые програмеры сделали из сей какой-то почти одинэс, только ругательный :)
     

  • 1.17, Admiral (?), 12:08, 06/01/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Очень круто :)
     
  • 1.23, BratSinot (ok), 12:47, 06/01/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • –5 +/
    И очередные программы из разряда "сделаем тупо ASCII-картинку!".
    А
    > HTTP-сервер, при открытии страницы отображающий 3D-часы;

    вообще похоже POSIX использует.

     
     
  • 2.29, МегаВова (?), 15:08, 06/01/2014 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Штаа?
     
  • 2.34, Аноним (-), 04:44, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > И очередные программы из разряда "сделаем тупо ASCII-картинку!".

    Попробуй сам так сделать - не забудь рассказать насколько это просто...

     

  • 1.26, Аноним (-), 14:36, 06/01/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    А разве все это не противоречит идеологии OpenSource
     
     
  • 2.28, Andrey Mitrofanov (?), 14:59, 06/01/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > А разве все это не противоречит идеологии OpenSource

    Нет.

     
  • 2.33, Аноним (-), 23:24, 06/01/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Идеологии - нет.
    Идеалам - да.
     

  • 1.27, metallic (ok), 14:42, 06/01/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А на питоне слабо такое с форматированием выделывать? :D
     
     
  • 2.30, guest (??), 15:10, 06/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > А на питоне слабо такое с форматированием выделывать? :D

    Питон сам за тебя всё выделывает.

     
  • 2.35, Аноним (-), 04:46, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Питон - ЯП для быдлoкoдeров. А быдлoкодер должен вкалывать от забора и до обеда. Художества быдлoкoдерам не позволяются, это удел настоящих профи.
     
  • 2.57, chorny (ok), 06:33, 11/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    не совсем то: http://docs.python.org/faq/programming#is-it-possible-to-write-obfuscated-one
     

  • 1.31, Аноним (-), 20:34, 06/01/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Кто понял, где таблица в с президентами? Или ответ рандомно выбирается? :)
     
     
  • 2.49, Аноним (-), 13:05, 09/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Если попытаться написать читаемый эквивалент, то выйдет следующее (я не проверял работоспособность!)

    int main(int argc, char **argv)
    {
    if ( (*(int*)argv[1] % 4796 % 275 % argc) == 0 ) /* argc == 4 */
    puts(argv[3]);
    else
    puts(argv[2]);
    }

    Первые четыре буквы имени президента приводятся к int (причем из-за Little Endian байты интерпретируются в обратном порядке: так, obama превратится в 0x6D61626F - 'mabo'). Дальше происходит какой-то фокус с остатками от деления. Кто поймет его - поймет смысл программы.

    Имеет смысл посмотреть, как президенты распределены во времени были. Думаю дальше...

     

  • 1.32, Аноним (-), 21:48, 06/01/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Кстати, у кого-нибудь есть ссылка на компактную шпаргалку по сабжу? (извиняюсь за офтопик)
     
  • 1.44, yantux (??), 18:40, 08/01/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Я думаю победили бывшие кодеры MS Windows, т.к. Майкрософт не жалеет раздавать исходники правительствам стран для сертификации структурами типа ФСБ.

    Интересно, как они справятся с сертификацией подобного кода?

    Такой код можно сертифицировать под требования FAA документ DO-178B ?

     
  • 1.45, Аноним (-), 06:58, 09/01/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Господа, объясните, плиз, как работает однострочник с президентами. В Makefile вроде пусто.
     
     
  • 2.47, Ann (??), 10:57, 09/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    >So how does a one line C source know so much?  Hint: it doesn't.
     
  • 2.50, Аноним (-), 16:00, 09/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Там два магических числа в коде:) выбор нужного бита внутри кодового int-a - по первой букве фамилии
     
     
  • 3.51, Аноним (-), 17:20, 09/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Не могли бы вы развернуть свою мысль? Что-то я сомневаюсь в вашем утверждении.
     
  • 3.52, Andrey Mitrofanov (?), 17:37, 09/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Там два магических числа в коде:) выбор нужного бита внутри кодового int-a
    > - по первой букве фамилии

    По четырём же байтам, а не по первой букве. Не "нужного бита", а спец.подобранные коэффициенты в типа-хэше -- для ограниченного множества вх.данных выдающие нужные ответы.

    ---Куда делся ответ другого анонима с читаемым кодом?

     
     
  • 4.53, Аноним (-), 19:49, 09/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Никуда не делся, он чуть выше. Я просто решил отвечать на более раннюю просьбу объяснить.
     
  • 4.54, Аноним (-), 19:54, 09/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    >> Там два магических числа в коде:) выбор нужного бита внутри кодового int-a
    >> - по первой букве фамилии
    > По четырём же байтам, а не по первой букве. Не "нужного бита",
    > а спец.подобранные коэффициенты в типа-хэше -- для ограниченного множества вх.данных выдающие
    > нужные ответы.
    > ---Куда делся ответ другого анонима с читаемым кодом?

    Да, очень похоже на хэш. Но все-таки интересно выяснить, как именно автор подобрал магические числа и почему их три. Должен же там быть какой-то метод! Есть у кого-нибудь догадки?

     
     
  • 5.55, Andrey Mitrofanov (?), 20:02, 09/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > какой-то метод! Есть у кого-нибудь догадки?

    Сначала нужен Гений, придумавший общую конструкцию. Или Художник, укравший оную.

    Потом, для таблицы входных и выходных значений, подставляемых в, решаем систему уравнений -- относительно коэффифиентов в данном случае.

    Делов-то. Достаточно кудрявая функция, таблица из 51 или сколько их там президентов -- и вперёд по кочкам.

    То есть грубо можно считать, что те 51 бит (да-нет, демократ-комунист) почти что забиты в коэфициенты.

     
     
  • 6.56, Аноним (-), 15:27, 10/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    >решаем систему уравнений -- относительно коэффифиентов в данном случае.

    Идея мне понятна. Но вот в данном конкретном случае я немного застрял. У меня получается, что количество переменных больше, чем количество уравнений в системе.

    H % A % B % C = D <=> H - q1*A - q2*B - q3*C = D

    Даже зная H (числа, получающиеся из четырех букв президента), получается, что частные q1, q2 и q3 в каждом уравнении свои независимые, а D может принимать значение либо 0 (знаем, что демократ) либо неопределенное "от 1 до C-1". Плюс ограничение на то, что все числа натуральные. Не думаю, что тут можно решить систему иначе, как тупым перебором.

     

  • 1.48, hizel (ok), 12:41, 09/01/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Лопни мои глаза, но ведь на первом скриншоте fly!11адын
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Спонсоры:
    MIRhosting
    Fornex
    Hosting by Ihor
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2019 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру