Экспертиза процесса разработки программного обеспечения

Судебная экспертиза исходного кода на C#

Исследуем программы на C# и платформе .NET — учётные системы, десктопные приложения, веб-сервисы: что сделано, чем закрыты сборки и собирается ли программа из переданного кода.

Ориентир по стоимости экспертизы
от 100 000 ₽
Ориентир по сроку экспертизы
от 10 рабочих дней
  • Судебные экспертизы
  • Внесудебные исследования
  • Рецензирование заключений
  • Консультации и справки
01 Проверим компетенцию

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

02 Поможем подготовиться

Уточним вопросы и перечень материалов — готовый комплект не обязателен.

03 Работаем с регионами

Принимаем задачи из России, Казахстана и Беларуси. До назначения часть материалов можно передать электронно; по назначенной экспертизе порядок определяет назначивший орган.

04 Сопровождаем результат

Разъясняем методику и выводы, отвечаем на вопросы суда в пределах компетенции эксперта.

О направлении

Подробно о задачах, объектах и методиках

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

Содержание страницы
  1. С какими спорами приходят по программам на C#
  2. Почему по .NET исходный текст почти всегда восстановим
  3. Обфускация: зачем её ставят и что она значит для спора
  4. Что сохранить, пока сборки и история на месте
  5. Сборка .NET повторяема — и это меняет доказывание
  6. Подпись сборки и строгое имя: что они доказывают
  7. Пакеты NuGet и условия их использования
  8. .NET Framework и современный .NET: спор о переносе
  9. Отказы, зависания и рост потребления памяти
  10. Где у решения на .NET прячется логика помимо кода
  11. Сравнение двух кодовых баз: почему по .NET это работает лучше
  12. Как датируют спорную версию
  13. Когда спор выходит за пределы C#
  14. Какие обстоятельства устанавливают по программе на C#
  15. Как проверяют соответствие заданию по коду и по работающей системе
  16. Что просят прислать по спору о системе на .NET
  17. Как передать материалы и не раскрыть доступы
  18. Как идёт работа: от приёмки материалов до выводов
  19. Как формулируют вопросы по программе на C#
  20. Форматы работы: от разбора до рецензии
  21. Из чего складываются стоимость и срок

В споре об учётной системе, настольной программе или веб-сервисе на C# обычно проверяют соответствие результата заданию и состав переданного. Многие сборки .NET содержат промежуточный код IL и метаданные типов. Декомпилятор может восстановить по ним читаемое представление классов и методов, но не первоначальный исходный текст. Состав публикации проверяют по файлам: ReadyToRun может сочетать IL и машинный код, а Native AOT, доступный начиная с .NET 7, создаёт платформенный машинный код без обычного набора IL для декомпиляции. Поэтому наличие машинного кода само по себе не определяет возможность восстановления. Экспертиза исходного кода на C# — специализированное направление экспертизы процесса разработки программного обеспечения. В зависимости от процедуры результатом будет заключение судебного эксперта или документ внесудебного исследования; доказательственное значение оценивает суд.

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

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

С какими спорами приходят по программам на C#

Обращаются, когда разногласия касаются проверяемых обстоятельств: состава переданных материалов, поведения программы при заданных условиях и зафиксированного хода работ. До исследования определяют спорные версию, площадку и период.

Типичные ситуации выглядят так:

  • подрядчик сдал учётную или складскую систему, настольную программу на WinForms или WPF либо веб-сервис на ASP.NET, а заказчик считает техническое задание невыполненным;
  • исходный код передали, но собрать из него работающую программу не получается: не хватает файлов проекта, пакетов или настроек;
  • переданные сборки обработаны обфускатором, и заказчик не может ни доработать систему, ни сменить исполнителя;
  • программа падает, зависает или со временем занимает всю доступную память, и стороны спорят, дефект это или условия эксплуатации;
  • заказчик утверждает, что подрядчик выдал за свою разработку чужой код или нарушил условия использования пакета;
  • спорят о переносе системы с прежней платформы .NET Framework на современную и о том, входил ли этот перенос в работы;
  • требуется установить, к какому периоду относится спорная версия и что изменилось между выпусками.

Если спор идёт об обмене с учётной системой предприятия, начните со страницы экспертизы 1С: там объекты и следы другие.

Почему по .NET исходный текст почти всегда восстановим

Если управляемая сборка содержит IL и метаданные, средства вроде ILSpy, dnSpy и dotPeek восстанавливают представление на C# с именами типов и членов. Это декомпиляция, а не возврат первоначального исходного текста: результат зависит от компилятора, оптимизации, обфускации и выбранного инструмента.

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

Ограничения описывают отдельно. Комментарии и авторские пояснения обычно отсутствуют, а исходные имена локальных переменных зависят от отладочных данных. Разбиение по файлам и некоторые конструкции языка восстанавливаются неполно или в преобразованном виде. PDB может содержать пути, номера строк и иные сведения, но его связь со сборкой проверяют. В заключении прямо указывают, исследовались ли переданные исходники или результат декомпиляции.

Обфускация: зачем её ставят и что она значит для спора

Обфускаторы, в том числе Dotfuscator и ConfuserEx, затрудняют анализ: переименовывают типы и методы, преобразуют строки и поток управления. Упаковщики и преобразователи могут дополнительно менять представление сборки. Эксперт устанавливает признаки применённой защиты, доступный объём анализа и ограничения методики; обход защиты допустим только при законном основании.

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

Если переданы только защищённые сборки без исходников, эксперт фиксирует их состав, признаки обработки и доступность программной логики. Соответствует ли такой комплект договору и нарушены ли обязательства, решает суд.

