Не секрет, что многие разработчики программного обеспечения с открытым исходным кодом и не только, по разным причинам желают сохранить свою анонимность. Совсем недавно группа исследователей опубликовала работу, в которой описываются методы деанонимизации программиста по его стилю кодирования через анализ исходных кодов. Авторы утверждают, что им удалось достигнуть средней точности идентификации в 94%.
С помощью построения абстрактных синтаксических деревьев на основе разбора исходного текста, им удалось выделить устойчивые отличительные признаки при написании кода, которые трудно скрыть даже целенаправленно. Используя машинное обучение и набор эвристик, удалось добиться впечатляющей точности определения авторства среди выборки из 1600 программистов Google Code Jam.
![](https://habrastorage.org/r/w1560/files/f7e/9d8/6b3/f7e9d86b30db471b860f3fbe9b1df663.png)
В своей новой работе, исследователи продемонстрировали, что деанонимизация возможна и через анализ уже скомпилированных бинарных файлов в отсутствии исходных кодов (видео презентации доклада). В этот раз для исследования использовались исходные коды 600 участников Google Code Jam, которые были скомпилированы в исполняемые файлы, а потом подвергались разбору. Благодаря тому, что задания на соревнованиях были одинаковы для всех, разница файлов заключалась в значительной степени именно в стиле программирования, а не в алгоритме. Изначально, при сборке бинарных файлов отключались оптимизации компилятора и не применялась обфускация исходных кодов. Но, как утверждают авторы работы, некоторые отличительные признаки сохраняются и при применении этих способов сокрытия авторства, снижая точность деанонимизации до 65%.
![](https://habrastorage.org/r/w1560/files/b45/8d6/4b3/b458d64b3e804b42bd76ca8df401f94e.png)
С помощью дизассемблирования и декомпиляции, применяя все те же абстрактные синтаксические деревья, проводится анализ графа потока управления, выделяются отличительные признаки кодирования и производится обучение классификатора на основе векторов признаков.
![](https://habrastorage.org/r/w1560/files/d94/c8b/cd2/d94c8bcd213941e993cfc283410be83c.png)
![](https://habrastorage.org/r/w1560/files/d2f/5a5/101/d2f5a5101b5b4eaf91892e68129e36a3.png)
Что интересно, было обнаружено, что боле профессиональные программисты гораздо легче могут быть деанонимизированы по сравнении с менее опытными коллегами, т.к. имеют более выраженный и индивидуальный стиль программирования.
Авторы уверены, что с помощью подобных методов когда-нибудь будут выявлены настоящие авторы таких разработок как Bitcoin, TrueCrypt, а также разработчики известных вредоносных программ.
С помощью построения абстрактных синтаксических деревьев на основе разбора исходного текста, им удалось выделить устойчивые отличительные признаки при написании кода, которые трудно скрыть даже целенаправленно. Используя машинное обучение и набор эвристик, удалось добиться впечатляющей точности определения авторства среди выборки из 1600 программистов Google Code Jam.
![](https://habrastorage.org/files/f7e/9d8/6b3/f7e9d86b30db471b860f3fbe9b1df663.png)
В своей новой работе, исследователи продемонстрировали, что деанонимизация возможна и через анализ уже скомпилированных бинарных файлов в отсутствии исходных кодов (видео презентации доклада). В этот раз для исследования использовались исходные коды 600 участников Google Code Jam, которые были скомпилированы в исполняемые файлы, а потом подвергались разбору. Благодаря тому, что задания на соревнованиях были одинаковы для всех, разница файлов заключалась в значительной степени именно в стиле программирования, а не в алгоритме. Изначально, при сборке бинарных файлов отключались оптимизации компилятора и не применялась обфускация исходных кодов. Но, как утверждают авторы работы, некоторые отличительные признаки сохраняются и при применении этих способов сокрытия авторства, снижая точность деанонимизации до 65%.
![](https://habrastorage.org/files/b45/8d6/4b3/b458d64b3e804b42bd76ca8df401f94e.png)
С помощью дизассемблирования и декомпиляции, применяя все те же абстрактные синтаксические деревья, проводится анализ графа потока управления, выделяются отличительные признаки кодирования и производится обучение классификатора на основе векторов признаков.
![](https://habrastorage.org/files/d94/c8b/cd2/d94c8bcd213941e993cfc283410be83c.png)
![](https://habrastorage.org/files/d2f/5a5/101/d2f5a5101b5b4eaf91892e68129e36a3.png)
Что интересно, было обнаружено, что боле профессиональные программисты гораздо легче могут быть деанонимизированы по сравнении с менее опытными коллегами, т.к. имеют более выраженный и индивидуальный стиль программирования.
Авторы уверены, что с помощью подобных методов когда-нибудь будут выявлены настоящие авторы таких разработок как Bitcoin, TrueCrypt, а также разработчики известных вредоносных программ.