Представлен (http://www.underhanded-c.org/) седьмой конкурс "Underhanded C Contest (http://underhanded.xcott.com/)", участникам которого предлагается создать небольшие и легко читаемые программы на языке Си, которые с виду не вызывают подозрений, но выполняют скрытые и непредсказуемые действия. Чем труднее при проведении аудита кода распознать скрытую вставку, тем выше ставится оценка участнику. Работы на конкурс будут приниматься до 1 января. Приз символический - сертификат на 200$ для покупки в магазине ThinkGeek. С работами победившими на конкурсе в прошлые годы можно познакомиться на данной странице (http://underhanded.xcott.com/?page_id=4).
В качестве задания в этом году предложен сценарий скрытого отслеживания спецслужбами активности пользователей в социальных сетях. Участникам дано задание подготовить код сервиса, позволяющего отправлять 140-символьные сообщения, в который встроена функция скрытого сохранения сообщений, удовлетворяющих определённой маске, содержимое которое должно быть сохранено в тайне (т.е. маска должна передаваться в виде хэша, не дающего владельцу узнать по каким ключевым словам ведётся фильтрация).URL: http://www.underhanded-c.org/
Новость: http://www.opennet.dev/opennews/art.shtml?num=40992
> Представлен седьмой конкурс ..Ну вот так вот и собираюсь кодовую базу АНБ-шники для своих коварных целей. Даже ТЗ по сути их задачи раскрывает.
И понятно почему именно Си выбран.
Чтобы было сложнее - потому что усложнить работу с памятью больше, чем в C может не каждый
>Чтобы было сложнее - потому что усложнить работу с памятью больше, чем в C может не каждыйРабота с памятью очень простая и подчиняется принципу: нагадил - убери за собой. Да такое поведение несколько отличается от поведения животных, однако в этом и есть суть культуры.
Во-во, джавакодерам, GO-кодерам и прочим, кто не осилил адресную арифметику, этой простой истины не понять.
Примечательно, что противоположный принцип (нагадил - уходи и не возвращайся, GC всё сделает) применяется в эрланге.
А сама виртуальная машина эрланга на чём написана? Не на С случайно?
> А сама виртуальная машина эрланга на чём написана? Не на С случайно?На C#.
Ну вот мы и пообсуждали запутанность кода... Вы хоть контекст обсуждения в заголовке читали? Причем тут вообще сборщик мусора? А давно шаманили, разбирая набор данных со строками и бинарными структурами? Из потока? Ах да, это не модно нынче, ну ну...
>>Чтобы было сложнее - потому что усложнить работу с памятью больше, чем в C может не каждый
> Работа с памятью очень простая и подчиняется принципу: нагадил - убери за
> собой. Да такое поведение несколько отличается от поведения животных, однако в
> этом и есть суть культуры.сишники безкультурные? Даже костыляете анализаторы утечек для этого недоязычка.
> И понятно почему именно Си выбран.Да. Лучше бы на питоне.
> Да. Лучше бы на питоне.Да тут Шигорин как-то приводил пример. С переменными на японском. Отформатировано, конечно, нормально, но понятнее от этого не становится.
И кстати на питоне как раз можно без особого палива пару раз бэкспейс нажать в какой-нибудь достаточно большой программи. И поди там разберись - задумано так или баг/фича.
> пару раз бэкспейс нажать
> И поди там разберисьо дааа)) подсвечивается код, выводится номер строки, сообщение IndentationError: *** и поди там разберись.
Не всегда: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
...
>[оверквотинг удален]
> 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/. Смысловое значение конструкций языка говорит что вроде всё ок, а на самом деле не ок. На нормальных языках эта бессмысленность не проканает. И слава богу.
> собираюсь кодовую базу АНБ-шникиСпалился ^^ :)
Конкурс учредили случаем не АНБ-шники, для негласного набора разработчиков, например openSSL, или прочих проектов, куда нужно внедрить не очевидный бэкдор, и по возможности, что бы код был запутанным?
Как раз наоборот. Конкурс учредили те, кто хочет привлечь внимание к проблеме вездесущести АНБ. Шаг первый в противостоянии с ним - продемонстрировать на практике, какими широкими возможностями он обладает, и насколько уязвима разработка.
"Давай поиграем в игру" http://q.viva64.com/
http://habrahabr.ru/company/pvs-studio/blog/237219/Примеры взяты из реальных проектов.
Проблема проблем - в кодстайле и нечитаемых апи винды.
> "Давай поиграем в игру" http://q.viva64.com/КГ/AМ, оно мне половину примеров не засчитало лишь за то что я кликнул немного неидеально. Не, ну хотя-бы всю невалидную конструкцию в целом можно засчитывать, или где? А то клацаем на явно неверном выражении. Обана - неверно. Оказывается - за то что клацнул не на переменную а на скобку рядом с ней. Однако.
systemd
По крайней мере код там читабельный, придерживаются стандартов ядра. Тут дело в другом...
> По крайней мере код там читабельныйОбычно об этом вопит тот, кто его не читал.
> > По крайней мере код там читабельный
> Обычно об этом вопит тот, кто его не читал.Я читал, но просто из интереса, без практических целей. Ничего страшного не нашёл (но и глубоко не копался).
Можете привести пример плохого кода, ОТЛИЧНЫЙ от тех, о которых традиционно кричат тролли:
1. "они хранят возвращаемое значение в переменной r, а не variableStoringTheValueToBeReturnedFromTheFunction",
2. "у них тут switch (if/elseif) на 100500 вариантов занимает больше 20 строк",
3. "у них тут есть функции длиннее 3 строк, и комментарии короче 20 строк"
4. "они используют goto для выхода из вложенного цикла"?
> По крайней мере код там читабельный, придерживаются стандартов ядра. Тут дело в
> другом...там быдлокод читабельный)))
И как всегда победили индусы???
Запутанная программа на с++: ставим в любом месте goto и переходим на ассемблерную вставку на пару сотен строчек.
Это нечто противоположное заданию.
На самом деле, в заголовке зря употреблен эпитет "запутанный".
Имеется в виду код с подвохом - он легко читается и вполне понятен, но при этом делает не то, что кажется на первый взгляд.
То есть потенциально проходящий даже независимый аудит СПО...
> Запутанная программа на с++: ставим в любом месте goto...и все дружно пойдут выяснять: а куда оно ведет.
> и переходим на ассемблерную вставку на пару сотен строчек.
"Незаметно копаем на дороге в центре города пятиметровую яму, в надежде что никто не заметит".
Не тот язык немного. Им нужно было выбрать php, тогда соревнования стали бы действительно жесткими.
Brainfuck тогда уж, можно и незапутанный - один хрен, никто не поймет, что код делает.
оо малварь будет крепчать, деньга в карман мошенника потянется
Да кому это нужно? Ну тока если АНБ народ на работу нанимать.
Вообще, можно, например, объявить какой-то класс x с методом y, который делает что-то хорошее, а потом объявить класс X - потомок x, а метод y перегрузить, чтоб делал что-то плохое. и в одной подпрограмме объявить локальный объект z класса x, который отрабатывает как положено, а в другой - объект z класса X, в котором вызов того же с виду метода даст другой результат.
начальный уровень
казалось бы, при чем здесь Си
Не поленился перейти по ссылке и посмотреть условия, в FAQ:Can I use C++ instead of C?
If you actually want to do something like that, then sure. No COBOL, please.
Так что вышеприведенный коммент неуместен.
Это для JS ты написал? Молодец.
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.И хоть бы кто-то написал что цель задания была - написать код таким образом, чтобы факт проверки аккуратно "утек" наружу. Задача-то существенно сложнее и интереснее чем кажется из новости.