Что сохранить, пока сборки и история на месте

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

Разумный минимум выглядит так:

  • сохраните каталог установленной программы целиком, вместе с файлами настроек и вспомогательными сборками, документируя источник и порядок копирования;
  • если репозиторий доступен, сохраните его зеркальную копию со всеми доступными ссылками, ветками, метками и достижимой историей; чаще всего это Git;
  • заберите файлы отладочных данных, если они лежат рядом со сборками: в .NET их называют PDB; после проверки связи со сборкой они помогают сопоставлять исполняемый код с исходными файлами и строками;
  • сохраните записи сервера сборки за спорный период: когда, из чего и с какими настройками выпускались версии;
  • выгрузите базу данных, конфигурацию площадки и журналы веб-сервера или службы, где программа развёрнута;
  • для каждого архива посчитайте контрольную сумму и сохраните её отдельно. Она позволяет позднее проверить соответствие файла записанному значению, но сама не подтверждает дату и источник. В Windows используют PowerShell — Get-FileHash архив.zip -Algorithm SHA256 — или обычную командную строку — certutil -hashfile архив.zip SHA256; в Linux — sha256sum архив.zip, в macOS — shasum -a 256 архив.zip;
  • составьте служебную записку: какие архивы получены, с какого сервера, когда, под чьей учётной записью и кто присутствовал.

Фиксацию выполняет сотрудник с законным доступом к серверу и репозиторию. Если вы не уверены, с чего начать, позвоните по номеру 8 (800) 333-24-09: подскажем порядок применительно к вашей ситуации, это бесплатно.

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

Сборка .NET повторяема — и это меняет доказывание

SDK-проекты современного .NET обычно используют детерминированную компиляцию: при одинаковых учтённых входных данных компилятор способен выдать одинаковый результат. Это не гарантирует воспроизводимость всей публикации, куда входят пакеты, генераторы, ресурсы, упаковка, подпись и другие операции.

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

При наличии исходников фиксируют версию SDK и компилятора, граф пакетов, параметры проекта, генераторы и операции публикации, затем выполняют контрольные сборки. Сведения внутри сборок и PDB помогают проверить часть окружения, но не всегда позволяют восстановить его полностью.

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

У старых и нестандартных проектов детерминированность может быть отключена или нарушена внешними этапами. Пути к исходникам также могут попасть в PDB и исполняемый файл; для их нормализации существует PathMap. Повторные сборки в зафиксированных и намеренно изменённых условиях выявляют источники недетерминированности, но каждое различие всё равно оценивают по происхождению и значению.

По атрибутам сборок, runtimeconfig/deps-файлам и установленному окружению можно определить заявленную или совместимую платформу настолько точно, насколько позволяют материалы. Точная версия SDK в итоговых файлах присутствует не всегда.

Подпись сборки и строгое имя: что они доказывают

Строгое имя сборки и подпись файла решают разные задачи, и их доказательственные пределы различаются.

Строгое имя задаёт идентичность сборки через открытый ключ и подпись, но не удостоверяет личность издателя и не должно использоваться как самостоятельная проверка доверия. Проверяют саму подпись, токен ключа и параметры среды, поскольку режим проверки зависит от платформы. Отдельный механизм — подпись файла сертификатом издателя. Она связывает файл с субъектом сертификата и позволяет проверить целостность в рамках доверенной цепочки. Достоверное время подтверждают только при наличии проверяемой метки времени.

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

Пакеты NuGet и условия их использования

В проектах с PackageReference прямые ссылки находятся в файле проекта, а полный разрешённый граф — в создаваемом при восстановлении файле. Файл блокировки версий используется только при включённом режиме и фиксирует прямые и транзитивные зависимости. В старых проектах сведения могут находиться в packages.config. По одним сборкам обычно видны ссылки на внешние модули, но точный пакет NuGet и его версия устанавливаются не всегда.

Сторонние пакеты, изменённые компоненты и собственный код классифицируют раздельно. При оценке объёма указывают правила исключения и отдельно учитывают работу по интеграции и сопровождению зависимостей.

Лицензионный документ может использовать обозначения MIT, Apache, BSD, GPL, LGPL или коммерческие условия. Эксперт устанавливает пакет и его версию, подтверждённые представленными материалами, а также реквизиты лицензионного документа и способ подключения. Толкование условий и вывод о нарушении относятся к правовой оценке.

.NET Framework и современный .NET: спор о переносе

.NET Framework и современный .NET — разные платформы с различиями в совместимости и развёртывании. Поддержка .NET Framework зависит от конкретной версии и версии Windows, поэтому возраст платформы сам по себе не означает прекращения поддержки. В спорах обычно проверяют два случая.

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

Второй: перенос заказан, и стороны спорят о полноте. Эксперт сравнивает функции до и после переноса, проверяет оставшиеся компоненты прежней платформы и воспроизводит заявленные сценарии на обеих версиях. Различия связывают с конкретным кодом, библиотекой или условием среды.

Отказы, зависания и рост потребления памяти

Для анализа нужны журналы, трассировки или снимки состояния, относящиеся к спорной версии и сценарию.

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

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

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

Где у решения на .NET прячется логика помимо кода

Распространённая ошибка — ограничить исследование только кодом. Поведение корпоративного решения может задаваться и вне программы.

