Кіріспе
Зыянды кодты бағдарламалау байқауы, ол адал қателік сияқты көрінеді. Underhanded C Contest – бұл зиянды кодты жасауға арналған бағдарламалау байқауы, ол қатаң тексеруден өтеді және тіпті анықталған жағдайда да, қарапайым қателік сияқты көрінеді. Байқау ережелері тапсырманы және зиянды компонентті анықтайды. Қатысушылар өз міндеттерін байқау талаптарына сәйкес қастандықпен орындауға және осы қастандықты жасыруға тиіс. Конкурсанттар өз бағдарламаларын жасау үшін C сияқты компиляцияланатын тілдерді пайдалануға рұқсат етіледі. Байқауды Бингемтон университетінің Электротехника кафедрасының докторы Скотт Крейвер ұйымдастырды. Байқау 2004 жылдың күзінде Дэниел Хорнның Obfuscated V байқауынан шабыттанды. 2005-2008 жылдар аралығындағы байқаулардың жүлдесі ThinkGeek дүкенінен 100 долларлық сыйлық сертификаты болды. 2009 жылғы байқаудың жүлдесі жеңімпаздардың өте кеш жариялануына байланысты 200 долларға дейін артты, ал 2013 жылғы байқаудың жүлдесі де 200 долларлық сыйлық сертификаты.
The Underhanded C Contest was a programming contest to turn out code that is malicious, but passes a rigorous inspection, and looks like an honest mistake even if discovered. The contest rules define a task, and a malicious component. Entries must perform the task in a malicious manner as defined by the contest, and hide the malice. Contestants are allowed to use C like compiled languages to make their programs. The contest was organized by Dr. Scott Craver of the Department of Electrical Engineering at Binghamton University. The contest was initially inspired by Daniel Horn's Obfuscated V contest in the fall of 2004. For the 2005 to 2008 contests, the prize was a $100 gift certificate to ThinkGeek. The 2009 contest had its prize increased to $200 due to the very late announcement of winners, and the prize for the 2013 contest is also a $200 gift certificate.
2005 жыл
2005 жылғы байқауда суретті қайта үлгілеу немесе тегістеу сияқты қарапайым кескіндерді өңдеу міндеті қойылды, бірақ сонымен қатар суретке бірегей және пайдалы "саусақ іздері" деректерін жасырын түрде енгізу қажет болды. 2005 жылғы жеңімпаздар бастапқыда инициализацияланбаған дерек құрылымдарын, көрсеткіштерді қайта пайдалануды және машиналық кодты тұрақты мәндерге енгізуді қолданды.
2006 жыл
2006 жылғы байқауда қатысушылар сөздердің қайталануын санау керек болды, бірақ әртүрлі платформаларда орындалу уақыты мүлдем әртүрлі болды. Осы міндетті орындау үшін қатысушылар fork іске асылу қателіктерін, оңтайландыру мәселелерін, ендіандық айырмашылықтарды және әртүрлі API-дың іске асылу ерекшеліктерін пайдаланды. Жеңімпаз strlen функциясын цикл ішінде шақырып, нәтижесінде квадраттық күрделілік пайда болды, оны Linux компиляторы оңтайландырды, ал Windows компиляторы оңтайландырмады.
2007 жыл
2007 жылғы байқауға қатысушылар күшті, қолжетімді шифрлау алгоритмін пайдаланып файлдарды шифрлау және шифрлауды бұзу қаупі төмен болуын (1% - 0,01%) қамтамасыз етуі керек болды, яғни шифрланған файлдардың шамалы бөлігі ғана қысқа мерзім ішінде бұзылуы мүмкін еді. Байқау 16 сәуірде басталып, 4 шілдеде аяқталды. Жұмыстарда RC4 алгоритмінің дұрыс емес қолданылуы, API шақыруларындағы қателіктер және функция прототиптеріндегі жаңылыстар кездесті.
2008 жыл
2008 жылғы байқауға қатысушылар PPM кескінінің тікбұрышты бөлігін мұқият өңдеуі және оны қалпына келтіруге болатындай етуі керек болды. Тікбұрышты "жабудың" кез келген тәсіліне рұқсат етілді, бірақ бастапқы пиксельдер жойылған болуы керек еді, ал пиксельдерді қалпына келтіру мінсіз болуы шарт емес (дегенмен, қалпына келтірілген кескіннің бастапқы файлға қаншалықты сәйкес келетіні бағалауда маңызды рөл атқаратын еді). Байқау 12 маусымда басталды және 30 қыркүйекте аяқталды. Көптеген қатысушылар аймақты қалпына келтіруге болатын псевдо-керексіз маскамен XOR операциясын жасады немесе маскаланған деректерді файл форматының соңына тіркеді. Екінші орын алған бағдарламалардың екеуі де дұрыс анықталмаған макростарды қолданды, ал жеңімпаз, сирек қолданылатын мәтіндік форматпен жұмыс істеуді жөн көрді, пиксельдердің мәнін нөлге теңеді, бірақ цифрлардың санын өзгеріссіз қалдырды.
2009 жыл
2009 жылғы байқауға қатысушылар маршруттық нұсқауларды қарастырып, бірақ орынмен бөлінген кіріс деректері файлындағы сырттай зиянсыз көрінетін түсініктемеге сүйене отырып, жүк көлігін басқа бағытқа жіберетін бағдарлама жазуы тиіс еді. Байқау 2009 жылдың 29 желтоқсанында басталды және 2010 жылдың 1 наурызында аяқталуға жоспарланған. Дегенмен, үш жыл бойы ешқандай қызмет болған жоқ. Жеңімпаздар 2013 жылдың 1 сәуірінде ғана жарияланды, олардың арасында бір жалпы жеңімпаз және алты жүлдегер болды.
2013 жыл
2013 жылғы байқау 2013 жылдың 1 сәуірінде жарияланды және 2013 жылдың 4 шілдесіне дейін тапсыру керек болды; нәтижелер 2014 жылдың 29 қыркүйегінде жарияланды. Байқау "ОбсессБұқ" деп аталатын ойдан шығарылған әлеуметтік желі туралы болды. Тапсырма екі пайдаланушы арасындағы DERPCON (Degrees of Edge Reachable Personal CONnection) шамасын есептейтін функцияны жазу болды, бұл функция "кездейсоқ түрде" белгілі бір пайдаланушы үшін қашықтықты тым кішкентай етіп есептейтін.
2014 жыл
2014 жылғы байқау 2014 жылдың 2 қарашасында жарияланды және 2015 жылдың 1 қаңтарына дейін тапсыру керек болды. Нәтижелер 2015 жылдың 1 маусымында жарияланды. Байқаудың мақсаты – Twitter сияқты әлеуметтік желіге бақылау кодын жазу, құпия үкіметтік бақылау талабына сәйкес келу еді; бірақ түсініксіз себептерге байланысты, код пайдаланушыға бақылау фактісін сырт көзге байқалмайтын етіп жеткізуі тиіс болды. Жалпы тәсіл – пайдаланушы деректеріне жазуды бақылау деректеріне жазу ретінде жасыру болды, ал жеңімпаз кіріс мәнін қайта жазатын қателігі бар уақытты тексеру функциясын іске асырды.
2015 жыл
2015 жылғы байқау 15 тамызда жарияланды және 15 қарашада аяқталды. Нәтижелері 2016 жылдың 15 қаңтарында жарияланды. Сценарий Алисаның Халықтық даңқты Демократиялық Республикасы мен Бобтың даңқты Демократиялық Халықтық Республикасы (Алиса мен Боб) арасындағы ядролық қарусыздандыру процесі болды, ал миссиясы потенциалды бөлінгіш материалды эталондық үлгімен салыстыру үшін сынақ функциясын жазу болды, бұл функция белгілі бір жағдайларда жарылыс зарядында бөлінгіш материал бар деп қате көрсетуі мүмкін. Ұсыныстардың шамамен үштен бірінде қателікті қамтитын қалқыма нүктелік операциялар арқылы NaN улануы қолданылды, бұл кейінірек есептеулерде NaN-дардың көбеюіне және салыстыру нәтижесінде әрқашан жалған мән шығуына әкелді. Жеңімпаз жұмыс мәндерді бұрмалау үшін double және float дерек түрлерін шатастыруды пайдаланды.