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