Смотреть нужно как минимум сюда:

  • файлы настроек приложения и веб-сервиса: строки подключения к базе, адреса внешних систем, включённые и выключенные возможности;
  • переменные окружения и параметры запуска службы: в типовой конфигурации Generic Host и ASP.NET Core они имеют приоритет над appsettings-файлами, но приложение может изменить порядок провайдеров;
  • саму базу данных: справочники, правила расчёта, права доступа, хранимые процедуры — на SQL Server значительная часть логики нередко живёт именно там;
  • настройки площадки: параметры веб-сервера IIS или службы Windows, расписания фоновых задач, учётные записи, от имени которых всё работает;
  • обмен с внешними системами: адреса, форматы, журналы обеих сторон;
  • файлы, загруженные пользователями, и шаблоны документов, если система их формирует.

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

Сравнение двух кодовых баз: почему по .NET это работает лучше

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

Если представлены исходные тексты, их сравнивают непосредственно. При сравнении управляемых сборок основой служат IL и метаданные, а декомпилированный текст используют как вспомогательное представление с указанием инструмента и его версии. Сравнивают состав типов и их членов, структуру и порядок операций внутри методов, тексты сообщений, схему данных.

Общие элементы классифицируют в тех же единицах, в которых ведут сравнение: библиотечный код, описания форм, модели данных, обёртки, стандартные конструкции и созданные компилятором элементы. Их не исключают автоматически: сначала устанавливают происхождение, наличие изменений и значение для конкретного совпадения. Версию компилятора и настройки учитывают, поскольку они порождают сходства и различия. Необъяснённые совпадения проверяют вручную. Подробнее — на странице экспертизы плагиата исходного кода.

Как датируют спорную версию

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

На что при этом опираются:

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

Вывод обычно формулируют как подтверждённый интервал существования или выпуска версии с указанием точности. Расхождения источников отражают в заключении. Спор о сроках разбирает экспертиза сроков и хронологии разработки.

Когда спор выходит за пределы C#

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

Границы обычно проводят так:

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

Какие обстоятельства устанавливают по программе на C#

Доступные исследования определяют поставленные вопросы, состав сборок, исходников, конфигурации и следов выполнения.

  • сохранены ли в спорных файлах IL и метаданные, какие иные представления доступны и как это ограничивает декомпиляцию;
  • может ли установленная программа быть получена из переданных исходников и какие соответствия и различия выявлены;
  • выполнено ли каждое проверяемое требование задания — с указанием объекта и способа, которым это проверялось;
  • какие пакеты каких версий использованы, чем это подтверждается и какими лицензионными документами сопровождаются пакеты;
  • какие признаки обфускации выявлены, какие элементы они затрагивают и как ограничивают исследование;
  • под какую платформу собрана программа, что можно установить о среде, подписи и времени;
  • какие технические причины отказа, зависания или роста потребления памяти подтверждаются воспроизведённым сценарием и представленными следами; достаточно ли материалов для установления технической причинной связи;
  • совпадения между двумя кодовыми базами с отдельной оценкой пакетного, шаблонного и сгенерированного кода;
  • чем спорная версия отличается от предыдущей и что изменилось между ними;
  • какой период существования или выпуска спорной версии подтверждается совокупностью источников;
  • какой объём изменений относится к спорному периоду или учётным записям, без вывода о личном авторстве и стоимости.

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

Как проверяют соответствие заданию по коду и по работающей системе

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

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

По каждому требованию указывают: реализовано, реализовано частично, не реализовано либо не может быть проверено на представленных объектах. Затем описывают объект, способ, условия и результат. Существенность недостатка и его влияние на приёмку оценивает суд. Если язык значения не имеет, проводят экспертизу соответствия работ техническому заданию.

Что просят прислать по спору о системе на .NET

Материалы корпоративной системы могут быть распределены между исходниками, сборками, базой и площадкой.

Программа: исходники, сборки, пакеты

Первая часть — исходные материалы и результаты сборки:

  • исходные тексты вместе с файлами проектов и решения; если их нет, работают по сборкам и прямо указывают это ограничение;
  • репозиторий со всеми доступными ссылками, ветками, метками и достижимой историей, если она велась;
  • сборки спорной версии и, если сохранились, предыдущих — по ним сравнивают, что изменилось между выпусками;
  • файлы отладочных данных, связанные со сборками: они облегчают символизацию и повышают точность анализа, но не устанавливают причину отказа автоматически;
  • ссылки на пакеты в файлах проектов, файл блокировки версий и, для развёрнутого приложения, список зависимостей, который создаётся при публикации;
  • точные версии и контрольные суммы SDK, MSBuild или Visual Studio, NuGet.config, lock/assets-файлы, пакеты, генераторы, анализаторы, сценарии и параметры restore/build/publish, ОС, архитектура и операции после сборки.

Площадка: где система живёт и что она о себе оставила

Вторая часть — то, без чего первая объясняет не всё:

  • файлы настроек приложения и площадки, включая параметры веб-сервера IIS или службы Windows;
  • выгрузка базы данных: справочники, правила, права доступа, хранимые процедуры;
  • журналы приложения и журнал событий Windows за спорный период, снимки памяти при отказах;
  • журналы обмена с внешними системами — с обеих сторон, если это возможно;
  • записи сервера сборки: когда, из чего и с какими параметрами выпускалась каждая версия;
  • техническое задание с приложениями, договор, акты, переписка сторон, задачи в системе учёта, документы на коммерческие компоненты.

Недостающие материалы определяют после первичного разбора: их набор зависит от вопросов, поэтому собирать всё без разбора не нужно.

Как передать материалы и не раскрыть доступы

Настройки, исходники и дампы могут содержать строки подключения, ключи сервисов, персональные данные и закрытые ключи подписи. Их выявляют до передачи и включают в модель доступа.

До первичного разговора материалы пересылать не нужно. Затем согласуют состав, защищённый канал и круг допущенных лиц; при приёмке фиксируют опись и контрольные суммы. Материалы с рабочими настройками не отправляют по обычной почте или через мессенджеры.

