🟥 Техническая экспертиза компьютерных программ

🟥 Техническая экспертиза компьютерных программ

Здравствуйте, коллеги. Я инженер-программист с 15-летним стажем. Начинал как разработчик на C++ и Java, потом дорос до техлида, а потом переквалифицировался в эксперта по компьютерным программам. За моими плечами — сотни экспертиз: от маленьких скриптов до огромных корпоративных систем.

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

  1. Что такое техническая экспертиза компьютерных программ (моё определение)

Техническая экспертиза компьютерных программ — это комплексное исследование программного обеспечения, включающее:

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

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

  1. Какие задачи я решаю (мой хит-парад)

2.1. Проверка соответствия техническому заданию (ТЗ)

Суть: Заказчик дал ТЗ, разработчик написал программу. Заказчик недоволен. Я проверяю, реализованы ли все пункты ТЗ.

Как проверяю: Беру ТЗ, запускаю программу, проверяю каждый пункт. Если функция не работает или работает не так, как указано — фиксирую.

2.2. Поиск плагиата (копирования кода)

Суть: Истец утверждает, что ответчик скопировал его код. Я сравниваю исходные коды.

Как проверяю: Использую инструменты статического анализа (Moss, JPlag, ASTDiff). Сравниваю структуру (AST), строки кода, алгоритмы.

2.3. Выявление дефектов (багов)

Суть: Программа вылетает, зависает, теряет данные. Я ищу причины.

Как проверяю: Статический анализ (SonarQube) + динамический анализ (запуск в изолированной среде, стресс-тесты).

2.4. Анализ безопасности (пентест)

Суть: Программа имеет уязвимости (SQL-инъекции, XSS, переполнение буфера).

Как проверяю: Использую OWASP ZAP, Burp Suite, Metasploit. Проверяю, можно ли взломать программу.

2.5. Установление авторства (служебное произведение)

Суть: Бывший сотрудник утверждает, что он автор программы. Работодатель — что программа создана в рабочее время.

Как проверяю: Сравниваю стиль кодирования, проверяю метаданные Git (дата коммита, автор), ищу уникальные комментарии.

  1. Что я исследую (объекты)
ОбъектФорматИнструменты
Исходный код.java, .py, .cpp, .cs, .js, .phpVS Code, IntelliJ IDEA
Исполняемый код.exe, .dll, .jar, .apkIDA Pro, Ghidra, dnSpy
Техническое задание.doc, .pdfAdobe Reader
Логи работы.loggrep, awk, Notepad++
  1. Как я провожу экспертизу (пошаговый алгоритм)

Шаг 1. Изучаю документацию

Я не лезу в код, пока не прочитаю техническое задание (ТЗ). Что должно быть сделано? Какие функции? Какая производительность? Если ТЗ нет — экспертиза невозможна.

Шаг 2. Получаю исходный код

Если исходный код есть — хорошо. Если нет — я декомпилирую исполняемые файлы (IDA Pro, Ghidra).

Красный флаг: Если исходного кода нет, я предупреждаю заказчика: «Выводы будут неполными».

Шаг 3. Статический анализ (копаюсь в коде)

Я открываю код в IDE и смотрю:

  • Структуру — классы, функции, модули. Хорошо ли спроектировано?
  • Стиль — именование переменных, форматирование. Есть ли «плохой» код?
  • Алгоритмы — как реализованы ключевые функции. Оптимально ли?

Инструменты:

  • SonarQube — ищет «запахи кода» (code smells), баги, уязвимости.
  • PVS-Studio — ищет ошибки в C++ и C#.
  • Understand — строит графы зависимостей.

Шаг 4. Ищу плагиат (сравнительный анализ)

Если подозреваю плагиат, я сравниваю код истца и ответчика.

Инструменты:

  • Moss (Measure of Software Similarity) — от Стэнфорда. Выдаёт процент схожести.
  • JPlag — для Java, C#, Python.
  • ASTDiff — сравнивает абстрактные синтаксические деревья.

