🚨 Что нужно для судебной экспертизы программного обеспечения, чтобы подтвердить авторство модулей?

🚨 Что нужно для судебной экспертизы программного обеспечения, чтобы подтвердить авторство модулей?

📌 Введение

  • Для судебной экспертизы программного обеспечения, направленной на подтверждение авторства конкретных модулей или функций при работе нескольких разработчиков, требуется глубокий анализ исходного кода, систем контроля версий и сопутствующей проектной документации. Цель такой экспертизы — объективно установить вклад каждого участника в создание исследуемого программного продукта.
  • Определение авторства кода в условиях коллективной разработки является сложной, но выполнимой задачей. Экспертиза включает в себя изучение мельчайших деталей, которые позволяют выявить уникальные стилистические особенности кодирования, а также документально зафиксированные следы изменений. Важнейшим источником информации в таких случаях становятся системы контроля версий, такие как Git или SVN. Эти системы тщательно фиксируют каждое изменение в коде: кто, когда и что именно изменил, какие строки были добавлены, удалены или модифицированы, а также комментарии к коммитам. Анализ этих данных позволяет построить детальную хронологию разработки каждого файла, функции или модуля.
  • Настоящая консультация подготовлена экспертами нашей организации. В статье приведен подробный перечень необходимых материалов и методов исследования.

🟥 Глава 1. Какие методы использует эксперт для установления авторства

1.1. Анализ истории изменений в системе контроля версий (Git, SVN, Mercurial)

Это основной и самый надежный метод. Системы контроля версий фиксируют:

Автора коммита (commit author): Имя разработчика и его email (например, ivanov@company.com). Эти данные обычно привязаны к реальной личности разработчика (настроены в Git).

Дату и время коммита: Точное время, когда изменения были внесены в репозиторий.

Список измененных файлов и конкретные строки кода: Эксперт может посмотреть, какие строки были добавлены (зеленым), а какие удалены (красным) в каждом коммите.

Сообщение коммита (commit message): Разработчики часто указывают номер задачи (например, JIRA-123), краткое описание изменений. Это помогает связать код с конкретным заданием.

Слияние веток (merge commits): Показывает, когда и кто объединял изменения из разных веток разработки.

Для удобства эксперты используют графические интерфейсы (GitKraken, Sourcetree, Git Extensions) и консольные команды (git log, git blame, git diff).

1.2. Статистический анализ стиля кода (Stylometry)

У каждого разработчика есть уникальный «почерк» — стилистические особенности написания кода, которые трудно подделать сознательно. Эксперт анализирует:

Стиль отступов: Пробелы или табуляция, количество пробелов (2, 4).

Именование переменных и функций: camelCase (переменная), PascalCase (класс), snake_case, венгерская нотация, использование сокращений (cnt вместо count), предпочтение длинных или коротких имен.

Расположение фигурных скобок: На новой строке или на той же.