Неизменный оригинал сохраняют в защищённом контуре. Для передачи готовят документированную производную копию с маскированием действующих секретов и лишних персональных данных, если это не уничтожает исследуемый признак. Иначе исследование проводят на месте либо по отдельно согласованной защищённой процедуре. В судебной экспертизе состав и доступ определяют через назначивший орган; во внесудебной — основание и порядок обработки заранее согласуют с юристом.

Отзыв или замена учётных данных выполняются владельцем или уполномоченным им лицом без неоправданной задержки и документируются. Срок хранения, возврат или уничтожение переданных материалов и режим доступа фиксируют до начала работы.

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

Как идёт работа: от приёмки материалов до выводов

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

  1. Приёмка: записывают состав материалов и контрольные суммы, описывают происхождение каждой копии.
  2. Опознание объектов: что перед экспертом — исходные тексты, сборки или и то и другое; сохранено ли в сборках промежуточное представление; какая версия платформы, какие пакеты, есть ли обфускация и подпись.
  3. Восстановление окружения и контрольные сборки: фиксируют входы и инструменты, выявляют недетерминированные части и сопоставляют результат со спорными файлами.
  4. Разбор кода: по исходному тексту либо декомпилированному представлению, с указанием объекта, средства и его версии.
  5. Проверка требований — каждое своим способом, с записью условий, при которых получен результат.
  6. Проверка альтернативных объяснений: настройки, данные, внешние системы, действия третьих лиц.
  7. Формулирование выводов в пределах поставленных вопросов и перечисление ограничений.

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

Как формулируют вопросы по программе на C#

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

Происхождение кода, соответствие заданию, обфускацию и причину отказа лучше формулировать отдельными вопросами. Следует предусмотреть возможность вывода о недостаточности материалов. При судебной экспертизе круг вопросов определяет назначивший орган; эксперт отвечает в пределах специальных знаний и сообщает о неясности в установленном порядке. Помочь сформулировать вопросы можно до назначения; подробные перечни собраны на страницах экспертизы качества исходного кода и экспертизы плагиата исходного кода. По программам на C# используют, например, такие формулировки:

  1. Могут ли сборки … быть получены из исходных текстов архива с контрольной суммой SHA-256 … в воспроизведённой среде; какие совпадения, различия и ограничения установлены?
  2. Соответствует ли программа, представленная сборками …, требованиям пунктов … технического задания (приложение № … к договору от …)?
  3. Какие признаки обфускации или иных преобразований обнаружены в сборках …, какие элементы они затрагивают и как ограничивают исследование?
  4. Какие сторонние компоненты каких версий использованы в программе …, чем это подтверждается и какими лицензионными документами сопровождаются компоненты?
  5. Какие технические причины отказа программы … подтверждаются журналом … и сценарием, описанным в …; достаточно ли материалов для установления причинной связи?
  6. Имеются ли в сборках … и … совпадения программного кода; каково происхождение и значение общих пакетов, стандартных конструкций и созданного средой кода?

Форматы работы: от разбора до рецензии

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

До иска или параллельно с ним возможны внесудебное исследование и письменная консультация по отдельному вопросу. Судебную экспертизу назначает суд или орган расследования; материалы поступают через назначивший орган. Имеющееся заключение можно проверить рецензированием — подробнее на странице рецензии на заключение о процессе разработки. Рецензия сама не отменяет заключение, а помогает обосновать процессуальное ходатайство. Вопрос о вызове эксперта, дополнительной или повторной экспертизе решает назначивший орган. Заключение оценивается вместе с другими доказательствами.

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

Из чего складываются стоимость и срок

Расчёт складывается из трёх позиций. Первая — состояние объекта.

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

Дополнительно учитывают размер спорного контура, число проверяемых требований и вопросов, необходимость смежных специалистов. Ориентир для судебной экспертизы — от 100 000 ₽, ориентировочный срок — от 10 рабочих дней. Их уточняют после просмотра материалов; о выходе задачи за эти рамки сообщают до начала работы.

Вывод о невозможности ответить по представленным материалам также требует исследования: эксперт указывает, какого объекта или условия не хватило. Поэтому объём определяют после первичного разбора. Выезд, стенд с внешними системами и участие в заседании включают в смету отдельными позициями до начала работы.

Для расчёта достаточно описать спор, назвать систему и перечислить имеющиеся материалы: договор, задание, переписку, доступы. Позвоните по номеру 8 (800) 333-24-09 или оставьте заявку — мы определим направление исследования и сведения, необходимые для расчёта.

Проведение экспертизы по уголовному делу

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

Согласно постановлению Пленума Верховного Суда Российской Федерации от 21 декабря 2010 г. № 28 «О судебной экспертизе по уголовным делам», негосударственными судебно-экспертными учреждениями признаются некоммерческие организации, созданные на основании Гражданского кодекса Российской Федерации и Федерального закона «О некоммерческих организациях» и ведущие судебно-экспертную деятельность согласно своим уставам.

По сведениям организации, проведение судебных экспертиз предусмотрено её уставом (см. действующую редакцию в разделе «Документы организации»). Это само по себе не означает автоматического поручения любой экспертизы. Возможность поручить конкретное исследование определяет назначающий орган.

В случаях, перечисленных пунктом 5 постановления № 28, когда экспертизу по уголовному делу назначает суд, ему следует мотивировать в определении или постановлении поручение исследования учреждению либо конкретному лицу. Пункт 5 постановления № 28 связывает выбор негосударственного учреждения с невозможностью провести исследование в государственном учреждении, обслуживающем соответствующую территорию: например, из-за отсутствия нужного специалиста, материально-технической базы или специальных условий, либо с отводом компетентных государственных учреждений. Дополнительно учитываются квалификация эксперта, основания для отвода и действующий перечень экспертиз, выполняемых только государственными судебно-экспертными организациями.