Мои пороги:

  • <10% — случайность.
  • 10–30% — возможно, заимствование отдельных фрагментов.
  • 30–60% — вероятный плагиат.
  • 60% — почти наверняка плагиат.

Шаг 5. Тестирую программу (динамический анализ)

Я запускаю программу в изолированной среде (виртуальная машина).

5.1. Функциональное тестирование

Проверяю, работает ли программа так, как указано в ТЗ.

Инструменты: JUnit (Java), PyTest (Python), Selenium (веб-тесты).

5.2. Нагрузочное тестирование

Проверяю, как программа ведёт себя под нагрузкой.

Инструменты: JMeter, LoadRunner, Gatling.

5.3. Тестирование безопасности (пентест)

Проверяю уязвимости:

  • SQL-инъекции (можно ли внедрить вредоносный код в запрос к БД?).
  • XSS (межсайтовый скриптинг).
  • Переполнение буфера.

Инструменты: OWASP ZAP, Burp Suite, Metasploit.

5.4. Анализ утечек памяти

Проверяю, не «жрёт» ли программа память.

Инструменты: Valgrind (Linux), Dr. Memory (Windows).

Шаг 6. Оформляю заключение

Моё заключение — это не просто «программа хорошая». Это структурированный документ:

Вводная часть:

  • Кто я (ФИО, образование, стаж).
  • Что я исследовал (программа, версия).
  • Какие материалы получил.

Исследовательская часть:

  • Результаты статического анализа (таблица багов, фото фрагментов кода).
  • Результаты сравнения (Moss, JPlag).
  • Результаты тестирования (скриншоты ошибок, графики производительности).

Выводы:

  • Соответствует ли программа ТЗ (да, нет, частично).
  • Является ли код производным (плагиат) (да, нет, частично).
  • Есть ли дефекты (критические, значительные, незначительные).
  1. Три кейса из моей практики

Кейс № 1. Плагиат в мобильном приложении (Android)

Ситуация: Компания А разработала мобильное приложение для доставки еды. Компания Б выпустила приложение с аналогичным функционалом через 3 месяца.

Мои действия:

  1. Получил исходный код компании А и APK компании Б.
  2. Декомпилировал APK в Java (JADX).
  3. Сравнил структуру пакетов (package names). У компании Б они были переименованы, но иерархия совпадала.
  4. Использовал Moss: совпадение строк — 58%.
  5. Обнаружил одинаковые строковые константы (URL сервера, API-ключи).

Вывод: Плагиат. Суд взыскал с компании Б 3 млн руб.

Кейс № 2. Несоответствие ТЗ при разработке CRM-системы

Ситуация: Заказчик заказал CRM-систему за 4 млн руб. Разработчик сдал продукт, но программа зависала и теряла данные.

Мои действия:

  1. Установил CRM на тестовый сервер (Ubuntu 20.04, PHP 7.4, MySQL 8.0).
  2. Провёл функциональное тестирование: при попытке создать счёт программа выдавала ошибку «500 Internal Server Error».
  3. Заглянул в логи сервера (/var/log/apache2/error.log) — нашёл неопределённую переменную $user_id.
  4. Нагрузочное тестирование (JMeter, 10 потоков, 1000 запросов) показало, что при 10 пользователях система падала.

Вывод: Не соответствует ТЗ. Суд взыскал 2,5 млн руб.

Кейс № 3. Спор о служебном произведении

Ситуация: Бывший сотрудник зарегистрировал авторские права на модуль шифрования. Компания утверждала, что модуль создан в рабочее время.

Мои действия:

  1. Запросил метаданные из Git. Дата первого коммита — 15.03.2023. Сотрудник уволился 20.04.2023.
  2. Сравнил стиль кодирования (именование переменных, форматирование, комментарии) с личными проектами сотрудника. Стиль отличался.
  3. В модуле были комментарии на русском, содержащие имена других сотрудников компании.

