The OpenNET Project / Index page

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

Соревнование по созданию запутанного кода на языке Си

04.11.2014 12:16

Представлен седьмой конкурс "Underhanded C Contest", участникам которого предлагается создать небольшие и легко читаемые программы на языке Си, которые с виду не вызывают подозрений, но выполняют скрытые и непредсказуемые действия. Чем труднее при проведении аудита кода распознать скрытую вставку, тем выше ставится оценка участнику. Работы на конкурс будут приниматься до 1 января. Приз символический - сертификат на 200$ для покупки в магазине ThinkGeek. С работами, победившими на конкурсе в прошлые годы, можно познакомиться на данной странице.

В качестве задания в этом году предложен сценарий скрытого отслеживания спецслужбами активности пользователей в социальных сетях. Участникам дано задание подготовить код сервиса, позволяющего отправлять 140-символьные сообщения, в который встроена функция скрытого сохранения сообщений, удовлетворяющих определённой маске, содержимое которое должно быть сохранено в тайне (т.е. маска должна передаваться в виде хэша, не дающего владельцу узнать по каким ключевым словам ведётся фильтрация). Задача программиста — уведомить пользователя о факте архивации сообщения, при чём сделать это так, чтобы заметить это в коде было очень сложно.

  1. Главная ссылка к новости (http://www.underhanded-c.org/...)
  2. OpenNews: Соревнование по созданию невинно-выглядящего кода на языке Си
  3. OpenNews: Возобновлено соревнование по написанию самого запутанного кода на языке Си
  4. OpenNews: Результаты 22 чемпионата по написанию запутанного кода на языке Си
Автор новости: umbr
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/40992-underhanded
Ключевые слова: underhanded
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (40) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.2, Кирилл (??), 13:08, 04/11/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    > Представлен седьмой конкурс ..

    Ну вот так вот и собираюсь кодовую базу АНБ-шники для своих коварных целей. Даже ТЗ по сути их задачи раскрывает.

    И понятно почему именно Си выбран.

     
     
  • 2.3, Аноним (-), 13:10, 04/11/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Чтобы было сложнее - потому что усложнить работу с памятью больше, чем в C может не каждый
     
     
  • 3.10, Аноним (-), 14:27, 04/11/2014 [^] [^^] [^^^] [ответить]  
  • +25 +/
    >Чтобы было сложнее - потому что усложнить работу с памятью больше, чем в C может не каждый

    Работа с памятью очень простая и подчиняется принципу: нагадил - убери за собой. Да такое поведение несколько отличается от поведения животных, однако в этом и есть суть культуры.

     
     
  • 4.12, Аноним (-), 16:50, 04/11/2014 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Во-во, джавакодерам, GO-кодерам и прочим, кто не осилил адресную арифметику, этой простой истины не понять.
     
  • 4.13, YetAnotherOnanym (ok), 17:52, 04/11/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Примечательно, что противоположный принцип (нагадил - уходи и не возвращайся, GC всё сделает) применяется в эрланге.
     
     
  • 5.15, Аноним (-), 20:21, 04/11/2014 [^] [^^] [^^^] [ответить]  
  • +/
    А сама виртуальная машина эрланга на чём написана? Не на С случайно?
     
     
  • 6.17, Demo (??), 20:50, 04/11/2014 [^] [^^] [^^^] [ответить]  
  • –5 +/
    > А сама виртуальная машина эрланга на чём написана? Не на С случайно?

    На C#.

     
  • 4.19, Аноним (-), 23:48, 04/11/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ну вот мы и пообсуждали запутанность кода... Вы хоть контекст обсуждения в заголовке читали? Причем тут вообще сборщик мусора? А давно шаманили, разбирая набор данных со строками и бинарными структурами? Из потока? Ах да, это не модно нынче, ну ну...
     
  • 4.33, chinarulezzz (ok), 18:42, 05/11/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >>Чтобы было сложнее - потому что усложнить работу с памятью больше, чем в C может не каждый
    > Работа с памятью очень простая и подчиняется принципу: нагадил - убери за
    > собой. Да такое поведение несколько отличается от поведения животных, однако в
    > этом и есть суть культуры.

    сишники безкультурные? Даже костыляете анализаторы утечек для этого недоязычка.

     
  • 2.16, Demo (??), 20:46, 04/11/2014 [^] [^^] [^^^] [ответить]  
  • +/

    > И понятно почему именно Си выбран.

    Да. Лучше бы на питоне.

     
     
  • 3.26, Аноним (-), 05:32, 05/11/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Да. Лучше бы на питоне.

    Да тут Шигорин как-то приводил пример. С переменными на японском. Отформатировано, конечно, нормально, но понятнее от этого не становится.

    И кстати на питоне как раз можно без особого палива пару раз бэкспейс нажать в какой-нибудь достаточно большой программи. И поди там разберись - задумано так или баг/фича.

     
     
  • 4.32, chinarulezzz (ok), 18:39, 05/11/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > пару раз бэкспейс нажать
    > И поди там разберись

    о дааа)) подсвечивается код, выводится номер строки, сообщение IndentationError: *** и поди там разберись.

     
     
  • 5.39, Аноним (-), 13:55, 06/11/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Не всегда:

    flag = 1
    ....
    for item in items:
        if item = 1:
            bad_items.append(item)
            flag = 0
    ...


    flag = 1
    ....
    for item in items:
        if item = 1:
            bad_items.append(item)
        flag = 0
    ...

     
     
  • 6.40, chinarulezzz (ok), 14:52, 06/11/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >[оверквотинг удален]
    >         bad_items.append(item)
    >         flag = 0
    > ...
    > flag = 1
    > ....
    > for item in items:
    >         if item = 1:
    >                 bad_items.append(item)
    >         flag = 0
    > ...

    и не понятно ничего, задумано так, или фича, ага ;-) таким же образом можно фигурную скобку переместить куда не/надо, и поди разберись... Детский сад какой-то)) Глянь настоящую неоднозначность http://underhanded.xcott.com/. Смысловое значение конструкций языка говорит что вроде всё ок, а на самом деле не ок. На нормальных языках эта бессмысленность не проканает. И слава богу.

     
  • 2.25, Аноним (-), 05:30, 05/11/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > собираюсь кодовую базу АНБ-шники

    Спалился ^^ :)

     

  • 1.6, Ilya Indigo (ok), 13:31, 04/11/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Конкурс учредили случаем не АНБ-шники, для негласного набора разработчиков, например openSSL, или прочих проектов, куда нужно внедрить не очевидный бэкдор, и по возможности, что бы код был запутанным?
     
     
  • 2.22, anonymus (?), 01:26, 05/11/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Как раз наоборот. Конкурс учредили те, кто хочет привлечь внимание к проблеме вездесущести АНБ. Шаг первый в противостоянии с ним - продемонстрировать на практике, какими широкими возможностями он обладает, и насколько уязвима разработка.
     

  • 1.7, Аноним (-), 13:49, 04/11/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    "Давай поиграем в игру" http://q.viva64.com/
    http://habrahabr.ru/company/pvs-studio/blog/237219/

    Примеры взяты из реальных проектов.

     
     
  • 2.11, mine (ok), 16:22, 04/11/2014 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Проблема проблем - в кодстайле и нечитаемых апи винды.
     
  • 2.27, Аноним (-), 05:46, 05/11/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > "Давай поиграем в игру" http://q.viva64.com/

    КГ/AМ, оно мне половину примеров не засчитало лишь за то что я кликнул немного неидеально. Не, ну хотя-бы всю невалидную конструкцию в целом можно засчитывать, или где? А то клацаем на явно неверном выражении. Обана - неверно. Оказывается - за то что клацнул не на переменную а на скобку рядом с ней. Однако.

     

  • 1.8, Аноним (-), 14:06, 04/11/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +7 +/
    systemd
     
     
  • 2.9, Аноним (-), 14:08, 04/11/2014 [^] [^^] [^^^] [ответить]  
  • –2 +/
    По крайней мере код там читабельный, придерживаются стандартов ядра. Тут дело в другом...
     
     
  • 3.23, Led (ok), 01:44, 05/11/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > По крайней мере код там читабельный

    Обычно об этом вопит тот, кто его не читал.

     
     
  • 4.41, некто1120 (?), 15:22, 06/11/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > > По крайней мере код там читабельный
    > Обычно об этом вопит тот, кто его не читал.

    Я читал, но просто из интереса, без практических целей. Ничего страшного не нашёл (но и глубоко не копался).

    Можете привести пример плохого кода, ОТЛИЧНЫЙ от тех, о которых традиционно кричат тролли:
    1. "они хранят возвращаемое значение в переменной r, а не variableStoringTheValueToBeReturnedFromTheFunction",
    2. "у них тут switch (if/elseif) на 100500 вариантов занимает больше 20 строк",
    3. "у них тут есть функции длиннее 3 строк, и комментарии короче 20 строк"
    4. "они используют goto для выхода из вложенного цикла"

    ?

     
  • 3.34, chinarulezzz (ok), 18:43, 05/11/2014 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > По крайней мере код там читабельный, придерживаются стандартов ядра. Тут дело в
    > другом...

    там быдлокод читабельный)))

     

  • 1.14, 530 (?), 18:25, 04/11/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    И как всегда победили индусы???
     
  • 1.18, Аноним (-), 23:20, 04/11/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Запутанная программа на с++: ставим в любом месте goto и переходим на ассемблерную вставку на пару сотен строчек.
     
     
  • 2.21, тоже Аноним (ok), 00:04, 05/11/2014 [^] [^^] [^^^] [ответить]  
  • +6 +/
    Это нечто противоположное заданию.
    На самом деле, в заголовке зря употреблен эпитет "запутанный".
    Имеется в виду код с подвохом - он легко читается и вполне понятен, но при этом делает не то, что кажется на первый взгляд.
    То есть потенциально проходящий даже независимый аудит СПО...
     
  • 2.29, Аноним (-), 05:47, 05/11/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Запутанная программа на с++: ставим в любом месте goto

    ...и все дружно пойдут выяснять: а куда оно ведет.

    > и переходим на ассемблерную вставку на пару сотен строчек.

    "Незаметно копаем на дороге в центре города пятиметровую яму, в надежде что никто не заметит".


     

  • 1.20, Отражение луны (ok), 23:54, 04/11/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Не тот язык немного. Им нужно было выбрать php, тогда соревнования стали бы действительно жесткими.
     
     
  • 2.30, Аноним (-), 08:06, 05/11/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Brainfuck тогда уж, можно и незапутанный - один хрен, никто не поймет, что код делает.
     

  • 1.24, Аноним (-), 05:23, 05/11/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    оо малварь будет крепчать, деньга в карман мошенника потянется
     
  • 1.28, Аноним (-), 05:46, 05/11/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Да кому это нужно? Ну тока если АНБ народ на работу нанимать.
     
  • 1.31, Аноним (-), 16:30, 05/11/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Вообще, можно, например, объявить какой-то класс x с методом y, который делает что-то хорошее, а потом объявить класс X - потомок x, а метод y перегрузить, чтоб делал что-то плохое. и в одной подпрограмме объявить локальный объект z класса x, который отрабатывает как положено, а в другой - объект z класса X, в котором вызов того же с виду метода даст другой результат.
     
     
  • 2.35, Аноним (-), 21:34, 05/11/2014 [^] [^^] [^^^] [ответить]  
  • +/
    начальный уровень
     
  • 2.36, A (?), 21:55, 05/11/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    казалось бы, при чем здесь Си
     
     
  • 3.42, Аноним (-), 14:29, 07/11/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Не поленился перейти по ссылке и посмотреть условия, в FAQ:

    Can I use C++ instead of C?

    If you actually want to do something like that, then sure. No COBOL, please.

    Так что вышеприведенный коммент неуместен.

     
  • 2.37, Аноним (-), 22:48, 05/11/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Это для JS ты написал? Молодец.
     

  • 1.38, Mt (?), 11:42, 06/11/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    The underhanded goal is this: write surveil() in such a way that the act of surveillance is subtly leaked to the user or to the outside world. PiuPiu can not reveal the act of surveillance, but your function is technically able to edit the Piu or user structure during scanning. Find a way to alter that data (this alone is a bit of a challenge, since you are not supposed to alter the data, just scan it) in such a way that an informed outsider can tell if someone is being archived. The leakage should be subtle enough that it is not easily noticed.

    И хоть бы кто-то написал что цель задания была - написать код таким образом, чтобы факт проверки аккуратно "утек" наружу. Задача-то существенно сложнее и интереснее чем кажется из новости.

     

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



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

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