Актуализировано
Форматы работы

Стоимость и сроки

Указан предварительный ориентир. Точный расчёт зависит от вопросов, объёма материалов, количества объектов и необходимости выезда. Срок рассчитываем после получения и проверки необходимого комплекта.

По договору

Внесудебное исследование

от 100 000 ₽
от 10 рабочих дней
точная стоимость будет определена после ознакомления с объектом исследования

Итог — письменный документ с результатами внесудебного исследования. Название документа, порядок его представления и оценка зависят от вида процесса.

Заказать исследование
Проверка готового заключения

Рецензирование

от 80 000 ₽
10 рабочих дней
точная стоимость будет определена после ознакомления с заключением и приложениями

Итог — письменная рецензия на готовое заключение. Она проверяет исходные данные, методы и выводы, но не отменяет заключение и не заменяет новое исследование объекта.

Передать заключение на проверку
Письменный ответ эксперта

Консультация и справка

от 20 000 ₽
2–3 рабочих дня
точная стоимость будет определена после ознакомления с объектом исследования

Поможет предварительно оценить вопрос, его исследуемость и ограничения будущей работы, а также спланировать дальнейшие действия.

Описать вопрос
Разбор задачи — без оплаты

Бесплатно определим вид исследования, проверим, нет ли явных пробелов в комплекте материалов, и назовём ориентировочные срок и стоимость. Если уже на этом этапе видно, что задачу решить нельзя, скажем об этом и не будем предлагать полное исследование. Изучение материалов по существу с письменным ответом — платная консультация; её стоимость согласуем до начала.

Получить организационный разбор
Организация исследования

Как строится работа над экспертизой

До начала исследования уточним предмет задачи, состав материалов и формат итогового документа.

  1. 01 Организационный разбор

    Проверяем компетенцию и сообщаем, можно ли провести исследование по поставленной задаче.

  2. 02 Вопросы и материалы

    Уточняем вопросы и сообщаем, каких документов или объектов не хватает.

  3. 03 Экспертное исследование

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

  4. 04 Заключение и пояснения

    Передаём результат и при необходимости разъясняем суду применённую методику и выводы.

Выполненные исследования

Практика по этому направлению

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

Все примеры по направлению
Опубликованный пример
Завершена в январе 2022 года

Экспертиза плагиата исходного кода программы на C# в Москве №101762

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

Арбитражный суд города МосквыДело №А40-8863/2021
Участники: АО "ВИСТ ГРУПП", ООО "В2-ГРУПП"
Открыть описание
В открытом доступе представлена часть выполненных исследований по разным объектам и судебным делам. Сведения, защищённые законом или условиями конфиденциальности, не раскрываются. Чтобы проверить возможность исследования по вашей ситуации, опишите задачу.

Документы организации

Ответы специалистов

Частые вопросы

Практические пояснения о назначении, материалах и использовании экспертного заключения.

Все вопросы по направлению
В каких спорах помогает экспертиза программы на C#?

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

Отдельный повод — проверка чужого заключения. Если экспертиза по делу уже проведена и её выводы вызывают сомнения, разбирают не программу, а сам документ: описание объектов, воспроизводимость проверок, обоснованность выводов.

Не годится экспертиза там, где вопрос правовой: приняты ли работы, существенны ли недостатки, кто отвечает за срыв сроков. По .NET к ним добавляется частая просьба, которую эксперт тоже не выполняет: сказать, стоила ли работа заплаченных денег. Он устанавливает факты о программе, а правовую оценку даёт суд.

Отдельная страница: В каких спорах помогает экспертиза программы на C#?
Что даёт декомпиляция сборки .NET и чего не даёт?

Даёт текст на C#, местами почти совпадающий с исходным. Программа на .NET обычно хранится не в машинном коде, а в промежуточном представлении, которое сохраняет имена классов, методов и полей и структуру типов; декомпиляторы вроде ILSpy, dnSpy и dotPeek выдают из него читаемый код. Но опубликовать программу можно и переведённой в машинный код, причём двумя способами: при первом промежуточное представление остаётся в файле рядом с машинным кодом и декомпиляция идёт как обычно, при втором его в файле нет — тогда она невозможна, как в C++. Что именно перед экспертом, устанавливают первым делом.

Чего восстановление не даёт: комментариев и авторских пояснений — их не сохраняется никогда; имён локальных переменных, если рядом нет файлов отладочных данных. Исходного разбиения по файлам в самой сборке тоже нет, но при сохранённых отладочных данных — отдельным файлом или внутри сборки — пути исходных файлов и принадлежность им методов восстанавливаются из них.

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

Отдельная страница: Что даёт декомпиляция сборки .NET и чего не даёт?
Сборки закрыты обфускатором — что это меняет для исследования?

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

Что действительно страдает — понимание назначения конкретных методов: имена заменены бессмысленными наборами знаков, и назначение приходится выводить из поведения. Такой вывод эксперт помечает как предположительный, а не выдаёт за установленный факт.

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

Отдельная страница: Сборки закрыты обфускатором — что это меняет для исследования?
Как проверяют, что программа собрана из переданного кода?

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

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

С оговоркой: у старых проектов на .NET Framework детерминированности может не быть, а пути к исходным текстам попадают в файл и в современной сборке — эксперт задаёт нужные настройки заранее. Если прогоны расходятся, сравнивают не байты, а содержание: состав типов и методов, строки, внешние связи. Совпадение — сильный довод, расхождение само по себе обратного не доказывает и требует проверенного объяснения; оценивает вывод суд.