Вывод: Служебное произведение. Суд признал права за компанией.

  1. Оборудование и инструменты, которые я использую
ИнструментДля чегоЛицензия
SonarQubeСтатический анализ (баги, уязвимости)Open Source
PVS-StudioСтатический анализ C++/C#Коммерческая
MossДетектирование плагиатаБесплатно (Стэнфорд)
JPlagДетектирование плагиатаБесплатно
JMeterНагрузочное тестированиеOpen Source
OWASP ZAPАнализ безопасностиOpen Source
IDA ProДизассемблированиеКоммерческая
GhidraДизассемблированиеOpen Source (NSA)
ValgrindАнализ утечек памятиOpen Source
  1. Частые ошибки заказчиков (и как их избежать)

Ошибка № 1. Нет технического задания

Пример: «Сделайте удобную программу». Экспертиза невозможна.

Как избежать: Техническое задание — обязательно. Прописывайте каждый пункт.

Ошибка № 2. Нет исходного кода

Пример: Заказчик потерял исходный код. Придётся декомпилировать, что сложнее и дороже.

Как избежать: Храните исходный код в Git (GitHub, GitLab, Bitbucket).

Ошибка № 3. Нет системы контроля версий

Пример: Заказчик не может доказать, когда была создана программа.

Как избежать: Используйте Git. Он хранит историю изменений и авторство.

  1. Как я оформляю заключение

Вводная часть:

  • Кто я (ФИО, образование, стаж).
  • Что я исследовал.
  • Какие материалы получил.

Исследовательская часть:

  • Таблица: пункт ТЗ vs реализация.
  • Скриншоты ошибок.
  • Графики производительности.
  • Фрагменты кода.

Выводы:

  • Соответствует ТЗ? (да/нет/частично).
  • Есть ли плагиат? (да/нет/частично).
  • Есть ли критические дефекты? (да/нет).
  1. Рекомендации по выбору экспертной организации

На что смотреть:

  • Опыт. Эксперт должен знать разные языки программирования (Java, Python, C++, C#, JavaScript, PHP).
  • Инструменты. Должны быть лицензионные версии.
  • Судебная практика. Поищите упоминания в ГАС «Правосудие».

Где заказать: Я работаю в Центре Криминалистических Экспертиз. У нас есть опытные инженеры, лицензионные инструменты и аккредитация.

Заказать экспертизу можно на сайте https://krimexpert.ru.

  1. Заключение (инженерам на заметку)

Коллеги, запомните главное: техническая экспертиза компьютерных программ — это не бюрократия, а инженерия. Анализируйте код, тестируйте, ищите баги. Только цифры и факты.

Центр Криминалистических Экспертиз — ваш надёжный партнёр. Звоните, приезжайте, я покажу вам, как выглядит настоящая экспертиза программного обеспечения.

© Центр Криминалистических Экспертиз. При использовании материалов ссылка на источник обязательна.

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

Новые статьи

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

Здравствуйте, коллеги. Я инженер-программист с 15-летним стажем. Начинал как разработчик на C++ и Java, потом дорос до т…

🟩 Лабораторная точность: экспертные методы определения несущей способности конструкций на нагрузки

Здравствуйте, коллеги. Я инженер-программист с 15-летним стажем. Начинал как разработчик на C++ и Java, потом дорос до т…

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

Здравствуйте, коллеги. Я инженер-программист с 15-летним стажем. Начинал как разработчик на C++ и Java, потом дорос до т…

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

Здравствуйте, коллеги. Я инженер-программист с 15-летним стажем. Начинал как разработчик на C++ и Java, потом дорос до т…

🟩 Методологические основы судебной экспертизы оснований:  расчет несущей способности суглинков и грунтов

Здравствуйте, коллеги. Я инженер-программист с 15-летним стажем. Начинал как разработчик на C++ и Java, потом дорос до т…

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

5+13=