image

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

Программисты-виртуозы назвали свою программу CodePhage (кодофаг). Разработчики поясняют, что их система «анализирует выполнение программы и характеризует типы проверок безопасности, которая та проводит». После чего кодофаг может взять такие же проверки у других программ-доноров, даже если те написаны на других языках программирования, и скормить их программе-реципиенту. Каким образом для этого выбираются программы-доноры, разработчики не уточнили.

«Программ с открытым кодом накопилось уже очень много — в репозиториях находятся миллионы проектов, и многие из них соответствуют сходным спецификациям,- говорит Стелиос Сидироглу-Дускос, под руководством которого был разработан CodePhage. — Даже если по сути программы разные, у них часто могут найтись компоненты со сходной функциональностью. При помощи CodePhage когда-нибудь можно будет создать такую гибридную систему, которая включает лучшие компоненты из всех доступных реализаций».

Чтобы запустить поиск ошибок, волшебному кодофагу требуется немного — набор входных данных, при которых изучаемая программа падает, и другой, при которых она не падает. Затем кодофаг автоматически запускает программу-донора с этими наборами данных, и записывает её работу. Например, если программа-реципиент умеет открывать файлы определённого формата, но на каком-то файле спотыкается — то CodePhage записывает всё, что делает с этим файлом «правильная» программа-донор, в частности, какие проверки она совершает. После чего кодофаг анализирует, в чём работа программы-донора отличается от работы программы-реципиента, и соответствующим образом исправляет реципиента.

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

«Технология заимствования кода у другой программы со схожей функциональностью и исправления с его помощью неправильно работающей программы — это, конечно, круто,- сказал, комментируя работу специалистов, Эмери Бергер, профессор информатики из другого Массачусетского университета, находящегося в городе Амхерст. — Честно говоря, я удивлён, что она вообще работает».

Комментарии (10)


  1. maaGames
    30.06.2015 19:58
    +7

    Было бы гораздо полезнее, если бы эта библиотека обнаруживала такие велосипедные фрагменты, которые уже реализованы в OpenSource библиотеках и предлагала программисту подключить эти библиотеки, вместо написания своей реализации. Если ребята из PVS-Studio меня внимательно читают, то берите это на заметку.


    1. BelBES
      01.07.2015 13:18
      +2

      если бы эта библиотека обнаруживала такие велосипедные фрагменты, которые уже реализованы в OpenSource библиотеках и предлагала программисту подключить эти библиотеки

      Не лучшая рекомендация, когда речь идет о продакшене.
      1) Во многих случаях, когда берешь зависимость от OpenSource библиотеки, то наследуешь не самую лояльную к комерческому использованию лицензию, что негативно сказывается на комерческом продвижении продукта.
      2) Если нужна какая-то одна фича, то зачастую проще её реализовать, чем тащить за собой монстра. Это как иногда встречаю в OpenSource решениях проекты, которые зависят от boost только из-за того, что авторы использовали парсер командной строки из него.
      3) «Велосипед» может быть заоптимизированной версией того, что лежит в OpenSource, тогда такая деоптимизация тоже приведет к снижению качества продукта.

      Вообще вопрос того, что лучше: велосипедостроение или использование кучи фреймворков, в общем случае не имеет однозначного ответа.


  1. Lux_In_Tenebris
    30.06.2015 21:25
    +8

    Звучит как-то слишком утопично.


    1. pehat
      30.06.2015 23:33

      А блог «Научная фантастика» Вас не смутил?


  1. Sava
    01.07.2015 04:09
    +3

    Начну издалека: в 1988 году в ЕС СВМ на REXX я написал командный файл, единственным входным параметром которого было имя программы. Он определял язык, запускал компилятор со всеми необходимыми ключами, для Паскаля было даже два компилятора, он автоматически определял необходимый, в случае ошибки при компиляции загружал редактор и ставил курсор на первую обнаруженную ошибку. По завершении редактирования цикл автоматически повторялся. После удачного компилирования программа запускалась на исполнение, опять же со всеми необходимыми ключами.
    Через несколько лет один из преподавателей написал «вирус», отыскавший и удаливший все копии моей программы, сказав, что «студенты обязаны это делать сами и вручную».
    … а продолжать не буду ;)


    1. andy_p
      01.07.2015 09:32
      +3

      >… а продолжать не буду ;)

      Страшно даже предположить, что было дальше.


    1. Oxyd
      01.07.2015 14:06

      Да, «Бобик»(REXX) хорош для таких вот вещей, за что и любим. У нас(osFree team) в системе сборки активно используется, да и в побочном продукте(Ramboot/2) тоже.


  1. ServPonomarev
    01.07.2015 10:04
    +2

    Другими словами, ребята сделали автоматическую крякалку, способную снять защиту с любой защищённой программы одним нажатием кнопки. Это есть очень хорошо!


    1. Sadler
      01.07.2015 10:58

      Только нужно иметь зарегистрированную версию программы, чтобы изменения переносить было откуда. Ну, и должно очень повезти в случае, если она делает всё автоматом. Если же правки выбираются руками и затрагивают, скажем, только jump-ы, то всё несколько проще. Я в студенческие годы что-то такое делал, только оно производило перебор вариантов условных переходов, чтобы добиться нужного поведения программы (определять нужное поведение можно разными способами, вплоть до распознавания образов).


  1. vlivyur
    01.07.2015 16:05

    Коденштейн какой-то.