Отдельная страница: Как проверяют, что программа собрана из переданного кода?
Что доказывает подпись сборки и строгое имя?

Механизмов два, и они разные. Строгое имя задумывалось как способ различать сборки с одинаковыми именами, а не как защита: подпись снимается и ставится заново другим ключом, а современные версии платформы её при запуске не проверяют. Вывод по нему возможен только сравнительный — отпечаток ключа в спорной сборке совпадает или нет с отпечатком в сборке известного происхождения. Цифровая подпись файла средствами операционной системы работает иначе: она проверяется системой и показывает издателя и то, что файл после подписания не менялся.

А вот даты в ней самой по себе нет: время подписания ставит по часам своего компьютера тот, кто подписывал. Проверяемым фактом дата становится только при отметке времени независимой службы, и эксперт смотрит, есть ли она и кто её выдал. Без отметки вывод о дате по подписи не делают.

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

Отдельная страница: Что доказывает подпись сборки и строгое имя?
Как устанавливают состав пакетов NuGet и их лицензии?

Читают то место, где список пакетов записан, и по .NET оно надёжнее, чем в большинстве языков. У современных проектов ссылки на пакеты хранятся прямо в файлах проекта, а при включённой блокировке версий — ещё и в отдельном файле, который закрепляет точный набор вместе с косвенными зависимостями. У старых проектов на .NET Framework их ищут в отдельном файле packages.config рядом с проектом.

Если исходников нет, состав определяют по самой программе: подключённые сборки видны в её служебных сведениях, а у многих пакетов узнаваемые имена и номера версий. Метод рабочий, но не исчерпывающий, и эксперт разделяет опознанное надёжно и предположительно.

Условия использования изложены в сопровождающем пакет лицензионном документе — MIT, Apache, BSD, GPL, LGPL и других; встречаются и коммерческие библиотеки. Эксперт устанавливает, какой пакет какой версии подключён и каким документом сопровождается, и приводит его текст; толкование условий — за судом.

Отдельная страница: Как устанавливают состав пакетов NuGet и их лицензии?
Спор о переносе с .NET Framework: что установит эксперт?

Это два разных спора, и различать их полезно до постановки вопросов. Первый — о выборе платформы: заказчик считает, что систему следовало делать на современной линейке .NET, а получил её на прежней .NET Framework. Эксперт устанавливает факт — под какую платформу и версию собрана программа; было ли требование к платформе в задании, определяют по документам, а без такого требования вывод о «неправильном выборе» становится оценочным — такую оценку даёт суд, а не эксперт.

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

Типичные находки во втором случае — фрагменты, работающие через прослойку совместимости, и функции, изменившие поведение из-за смены версий библиотек.

Отдельная страница: Спор о переносе с .NET Framework: что установит эксперт?
Программа на C# падает: можно ли установить причину?

Обычно да, и следов в .NET больше, чем в других средах. При необработанной ошибке среда выполнения записывает цепочку вызовов с именами методов, а при сохранённых файлах отладочных данных — и номера строк. Эти сведения попадают в журнал приложения, в журнал событий Windows или в файл снимка памяти, если его сохранение включено заранее.

Важная оговорка: место, где отказ проявился, не всегда совпадает с местом дефекта. Поэтому цепочка вызовов — отправная точка исследования, а не готовый ответ. Зависание исследуют иначе: пока программа не отвечает, снимают снимок её состояния и смотрят, чем заняты потоки — ждут ли ответа базы или внешней системы, встали ли на общей блокировке.

Причину эксперт устанавливает после проверки альтернативных объяснений: неверные входные данные, недоступность внешней системы, нехватка ресурсов, действия другой программы. Если журналов и снимков не сохранилось, он фиксирует это как ограничение. Дефект это или условия эксплуатации, оценивает суд: эксперт даёт для такого вывода техническое основание.

Отдельная страница: Программа на C# падает: можно ли установить причину?
Программа со временем занимает всю память — как это исследуют?

Классическая утечка в .NET встречается реже, потому что память освобождается автоматически. Обычно причина другая: объекты остаются связанными с долгоживущим обработчиком событий, кешем или статическим полем и потому не освобождаются, хотя больше не нужны.

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

Условия воспроизведения должны совпадать с реальными: объём и характер данных, длительность работы, нагрузка. Вывод сопровождают указанием, при каком сценарии дефект воспроизведён, и оценкой того, наступают ли последствия при заявленном в задании режиме эксплуатации. Дефект это или условия эксплуатации, решает по этим данным суд.

Отдельная страница: Программа со временем занимает всю память — как это исследуют?
Почему для исследования нужен не только код, но и настройки?

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

Смотрят как минимум: файлы настроек приложения и веб-сервиса — строки подключения, адреса внешних систем, включённые и выключенные возможности; саму базу данных, где на SQL Server нередко живут справочники, правила расчёта, права доступа и хранимые процедуры; настройки площадки — параметры веб-сервера IIS или службы Windows, расписания фоновых задач, учётные записи; журналы обмена с внешними системами.

Но этим не ограничивается: в современном .NET настройки перекрываются переменными окружения и параметрами запуска службы, поэтому их состав фиксируют отдельно, иначе один файл настроек картины не даёт. Суду важно видеть, при каких именно значениях получен результат. Одного каталога с программой обычно недостаточно, и объём материалов лучше согласовать заранее. Что именно нужно по вашему спору, скажем после первичного разбора.

Отдельная страница: Почему для исследования нужен не только код, но и настройки?
Как сравнивают две кодовые базы на C#?

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