Комментарии: Использование однострочных (//) или многострочных (/* */), стиль комментариев (наличие/отсутствие пробелов после //).

Шаблоны проектирования (design patterns): Склонность к использованию определенных паттернов (Factory, Singleton, Observer и т.п.).

Любимые конструкции: Использование for vs while, тернарных операторов (a? b : c), switch vs if-else.

Чем больше образцов кода, написанного разработчиком (из других проектов), тем точнее «стилистический профиль» и тем выше достоверность вывода.

1.3. Анализ авторских меток (если есть)

Разработчики могут оставлять в коде (или комментариях) свои метки:

Имя пользователя в комментарии: // Автор: Иванов И.И., /* made by petrov */.

Уникальные идентификаторы (GUID), сгенерированные средой разработки (Visual Studio может подставлять имя пользователя в шаблоны).

Эксперт проверяет, нет ли в коде таких явных меток авторства.

1.4. Анализ проектной документации и систем управления задачами

Техническое задание (ТЗ), спецификации, архитектурные схемы: Распределение функций по модулям и ответственным исполнителям.

Системы управления задачами (Jira, Trello, YouTrack, Asana, Redmine): Задачи (issues, tasks) закреплены за конкретными разработчиками. Эксперт может проследить, какие задачи выполнял каждый разработчик, и сопоставить с коммитами.

Документы о распределении обязанностей: Приказы, распоряжения, должностные инструкции.

🟥 Глава 2. Какие материалы необходимо предоставить эксперту

КатегорияКонкретные материалыПочему это важно
1Исходный кодПолный исходный код исследуемого ПО (все файлы, все модули, все функции).Основной объект исследования.
2Репозиторий системы контроля версийДоступ к Git-репозиторию (GitHub, GitLab, Bitbucket, локальный сервер). Если доступ невозможен — полный дамп репозитория (папка.git). Для SVN — доступ к серверу или дамп репозитория.Анализ истории коммитов (кто, когда, что изменил). Основной источник информации об авторстве.
3Данные о разработчикахСписок разработчиков с их логинами, именами (ФИО), email-адресами. Период участия в проекте (дата начала и окончания). Образцы кода, написанные каждым разработчиком в других проектах (для стилометрического анализа).Сопоставление логина из коммита с реальной личностью. Создание стилистического профиля.
4Проектная документацияТехническое задание (ТЗ), спецификации функций, архитектурные схемы, дизайн-документы. Распределение обязанностей (кто за какой модуль отвечает).Какие функции кому были поручены. Косвенное подтверждение авторства.
5Данные из системы управления задачамиВыгрузка задач (issues) из Jira, Trello, Asana за период разработки (кто, когда, над какой задачей работал, статус задачи).Связывание коммитов с задачами (по номеру задачи в сообщении коммита).
6Договорная документацияДоговоры с разработчиками (трудовые договоры, договоры ГПХ, NDA), приложения. Акты выполненных работ.Установление факта, что разработчик имел доступ к коду.
7Технические данныеВерсии компиляторов, сред разработки (IDE), библиотек. Информация о системе сборки (Makefile, Dockerfile, CI/CD-конфиги).Воспроизведение окружения.

🟥 Глава 3. Какие вопросы можно ставить перед экспертом

Пример вопросаЧто хочет узнать заказчик
1Кто является автором исходного кода функции calculateTotalPrice() в файле order.py?Установить, кто конкретно (из разработчиков) написал эту функцию (спор о выплате бонуса, о лицензии на модуль).
2Кто вносил изменения в файл database.sql в период с 01.01.2025 по 01.03.2025 и каков объем этих изменений (в строках кода)?Определить вклад разработчика в доработку базы данных (при расчете премии или при разделе интеллектуальной собственности между бывшими партнерами).
3Имеются ли в исходном коде идентификаторы (комментарии, строковые константы), указывающие на конкретного разработчика (например, «Автор: Иванов»)?Поиск явных меток авторства (дополнительное доказательство).
4Каков процент исходного кода модуля «Платежный шлюз», написанный разработчиком «Петров А.А.»?Установить долю участия разработчика в создании модуля (для расчета вознаграждения).
5С помощью каких методов защиты (обфускация, удаление комментариев) разработчик пытался скрыть свое авторство?Выявление факта намеренного сокрытия следов.
6Соответствуют ли стилистические особенности кода, представленного в проекте, образцам кода, созданным разработчиком «Сидоров С.С.» в другом проекте?Косвенное установление авторства через уникальный стиль кодирования (используется, когда история коммитов недоступна или подделана).

🟥 Глава 4. Сложные случаи при установлении авторства

СитуацияКак эксперт решает проблему
История коммитов удалена (например, удалена папка.git)Эксперт анализирует стилистику кода (stylometry). Сравнивает вероятного разработчика с образцами его кода из других проектов.
Коммиты сделаны от имени «root» или «admin» (общая учетная запись)Эксперт анализирует время коммитов (например, разработчик работал с 9 до 18, а коммиты в 3 часа ночи — подозрительно). Сопоставляет с доступом к рабочей станции, данными VPN, логинами. Также анализирует стилистику.
Код был намеренно обфусцирован (запутан), имена переменных измененыЭксперт проводит деобфускацию (восстановление читаемого кода). Анализирует алгоритмическую логику (которая не меняется при обфускации).
Код был написан совместно (pair programming)Эксперт анализирует коммиты: если коммит сделан одним разработчиком, но содержит код, стилистически схожий с другим разработчиком — возможно совместное написание. Вывод: «вероятнее всего, код написан совместно, определить долю каждого не представляется возможным».
Код был сгенерирован ИИ (ChatGPT, Copilot)Эксперт анализирует паттерны, свидетельствующие о генерации ИИ (избыточные комментарии, однотипные конструкции). Эксперт делает вывод: «Вероятнее всего, данный код был сгенерирован искусственным интеллектом. Установить конкретного разработчика, давшего промпт, не представляется возможным».

🟥 Глава 5. Практические кейсы из экспертной деятельности

🔹 Кейс № 1. Спор о выплате бонуса за ключевой модуль шифрования

Обстоятельства: Компания «КриптоТех» разрабатывала систему шифрования. Два разработчика — А (Иванов) и Б (Петров) — участвовали в проекте. Компания выплатила бонус (500 000 руб.) обоим поровну. Иванов обратился в суд, утверждая, что модуль шифрования RSA (самый сложный) написан им единолично, и он имеет право на бонус в полном объеме. Петров утверждал, что вклад был равным.

Проведенная экспертиза: Эксперт проанализировал репозиторий Git (историю коммитов). Выявлено:

Файл rsa.py был создан Ивановым (первый коммит 15.01.2025).

Петров изменил файл 20.02.2025: добавил 5 строк кода (функция pkcs1_padding()). Это составляет менее 1% от общего объема файла.

В сообщениях коммитов Иванова указано: «Add RSA encryption (RSA-OAEP)», Петрова — «Fix padding error for short keys».

Иванов не использовал ветки (branch) для разработки, Петров работал в своей ветке.

Заключение эксперта: «Автором 99% исходного кода модуля RSA (файл rsa.py) является Иванов А.А. Петрову Б.Б. принадлежит менее 1% кода (исправление ошибки). Доля Иванова — 99%, доля Петрова — 1%».

Результат: Суд присудил Иванову 99% бонуса (495 000 руб.), Петрову — 5 000 руб.

🔹 Кейс № 2. Коммиты от имени «root»

Обстоятельства: В компании использовалась общая учетная запись root для разработки. При споре о разделе интеллектуальной собственности между бывшими партнерами невозможно определить, кто из них автор кода. Стороны заказали экспертизу.

Проведенная экспертиза: Эксперт проанализировал стилистику кода (stylometry). Обнаружил, что:

60% файлов имеют стиль отступов (2 пробела) и именование переменных в camelCase.

40% файлов — 4 пробела и snake_case.

Эксперт сравнил стиль кода из проекта с образцами кода, написанными партнерами в других проектах (были предоставлены). Обнаружил, что 60% файлов стилистически соответствуют партнеру А, 40% — партнеру Б.

Эксперт проанализировал время коммитов: коммиты партнера А (по стилю) приходились на рабочее время (9:00 — 18:00), партнера Б — на вечернее время (19:00 — 23:00) и выходные. Это дополнительный косвенный признак.

Заключение эксперта: «Высокая степень вероятности (более 85%), что 60% исходного кода (модули X, Y, Z) написаны партнером А, 40% (модули U, V, W) — партнером Б».

Результат: Суд принял экспертное заключение (вероятностный вывод) как основание для раздела прав.

🔹 Кейс № 3. Определение автора кода в системе контроля версий

Обстоятельства: Спор о лицензии на использование кода.

Проведенная экспертиза: Анализ коммитов и метаданных.

Результат: Подтвержден факт копирования.

🔹 Кейс № 4. Стилометрия для определения автора в системе контроля версий

Обстоятельства: История коммитов неполная.

Проведенная экспертиза: Сравнение стилей кода.

Результат: Выявлено 80% совпадение с образцами.

🔹 Кейс № 5. Код сгенерирован ChatGPT

Обстоятельства: Разработчик утверждал, что написал модуль сам, но экспертиза выявила, что код сгенерирован ИИ.

Проведенная экспертиза: Анализ паттернов ИИ (избыточные комментарии, однотипные конструкции).

Заключение эксперта: «Модуль сгенерирован искусственным интеллектом, не может быть объектом авторского права».

📌 Заключение

Для успешной судебной экспертизы авторства кода необходимо:

Предоставить полный репозиторий (Git, SVN) с историей коммитов (это самый важный источник, если он сохранился).

Список разработчиков (их логины и реальные ФИО).

Образцы кода (если требуется стилометрический анализ).

Проектную документацию и задачи из Jira (для косвенного подтверждения).

Четко сформулировать вопросы (какой модуль, какая функция, какой период).

Для получения индивидуальной консультации, уточнения списка необходимых материалов и предварительного расчета стоимости экспертизы, пожалуйста, свяжитесь с нами.

👉 Единственная ссылка: https://fse.ms/ 👈

Похожие статьи

Новые статьи

🧧 Экспертиза результатов благоустройства общественных пространств

📌 Введение Для судебной экспертизы программного обеспечения, направленной на подтверждение авторства конкретных модулей …

🟥 Экспертиза бетонных дорог

📌 Введение Для судебной экспертизы программного обеспечения, направленной на подтверждение авторства конкретных модулей …

🟥 Экспертиза результатов работ по благоустройству общественных пространств

📌 Введение Для судебной экспертизы программного обеспечения, направленной на подтверждение авторства конкретных модулей …

🆘 Медицинская экспертиза по материалу проверки

📌 Введение Для судебной экспертизы программного обеспечения, направленной на подтверждение авторства конкретных модулей …

🟥 Методология и инструментарий: что именно бухгалтерская экспертиза использует в своей работе

📌 Введение Для судебной экспертизы программного обеспечения, направленной на подтверждение авторства конкретных модулей …

Задавайте любые вопросы

9+13=