Underhanded C Contest был конкурсом программирования , в котором требовалось создать вредоносный код, но который прошел строгую проверку и выглядел как честная ошибка, даже если был обнаружен . Правила конкурса определяют задачу и вредоносный компонент. Заявки должны выполнять задачу вредоносным образом, как определено конкурсом, и скрывать вредоносность. Участникам разрешено использовать компилируемые языки типа C для создания своих программ. [1]
Конкурс был организован доктором Скоттом Крейвером [2] из кафедры электротехники в Университете Бингемтона . Первоначально конкурс был вдохновлен конкурсом Obfuscated V Дэниела Хорна осенью 2004 года. [3] Для конкурсов 2005-2008 годов призом был подарочный сертификат на 100 долларов США в ThinkGeek . В конкурсе 2009 года приз был увеличен до 200 долларов США из-за очень позднего объявления победителей, а призом конкурса 2013 года также стал подарочный сертификат на 200 долларов США.
Конкурс 2005 года имел задачу базовой обработки изображений , такой как повторная выборка или сглаживание, но скрытно вставляя уникальные и полезные данные « отпечатков пальцев » в изображение. Победители 2005 года использовали неинициализированные структуры данных, повторное использование указателей и внедрение машинного кода в константы .
Конкурс 2006 года требовал от участников подсчета вхождений слов, но при этом время выполнения на разных платформах было совершенно разным. Для выполнения задания участники использовали ошибки реализации fork, проблемы оптимизации, различия в порядке байтов и различные различия в реализации API. Победитель вызвал strlen() в цикле, что привело к квадратичной сложности, которая была оптимизирована компилятором Linux, но не Windows.
Конкурс 2007 года требовал заявок на шифрование и дешифрование файлов с помощью надежного, легкодоступного алгоритма шифрования, чтобы низкий процент (1% - 0,01%) зашифрованных файлов мог быть взломан за достаточно короткое время. Конкурс начался 16 апреля и закончился 4 июля. Заявки использовали неправильные реализации RC4, неправильно используемые вызовы API и неправильные прототипы функций.
Конкурс 2008 года требовал от заявок отредактировать прямоугольную часть изображения PPM таким образом, чтобы эта часть могла быть реконструирована. Разрешался любой метод «закрытия» прямоугольника, при условии удаления исходных пикселей, а реконструкция пикселей не обязательно должна была быть идеальной [4] (хотя точность реконструкции исходному файлу будет фактором при оценке). Конкурс начался 12 июня и закончился 30 сентября. Заявки имели тенденцию либо xor-ить область с извлекаемой псевдослучайной маской, либо добавлять замаскированные данные в конец формата файла. Программы, занявшие второе место, обе использовали неправильно определенные макросы, в то время как победитель, выбрав работу с необычным текстовым форматом, обнулил значения пикселей, сохранив количество цифр нетронутым.
Конкурс 2009 года требовал от участников написать программу, которая просеивает директивы маршрутизации, но перенаправляет часть багажа на основе какого-то безобидного комментария в файле входных данных, разделенных пробелами. Конкурс начался 29 декабря 2009 года и должен был закончиться 1 марта 2010 года. [5] Однако в течение трех лет не было никакой активности. Победители были объявлены только 1 апреля 2013 года, с одним абсолютным победителем и шестью призерами. [6] [7]
Конкурс 2013 года был объявлен 1 апреля 2013 года и должен был состояться 4 июля 2013 года; результаты были объявлены 29 сентября 2014 года. [8] Он был о вымышленном социальном сайте под названием «ObsessBook». Задача состояла в том, чтобы написать функцию для вычисления DERPCON (степени Edge -Reachable Personal CONnection) между двумя пользователями, которая «случайно» вычисляет слишком малое расстояние для особого пользователя.
Конкурс 2014 года был объявлен 2 ноября 2014 года и должен был состояться 1 января 2015 года. Результаты были объявлены 1 июня 2015 года. [9] Целью было написать код наблюдения для Twitter -подобной социальной сети , чтобы выполнить секретный правительственный запрос на наблюдение; но по неочевидным причинам код должен был тонко раскрывать факт наблюдения пользователю. Общий подход заключается в том, чтобы скрыть запись в данные пользователя как запись в данные наблюдения, и победившая работа сделала это, реализовав глючную функцию проверки времени, которая перезаписывает ввод.
Конкурс 2015 года был объявлен 15 августа 2015 года и должен был быть подведен 15 ноября 2015 года. Результаты были объявлены 15 января 2016 года. Сценарий представлял собой процесс ядерного разоружения между Народной Славной Демократической Республикой Алисы и Славной Демократической Народной Республикой Боба ( Алиса и Боб ), а миссия состояла в том, чтобы написать тестовую функцию для сравнения потенциально расщепляющегося материала с эталонным образцом, который при определенных обстоятельствах помечал бы боеголовку как содержащую расщепляющийся материал, когда это не так. Около трети заявок использовали отравление NaN ошибочными операциями с плавающей точкой, что генерирует больше NaN в последующих вычислениях и всегда оценивается как false для сравнения. Победившая работа использовала путаницу типов данных между double и float для искажения значений.