Из сравнения сначала вычитают общее основание, причём в единицах того же представления: код пакетов, порождения среды разработки, стандартные конструкции языка и код, который дописывает сам компилятор, — развёрнутые асинхронные методы и перечислители, классы для замыканий, хранилища свойств. Последний слой совпадает у любых двух программ просто потому, что его создал один компилятор, и без его вычитания процент совпадения получается бессмысленно высоким.

Значимыми считают совпадения, которые общим основанием не объясняются, и каждое проверяют вручную, а не принимают по проценту сходства из инструмента. Само по себе совпадение направления заимствования не показывает: кто у кого, устанавливают по датам и истории, а вывод о нарушении прав делает суд. Развёрнуто задача разобрана на странице экспертизы плагиата исходного кода.

Отдельная страница: Как сравнивают две кодовые базы на C#?
Как датируют спорную версию программы на C#?

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

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

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

Отдельная страница: Как датируют спорную версию программы на C#?
На руках только работающая программа: что тогда?

Работать по такой программе можно, и по .NET заметно больше, чем по другим языкам. Установленная у вас копия — полноценный объект исследования: по ней устанавливают состав классов и методов, обращения к базе и внешним системам, подключённые пакеты, тексты сообщений и значительную часть логики.

Чего по ней не установить: содержания комментариев, исходных имён локальных переменных без файлов отладочных данных и того, какие решения принимал разработчик. Не работает и главный довод направления — контрольная сборка: собирать нечего, пока исходный текст не передан, и сравнение ведут по самой программе. Выводы о качестве исходного текста по восстановленному делают осторожно и с прямой оговоркой, что исследовался результат восстановления.

Если исходный текст остался у подрядчика, его получают через суд: по возбуждённому делу заявляют ходатайство об истребовании доказательства, называя, что именно требуется, какие обстоятельства этим подтверждаются, где оно находится и почему получить его самому нельзя. По .NET в такое ходатайство просят включить и файлы отладочных данных: без них восстановление грубее.

Отдельная страница: На руках только работающая программа: что тогда?
Из переданного кода программа не собирается: что это доказывает?

Невозможность собрать программу из переданного комплекта — самостоятельный технический факт, и устанавливается он воспроизводимо. Эксперт разворачивает окружение и фиксирует, на каком шаге сборка останавливается и чего именно не хватает: файлов проекта, пакетов, ключа подписи, файлов настроек, вспомогательных сборок.

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

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

Отдельная страница: Из переданного кода программа не собирается: что это доказывает?
Как проверяют требования, если программу не поднять на стенде?

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

Часть требований завязана на данные заказчика или на внешние сервисы, которые на стенде не поднять. Такие проверки выполняют на площадке заказчика, по согласованному сценарию и в согласованное время. Односторонней проверка быть не должна: по судебной экспертизе лица, участвующие в деле, вправе присутствовать при её производстве, а порядок работ на площадке определяет назначивший орган.

Если ни один способ не применим, эксперт указывает, какого объекта или каких условий не хватило, и оставляет вопрос без ответа. Это самостоятельный результат: он показывает суду, чего именно недостаёт. Если спор целиком о соответствии заданию и язык значения не имеет, задачу закрывает экспертиза соответствия работ техническому заданию.

Отдельная страница: Как проверяют требования, если программу не поднять на стенде?
Нужен ли эксперту доступ к работающей системе заказчика?

Обычно требуется, и это стоит предусмотреть заранее. Программа на C# редко живёт сама по себе: ей нужны база, внешние сервисы, настройки веб-сервера IIS или службы Windows, учётные записи, от имени которых всё работает.

Часть проверок удаётся выполнить на стенде, воспроизводящем эти условия. Но там, где требование завязано на данные заказчика или на внешние системы, проверку выполняют на его площадке: по согласованному сценарию и в согласованное время. Эксперт фиксирует условия и результат, а другая сторона по судебной экспертизе вправе при этом присутствовать. Возражение само по себе результат не отменяет — допустимость эксперимента оценивает суд, но проверка, поставленная без извещения другой стороны, эту оценку почти наверняка не выдержит.

После назначения судебной экспертизы доступ к площадке согласуют через суд, а не напрямую с одной из сторон.

Отдельная страница: Нужен ли эксперту доступ к работающей системе заказчика?
Сколько кода в проекте на C# написал подрядчик?

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

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

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

Отдельная страница: Сколько кода в проекте на C# написал подрядчик?
Какие материалы собрать по спору о системе на .NET?

Основной комплект: исходные тексты с файлами проекта и решения, хранилище исходных текстов с полной историей, собранные файлы спорной версии и, если есть, предыдущих, файлы отладочных данных, ссылки на пакеты и файл блокировки версий.

К этому добавляют развёртывание и следы работы: файлы настроек приложения и площадки, выгрузку базы данных, журналы приложения и системы, снимки памяти при отказах, записи сервера сборки, журналы обмена с внешними системами.

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

Отдельная страница: Какие материалы собрать по спору о системе на .NET?
Как передать материалы, если в настройках лежат пароли?

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

Порядок другой: материалы передают как есть, по защищённому каналу и ограниченному кругу лиц, а всё, что открывает доступ, после передачи меняют — пароль к базе, ключи сервисов, ключ подписи сборок, пароли служебных учётных записей. Прежние значения остаются в архиве как часть объекта, но перестают что-либо открывать.

Соглашение о конфиденциальности связывает эксперта, но не участников дела: материалы, поступившие в суд, доступны сторонам, и закрытое заседание этого не меняет — оно закрывает зал от посторонних, а не дело от оппонента. Если раскрытие для вас неприемлемо, обсудите с юристом другие пути: ограничить объём передаваемого вопросами и просить об исследовании на вашей территории, без вывоза носителей.

Отдельная страница: Как передать материалы, если в настройках лежат пароли?
В базе есть персональные данные клиентов — как быть с выгрузкой?

Объём выгрузки согласуют до отправки и по возможности ограничивают таблицами, относящимися к спору. Полная копия рабочей базы «на всякий случай» создаёт самостоятельный риск для вас как оператора и почти никогда не нужна для ответа на поставленные вопросы.

Основание передачи при этом разное, и различать их нужно до отправки. При судебной экспертизе материалы идут в рамках производства по делу, через назначивший орган. Вне судебного производства оно само по себе не возникает: письменное поручение обработки эксперту, даже с перечнем разрешённых действий и обязанностью соблюдать конфиденциальность, описывает порядок, но не заменяет основания. Что подойдёт — согласие субъектов, иное предусмотренное законом основание или передача обезличенных данных, — решают с юристом до выгрузки. Условия поручения согласуют до передачи, а не после неё.

Отдельно учитывают, что материалы, поступившие в суд, доступны сторонам: соглашение о конфиденциальности связывает эксперта, но не участников дела. Это тоже влияет на выбор объёма.

Отдельная страница: В базе есть персональные данные клиентов — как быть с выгрузкой?
Есть ли смысл заказывать экспертизу программы на C#?

Это и выясняют до заказа, а не после. Предварительный разбор бесплатный: по описанию спора и перечню того, что у вас есть, мы говорим, относится ли задача к нашей компетенции, какие обстоятельства по таким материалам устанавливаются, а какие нет, и чего не хватает. Бывает и ответ «по этим материалам не установить ничего» — его тоже скажем сразу. Присылать архивы для этого не нужно.

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

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

Отдельная страница: Есть ли смысл заказывать экспертизу программы на C#?
Как поставить вопрос эксперту о программе на C#?

Вопрос работает, когда в нём назван объект и назван проверяемый критерий. Объект здесь — конкретный архив с контрольной суммой либо конкретный набор собранных файлов с указанием происхождения; критерий — пункт технического задания или иной документ.

Полезно ставить вопросы раздельно: отдельно о том, является ли переданное исходным текстом спорной программы, отдельно о соответствии заданию, отдельно о применении обфускации, отдельно о причине отказа. И стоит предусмотреть ответ «на представленных материалах не проверяется».

Формулировки вроде «качественно ли выполнены работы» непроверяемы, а просить эксперта оценить достаточность доказательств нельзя — это функция суда. При судебной экспертизе окончательный круг вопросов определяет суд; помощь с формулировками возможна до назначения.

Отдельная страница: Как поставить вопрос эксперту о программе на C#?
Чем отличается судебная экспертиза сборок .NET от внесудебной?

Отличается не метод, а основание и порядок. Судебную экспертизу назначает своим актом суд или орган расследования, материалы поступают через них, а эксперт предупреждается об уголовной ответственности за заведомо ложное заключение. Внесудебное исследование выполняется по договору со стороной: материалы даёт заказчик, такого предупреждения нет.

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

Стадия обычно и диктует выбор. До иска берут внесудебное исследование, чтобы понять, есть ли предмет, и обосновать ходатайство о назначении экспертизы. Требования к описанию объектов и к воспроизводимости в обоих случаях одинаковы: заключение, написанное без них, в деле не работает.

Отдельная страница: Чем отличается судебная экспертиза сборок .NET от внесудебной?
Сколько идёт и во что обходится экспертиза программы на C#?

Ориентир по судебной экспертизе — от 100 000 ₽ и от 10 рабочих дней; точную сумму и срок называют после бесплатного разбора и закрепляют договором до начала работы. Разброс задают три обстоятельства, и первое — есть ли исходные тексты и закрыты ли сборки: с исходниками работа предсказуема, по чистым сборкам она дольше, а обфусцированные добавляют ещё один порядок.

Второе — сколько внешнего нужно поднять: программа на C# редко живёт сама по себе, и стенд с базой, внешними системами и настройками площадки готовится отдельно. Третье — нужен ли доступ к площадке заказчика: такие проверки согласуют по времени и порядку, и это отдельная строка расходов, как и участие специалиста в заседании.

Дальше обычное: объём спорного контура, число проверяемых требований, количество вопросов, необходимость смежных специалистов. Отдельно об исходе «на представленных материалах не проверяется»: это тоже результат работы, он оплачивается наравне с любым другим, а суду показывает, какого объекта или условия не хватило.

Отдельная страница: Сколько идёт и во что обходится экспертиза программы на C#?
Как оспорить заключение о программе на платформе .NET?

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

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

Отдельно смотрят, не вышел ли эксперт за пределы вопросов и компетенции: не дал ли правовой оценки лицензий, не распределил ли вину. Сама рецензия заключение не отменяет — она обосновывает ходатайство: о вызове эксперта для пояснений, о дополнительной экспертизе при неполноте или неясности, о повторной при сомнении в обоснованности заключения или при противоречиях в выводах. Заранее установленной силы у заключения нет, суд оценивает его наряду с другими доказательствами. Подробнее — на странице рецензии на заключение о процессе разработки.

Отдельная страница: Как оспорить заключение о программе на платформе .NET?
Обращение в организацию

Сначала опишите задачу и имеющиеся материалы

Для первого обращения достаточно описания. Небольшой доступный документ можно приложить, если вы вправе передать его через форму; конфиденциальный исходный код и доступы передают согласованным способом. Бесплатно уточним профиль и комплект, не анализируя код.

Описать задачу