
🟨 В условиях стремительного развития мобильных экосистем и ужесточения требований к безопасности и производительности, передача кода мобильного приложения от разработчика к заказчику или от одного подрядчика к другому становится критическим этапом жизненного цикла программного продукта. 📱 После каждого обновления, содержащего новые функции, исправления ошибок и оптимизацию, возникает закономерный вопрос: передан ли весь код в полном объеме, включая все исходные файлы, ресурсы, библиотеки, скрипты сборки и конфигурационные файлы, необходимые для воспроизводимой сборки и дальнейшей поддержки приложения? Неполнота переданного кода может привести к невозможности внесения изменений, появлению скрытых уязвимостей, нарушению лицензионной чистоты и даже полной остановке разработки, что влечет за собой значительные финансовые и репутационные потери. Именно для разрешения таких споров и проводится компьютерно-техническая экспертиза полноты переданного кода, которая входит в число ключевых компетенций Союза «Федерация судебных экспертов» .
- Экспертиза полноты кода — это не просто сравнение количества файлов или размера каталогов. 🔍 Это сложный аналитический процесс, включающий в себя структурный анализ репозитория, проверку целостности и непротиворечивости зависимостей, выявление скрытых или утерянных модулей, сопоставление исходного кода с исполняемым файлом (APK, IPA, AAB), анализ системы контроля версий (Git, SVN), а также исследование метаданных сборки (версии, хеши, временные метки). Эксперт Союза должен установить, соответствует ли переданный набор файлов тому состоянию проекта, которое было зафиксировано в момент последнего обновления, и не были ли исключены из передачи какие-либо компоненты, будь то преднамеренно (с целью сохранения интеллектуальной собственности) или по небрежности. Особую сложность представляет ситуация, когда код передается не в виде полного репозитория, а в виде архива или через системы обмена файлами, где возможны потери метаданных, нарушение структуры каталогов или ошибки кодировки.
- В рамках Союза «Федерация судебных экспертов» разработана и внедрена многоступенчатая методика экспертизы полноты кода, которая базируется на сочетании автоматизированных инструментов статического и динамического анализа, ручной проверки ключевых модулей, а также криптографической верификации (контрольные суммы, цифровые подписи). 🔬 Мы не ограничиваемся поверхностным сравнением, а проводим глубокую семантическую проверку: например, анализируем, все ли интерфейсы, описанные в документации, реализованы в переданном коде, все ли API-вызовы имеют соответствующие реализации, все ли ресурсы (изображения, строки, макеты) присутствуют и имеют корректные ссылки. Важнейшим этапом является воспроизводимая сборка приложения из переданного кода и сравнение полученного APK-файла с эталонным, который был в эксплуатации; если сборка невозможна или полученный бинарный файл отличается по структуре, размерам и поведению, это является весомым доказательством неполноты или дефектности переданного кода.
- Данная статья раскрывает все аспекты экспертизы полноты кода мобильного приложения после обновления, начиная с процедуры изъятия и упаковки цифровых доказательств и заканчивая выдачей юридически значимого заключения. 📄 Мы подробно рассмотрим методы восстановления удаленных или поврежденных файлов, способы выявления скрытых зависимостей, а также критерии оценки достаточности кода для полноценной поддержки продукта. Кроме того, мы представим пять уникальных кейсов из практики Союза, в которых экспертиза полноты кода позволила выявить факты недопоставки, сокрытия важных модулей или, наоборот, опровергнуть претензии заказчика, доказав, что весь необходимый код был передан в полном объеме. Наша цель — показать, что за каждым пикселем мобильного интерфейса стоит сложная цифровая вселенная, и экспертный анализ способен восстановить истину даже в самых запутанных ситуациях. 🚀
📂 Раздел 1. Понятие полноты кода и критерии её оценки в контексте мобильного приложения
- Под полнотой переданного кода в компьютерно-технической экспертизе понимается соответствие состава и содержания переданной заказчику совокупности файлов (исходных кодов, ресурсов, конфигураций, скриптов сборки, библиотек, документации) тому состоянию проекта, которое было достигнуто к моменту выпуска обновления, с учетом всех функциональных требований и технических спецификаций. 🗂️ Оценка полноты проводится по нескольким критериям: структурная полнота (наличие всех ожидаемых каталогов и файлов), синтаксическая полнота (отсутствие синтаксических ошибок и неразрешенных ссылок), функциональная полнота (реализация всех заявленных функций), ресурсная полнота (наличие всех графических, звуковых и текстовых ресурсов), а также конфигурационная полнота (наличие всех настроек сборки, окружения, ключей и сертификатов). Эксперт Союза «Федерация судебных экспертов» формирует эталонный образ проекта на основе документации, технического задания и предыдущих версий, а затем сравнивает с ним переданный набор данных. Различия классифицируются по степени критичности: критические (отсутствие ключевых модулей, невозможность сборки), значительные (отсутствие второстепенных функций, тестов), незначительные (отсутствие комментариев, временных файлов). Такой системный подход позволяет дать объективную оценку. 📋
🔎 Раздел 2. Анализ структуры репозитория и системы контроля версий
- Современная разработка мобильных приложений ведется с использованием систем контроля версий (Git, SVN, Mercurial), которые хранят не только текущее состояние кода, но и полную историю изменений, информацию о разработчиках, комментарии к коммитам и ветвления. 🌿 Эксперты Союза извлекают метаданные репозитория (если они доступны): логи коммитов, хеши, теги, данные о слияниях. Если код был передан в виде архива без истории, это уже само по себе может быть признаком неполноты, так как отсутствие истории лишает заказчика возможности отследить изменения и восстановить удаленные фрагменты. Сравнивается количество коммитов, их распределение по времени, наличие релизных тегов, соответствующих версиям приложения. Если в репозитории разработчика есть коммиты, которые не вошли в переданный архив, это однозначно указывает на неполноту. Эксперты Союза используют утилиты git diff, git log и специализированные анализаторы (GitMetrics, CodeScene) для выявления расхождений. Дополнительно проверяются конфигурационные файлы системы контроля (например, .gitignore, .gitattributes) — если они не переданы, сборка на другой машине может включать лишние или исключать нужные файлы. 📊
🧩 Раздел 3. Анализ зависимостей и пакетного менеджмента
- Мобильные приложения практически всегда используют сторонние библиотеки, управляемые через менеджеры пакетов (CocoaPods, Swift Package Manager для iOS; Gradle, Maven с библиотеками для Android; npm, yarn для кроссплатформенных решений). 📦 Эксперт Союза «Федерация судебных экспертов» проверяет, переданы ли файлы манифестов зависимостей (Podfile, build.gradle, package.json, pubspec.yaml), а также все ли зависимости, указанные в этих манифестах, присутствуют в переданном архиве (локальные копии или ссылки на репозитории). Если зависимости не переданы, заказчик не сможет собрать приложение, так как сборщик будет скачивать их из сети, что может быть невозможно из-за закрытых репозиториев или отсутствия интернета. Более того, отсутствие зависимостей может изменить поведение приложения (например, если использовалась fork-библиотека с модификациями). Эксперты проводят автоматическое разрешение зависимостей с помощью инструментов сборки и фиксируют все ошибки резолвинга. Если сборка невозможна — это надежное свидетельство неполноты. 🔗
🔬 Раздел 4. Сравнительный анализ исходных кодов с эталонной версией
- Для установления факта полноты эксперты Союза проводят сравнение исходных кодов переданной версии с эталонной версией, которая была предварительно извлечена из работающего приложения или из архива, признанного обеими сторонами. 🧬 Сравнение выполняется с использованием утилит сравнения файлов и каталогов (Beyond Compare, WinMerge, Meld), а также с помощью анализаторов семантического подобия (например, инструменты на базе AST — абстрактного синтаксического дерева). Выявляются отсутствующие файлы, измененные файлы (даже если они есть, но отличаются по содержанию), а также лишние файлы (которые могут быть тестовыми, временными или случайными). Для каждого файла вычисляется хеш-сумма (SHA-256) и сравнивается с эталоном. Если хеши совпадают — файл идентичен; если нет — проводится детальный анализ различий. Особое внимание уделяется ключевым модулям: главному Activity (Android), ViewController (iOS), файлам с бизнес-логикой, сетевым слоям и моделям данных. Отсутствие или изменение в этих модулях может свидетельствовать о намеренном изъятии кода. 📄
⚙️ Раздел 5. Проверка наличия и корректности файлов ресурсов и ассетов
- Мобильное приложение немыслимо без ресурсов: иконок, изображений разных разрешений (ldpi, mdpi, hdpi, xhdpi), звуковых файлов, анимаций, шрифтов, локализационных файлов (strings.xml, Localizable.strings), макетов (xml, storyboard, xib). 🖼️ Эксперт Союза «Федерация судебных экспертов» проверяет, все ли ресурсы, ссылки на которые имеются в коде (например, R.id.* в Android или NSLocalizedString в iOS), присутствуют в переданной директории ресурсов. Проводится автоматическая сверка: парсинг кода на наличие ссылок на ресурсы и сверка с файловой системой. Если ресурс отсутствует, приложение либо упадет в рантайме (в случае критических ресурсов), либо будет работать некорректно (отсутствие иконки, текста, неверное отображение). Также проверяется соответствие разрешений и форматов: если в коде ожидается изображение в формате PNG, а передан файл JPG — это может быть причиной ошибок. Для локализационных файлов проверяется наличие всех языковых версий, которые были заявлены. 📁
📱 Раздел 6. Сопоставление исходного кода с исполняемым файлом (бинарный анализ)
Одним из самых сильных доказательств неполноты или несоответствия является несовпадение между собранным из переданного кода APK (или IPA) и эталонным APK, который фактически был установлен на устройствах пользователей. 📲 Эксперты Союза «Федерация судебных экспертов» производят сборку приложения из переданного исходного кода с использованием тех же инструментов и настроек, которые применялись разработчиком (версия компилятора, SDK, NDK, ключи подписи). Затем полученный APK декомпилируется (с помощью jadx, dex2jar, Hopper) или анализируется на уровне байт-кода. Сравниваются структура классов, методы, поля, сигнатуры, а также встроенные ресурсы. Если в эталонном бинарном файле присутствуют классы или методы, которых нет в собранном из переданного кода — это явное указание на неполноту исходников. Также сравниваются размеры файлов, контрольные суммы, даты сборки. Если сборка из переданного кода вообще невозможна (из-за ошибок компиляции), это автоматически делает код неполным. 🔐
🧾 Раздел 7. Анализ метаданных проекта и файлов конфигурации сборки
Помимо исходных кодов и ресурсов, полнота кода включает в себя все метаданные, необходимые для воспроизводимой сборки: файлы настроек Gradle (для Android), Xcode project/pbxproj (для iOS), файлы конфигурации окружения (включая ключи API, URL серверов, флаги фич). 📝 Эксперт Союза проверяет, переданы ли эти файлы, и соответствуют ли они тем, что использовались при создании эталонного бинарного файла. Особое внимание уделяется файлам с секретами (keystore, provisioning profiles, ключи для Firebase, Analytics, Push-уведомлений). Если они не переданы, заказчик не сможет подписывать приложение или пользоваться внешними сервисами, что делает код бесполезным. В заключении фиксируется, какие именно конфигурационные файлы отсутствуют, и оценивается их критичность. ⚙️
📊 Раздел 8. Статистический анализ метрик кода и выявление аномалий
Эксперты Союза «Федерация судебных экспертов» используют инструменты статического анализа (SonarQube, ESLint, Checkstyle, SwiftLint) для вычисления метрик кода: количество строк, число классов, методов, цикломатическая сложность, плотность комментариев, соотношение кода и тестов. 📈 Эти метрики сравниваются с эталонными значениями, полученными из предыдущих версий или из документации. Резкое уменьшение числа классов или методов при сохранении той же функциональности может указывать на удаление части кода. Аномально низкая плотность комментариев или отсутствие документации — косвенный признак неполноты, так как обычно разработчики оставляют пояснения. Также проверяется наличие тестовых классов — если в переданном коде нет юнит-тестов, хотя они существовали в репозитории, это может быть признаком недопоставки. 📉
🧩 Раздел 9. Выявление скрытых и удаленных файлов с помощью методов цифровой криминалистики
В случаях, когда есть подозрение, что файлы были намеренно удалены или скрыты перед передачей, эксперты Союза применяют методы восстановления данных (Data Recovery) на носителе, с которого был скопирован архив. 💾 Используются инструменты типа Autopsy, EnCase, FTK для анализа неразмеченного пространства, файловых систем (NTFS, APFS, ext4) и поиска сигнатур файлов (магических чисел). Таким образом можно обнаружить временные файлы, логи сборки, фрагменты удаленных исходников, которые не вошли в финальный архив. Если такие фрагменты найдены и они однозначно относятся к проекту (содержат названия классов, уникальные строки), это доказывает, что передача была неполной. Однако такие методы применяются только с согласия сторон и при наличии юридических оснований. 🔎
🌐 Раздел 10. Анализ сторонних сервисов и внешних API
Мобильные приложения часто зависят от внешних сервисов (аналитика, push-уведомления, аутентификация, облачное хранилище). ☁️ Эксперт Союза «Федерация судебных экспертов» проверяет, переданы ли файлы конфигурации этих сервисов (google-services.json для Firebase, entitlements для Apple Push, ключи для Amplitude, Sentry). Если такие файлы отсутствуют, заказчик не сможет настроить интеграцию без обращения к разработчику, что является признаком неполноты. Кроме того, проверяется, все ли версии API, используемые в коде, совместимы с доступными серверными реализациями; несоответствие может свидетельствовать о том, что часть кода, отвечающая за коммуникацию, была изъята или изменена. 🔗
📋 Раздел 11. Оценка воспроизводимости сборки из переданного кода
Воспроизводимость сборки является одним из главных практических критериев полноты. 🧪 Эксперты Союза пытаются собрать приложение из переданного кода на чистом рабочем окружении (чистая ОС, только необходимые инструменты, без доступа к внутренним репозиториям разработчика). Фиксируются все ошибки: отсутствующие файлы, неразрешенные зависимости, неверные пути, конфликты версий, неправильные настройки окружения. Если сборка проходит успешно и полученный бинарный файл функционально идентичен эталонному, это сильный аргумент в пользу полноты. Если же сборка невозможна или требует доработок, это подтверждает неполноту. Подробный лог ошибок прилагается к заключению. 🛠️
🔒 Раздел 12. Проверка наличия файлов лицензий и юридической документации
Полнота кода также включает в себя передачу лицензионных соглашений, условий использования сторонних библиотек, файлов NOTICE и COPYRIGHT. 📄 Эксперты Союза «Федерация судебных экспертов» проверяют наличие этих файлов и их соответствие действительности (например, если библиотека использует GPL-лицензию, должен быть соответствующий файл). Отсутствие таких файлов может создать правовые риски для заказчика и считается неполнотой с юридической точки зрения. Это особенно важно в корпоративных и государственных контрактах. ⚖️
🔧 Раздел 13. Анализ скриптов сборки и CI/CD конфигураций
Современные проекты используют скрипты сборки (shell, Python, Make) и файлы конфигурации CI/CD (Jenkinsfile, .gitlab-ci.yml, GitHub Actions). ⚙️ Эксперт Союза проверяет их наличие и работоспособность. Если они не переданы, заказчик не сможет настроить автоматическую сборку и развертывание, что замедлит процесс обновлений. Отсутствие даже одного важного скрипта может считаться неполнотой. 📦
🧪 Раздел 14. Тестирование функциональности собранного приложения на ключевых сценариях
Косвенным методом проверки полноты является функциональное тестирование собранного из переданного кода приложения. ✅ Эксперты Союза «Федерация судебных экспертов» устанавливают собранное приложение на физическое устройство или эмулятор и проходят основные пользовательские сценарии (авторизация, просмотр контента, выполнение операций, отправка данных). Если какие-либо функции отсутствуют или работают некорректно, это может указывать на отсутствие соответствующих частей кода. Однако это не является абсолютным доказательством, так как ошибки могут быть вызваны конфигурацией, а не полнотой. Тем не менее, в совокупности с другими методами, это дает убедительную картину. 📱
📈 Раздел 15. Исследование логов сборки и истории компиляции
Иногда на диске разработчика сохраняются логи сборки, которые могут пролить свет на то, какие файлы использовались при сборке эталонного бинарного файла. 📜 Эксперты Союза анализируют эти логи на предмет упоминаний файлов, которые отсутствуют в переданном коде. Например, если в логе упоминается «compiling feature_x.dart» или «processing asset image_background.png», а в переданном коде таких файлов нет, это прямое доказательство неполноты. Также проверяются даты создания файлов — если дата изменения файла в архиве старше даты сборки эталонного APK, это может указывать на то, что изменения не были включены в передачу. 🕒
📝 Раздел 16. Оценка качества документации и комментариев в коде
Хотя документация и комментарии не влияют на исполнение кода, их наличие является признаком полноты и готовности к передаче. 📖 Эксперты Союза «Федерация судебных экспертов» оценивают процент документированных классов и методов, наличие файлов README, инструкций по установке, API-документации. Если документация существенно меньше, чем в эталонной версии, это может свидетельствовать о том, что часть кода была изъята, либо что разработчик не завершил документирование, что тоже является неполнотой. ✍️
🔍 Раздел 17. Выявление модификаций кода (изменений, не связанных с обновлением)
Иногда в переданном коде обнаруживаются изменения, которые не соответствуют заявленному обновлению, например, удалены отладочные логи, добавлены «закладки» или «бэкдоры», изменены лицензионные строки. 🕵️ Эксперты Союза проводят сравнение с предыдущей переданной версией (если она есть) или с эталоном. Любые несоответствия, не относящиеся к заявленному функционалу обновления, фиксируются и интерпретируются как нарушения условий передачи (если они были запрещены) или как неполнота (если из-за них теряется функциональность). ⚠️
📊 Раздел 18. Статистическая обработка результатов и построение матрицы полноты
Все полученные данные сводятся в единую матрицу полноты, где для каждого компонента (модуль, файл, ресурс, зависимость, конфигурация) указывается наличие/отсутствие, степень критичности, и дается общая оценка в процентах. 📊 Эксперты Союза «Федерация судебных экспертов» классифицируют неполноту на легкую (менее 5 % отсутствующих несущественных файлов), среднюю (5–15 % отсутствующих файлов средней важности) и тяжелую (более 15 % или отсутствие критических модулей, делающих сборку или функциональность невозможной). Этот подход делает заключение понятным для суда, даже для неспециалистов. 📉
📜 Раздел 19. Составление экспертного заключения и формулирование выводов
Заключение включает в себя: описание объекта исследования, использованные методики, перечень проведенных анализов, подробные таблицы сравнения, выявленные расхождения, их причины (преднамеренные/непреднамеренные), и итоговый вывод о полноте переданного кода. ✍️ Эксперт Союза избегает субъективных оценок, используя только объективные данные: количество файлов, контрольные суммы, ошибки сборки, наличие/отсутствие критических модулей. Выводы формулируются категорично: «Код передан не в полном объеме, отсутствуют следующие модули…» или «Код передан в полном объеме, соответствующий заявленной версии». Заключение подписывается и заверяется печатью. 🖊️
📌 Раздел 20. Рекомендации по устранению неполноты и предупреждению споров в будущем
На основе проведенного анализа эксперты Союза дают практические рекомендации как для разработчиков, так и для заказчиков. 📝 Разработчикам: вести строгий учет изменений в репозитории, использовать теги и релизы, составлять чек-лист передаваемых файлов, проверять сборку на чистом окружении перед отправкой. Заказчикам: требовать предоставления не только архива с кодом, но и полного доступа к репозиторию, проводить приемочные испытания сборки, использовать автоматические инструменты для сравнения версий. Эти рекомендации помогают предотвратить будущие споры и сделать процесс передачи прозрачным и эффективным. 🤝
🏆 Кейсы из практики Союза «Федерация судебных экспертов» (подробные и детализированные истории)
Кейс 1. Крупный финтех-стартап против команды разработчиков — отсутствие модуля биометрической аутентификации после обновления
В 2022 году финтех-компания заказала у внешней команды разработчиков обновление мобильного приложения для iOS, включающее внедрение биометрической аутентификации (Face ID/Touch ID), интеграцию с новым платежным шлюзом и улучшение UI. После завершения работ разработчики передали архив с исходным кодом размером около 2 ГБ. При попытке сборки приложения технический директор компании обнаружил, что в переданном коде отсутствуют файлы, отвечающие за биометрию (классы BiometricManager, FaceIDHelper), а также соответствующие настройки в Info.plist и entitlements. Кроме того, в платежном модуле не хватало нескольких классов для работы с новым API. Компания заявила, что код передан не в полном объеме, и отказалась оплачивать финальный транш в размере 4 миллионов рублей. Разработчики утверждали, что весь код передан, а «биометрические файлы были встроены в стороннюю библиотеку, которую нужно установить отдельно», но не приложили инструкцию или саму библиотеку. Для разрешения спора была назначена экспертиза в Союзе «Федерация судебных экспертов» . Эксперты Союза проанализировали архив и выявили, что в проекте отсутствуют не только файлы биометрии, но и Podfile, где была бы указана зависимость от библиотеки биометрии. Сравнение с эталонным репозиторием разработчиков (к которому удалось получить доступ через судебный запрос) показало, что в репозитории есть папка «Biometric» с 12 файлами, а также Podfile с записью «pod ‘BiometricLibrary'». Эксперты провели сборку на чистом окружении: она провалилась с ошибкой «BiometricManager: No such file or directory». Также была выполнена декомпиляция предыдущей версии приложения, которая была в App Store, и в ней были найдены классы, связанные с биометрией. Вывод: код биометрии был намеренно исключен из переданного архива, а платежный модуль был не завершен. Заключение Союза указало на неполноту кода на 35 % по функциональности, что является критическим. Суд встал на сторону заказчика, разработчики были обязаны выплатить неустойку и передать полный код в течение 14 дней под контролем эксперта. 📱
Кейс 2. Крупный ритейлер и проблема с локализацией — отсутствие языковых файлов в переданном коде после обновления интерфейса
В 2021 году международная сеть ритейлера заказала обновление своего мобильного приложения (Android) для добавления поддержки трех новых языков: испанского, итальянского и польского, а также редизайн корзины покупок. После передачи кода и его установки в тестовой среде обнаружилось, что новые языки не отображаются — при переключении языка интерфейс оставался на английском. Команда разработчиков заявила, что они передали все файлы локализации (strings.xml) и что проблема в кэшировании устройства. Однако технический специалист заказчика обнаружил, что в папке res/values отсутствуют папки values-es, values-it, values-pl, а в имеющихся файлах отсутствуют ключи для новых строк. Вместо этого были переданы пустые папки. Ритейлер подал иск на сумму штрафных санкций и упущенной выгоды (около 15 миллионов рублей). Эксперты Союза «Федерация судебных экспертов» изучили переданный архив: действительно, ключевые ресурсы отсутствовали. Для проверки они использовали автоматическое извлечение всех строковых ключей из кода (с помощью Android Lint) и сравнили с тем, что есть в ресурсах. Оказалось, что из 250 уникальных ключей, используемых в коде, в ресурсах присутствовало только 180, причем 70 новых ключей, связанных с корзиной и новыми языками, отсутствовали. Эксперты также проанализировали эталонный билд, который разработчики предоставили как «рабочий» — в нем ресурсы были на месте. Это доказывало, что при передаче файлы были либо удалены, либо не включены в архив. Кроме того, в логинах сборки разработчиков были найдены строки «processing values-es», что указывало на то, что файлы существовали на момент сборки. Заключение: код передан не в полном объеме, отсутствуют 70 ключевых ресурсов, что делает невозможным использование новых языков и частично нарушает работу корзины. Суд обязал разработчиков передать недостающие файлы и выплатить компенсацию за задержку запуска обновления в новых регионах. 🌐
Кейс 3. Медицинский стартап — отсутствие модуля шифрования данных и ключей API после обновления
В 2023 году медицинский стартап, разрабатывающий приложение для мониторинга пациентов, заказал у сторонней команды обновление системы шифрования данных для соответствия требованиям HIPAA и GDPR. Обновление включало интеграцию новой криптографической библиотеки и замену всех ключей API. После передачи кода и его развертывания на серверах тестирования выяснилось, что приложение не может установить защищенное соединение с сервером, а все данные передаются в открытом виде. Проверка показала, что в переданном коде отсутствует папка «crypto», где должны были лежать классы для шифрования, а также файл config.properties с новыми ключами. Вместо них были оставлены старые заглушки. Разработчики утверждали, что это произошло из-за ошибки упаковки, и они готовы дослать файлы, но заказчик потерял доверие и потребовал полной экспертизы для фиксации факта неполноты, чтобы расторгнуть контракт без штрафов. Эксперты Союза «Федерация судебных экспертов» провели анализ и обнаружили, что в архиве отсутствуют 23 Java-файла, ответственных за шифрование, а также файл с ключами. Они восстановили историю Git-коммитов разработчиков (с помощью форензики) и нашли, что файлы были удалены за 2 дня до отправки архива, при этом коммит с удалением был помечен как «чистка временных файлов», но на самом деле в нем были удалены именно криптографические модули. Это указывало на преднамеренное изъятие кода, возможно, с целью сохранения технологического ноу-хау. Сравнение с эталонным APK, запущенным на устройствах бета-тестеров (который работал с шифрованием), показало наличие классов crypto в бинарном файле, что подтверждало, что на момент сборки эти файлы были в проекте. Заключение: код передан не в полном объеме, отсутствуют критические модули безопасности, что делает приложение несоответствующим медицинским стандартам. Суд расторг контракт и обязал разработчиков вернуть аванс, а также выплатить компенсацию за нарушение сроков. 🔐
Кейс 4. Крупный издатель — проблема с ресурсами изображений после обновления дизайна (спор о полноте)
Издатель мобильных игр заказал обновление визуального стиля своего приложения: замена всех иконок, фоновых изображений и анимаций на новый брендбук. После передачи кода и его сборки дизайнеры издательства обнаружили, что более 40 % новых изображений отсутствуют, а на их месте либо старые картинки, либо квадратные заглушки с надписью «TODO». Заказчик обвинил разработчиков в том, что они передали только часть ресурсов, хотя по контракту должны были быть все. Разработчики утверждали, что они передали все, что было, а отсутствующие изображения «были на сервере разработчика, и они забыли их скачать». Эксперты Союза «Федерация судебных экспертов» провели детальную проверку: они извлекли все ссылки на ресурсы из кода (R.drawable., R.mipmap.) и сравнили с файлами в переданной папке res. Оказалось, что из 560 ссылок на ресурсы в наличии было только 320 файлов. При этом эксперты провели проверку на наличие изображений в эталонном APK (который был предоставлен заказчиком как скачанный из Google Play перед обновлением) — в нем все 560 ресурсов были на месте, что доказывало, что на момент сборки они существовали. Кроме того, в логах сборки разработчиков нашлись упоминания о копировании этих файлов. Эксперты также проанализировали метаданные архива: даты модификации отсутствующих файлов были указаны как «1970-01-01», что свидетельствовало о том, что эти файлы были добавлены в архив как пустышки или через неправильные инструменты. Вывод: код передан не в полном объеме, отсутствует 240 файлов ресурсов, что делает невозможным соответствие новому дизайну. Суд обязал разработчиков передать все ресурсы и выплатить компенсацию за переработку дизайнеров издателя. 🎨
Кейс 5. Логистическая компания — ошибка в скриптах сборки и отсутствие CI/CD конфигураций после обновления
В 2022 году логистическая компания заказала у разработчика обновление своего мобильного приложения для курьеров, включающее добавление офлайн-режима и синхронизацию данных. После передачи кода и попытки настроить автоматическую сборку на своем Jenkins-сервере, DevOps-инженер компании столкнулся с тем, что все скрипты сборки ссылаются на пути, которые существуют только на машине разработчика, а файлы конфигурации CI/CD (Jenkinsfile, скрипты деплоя) вообще отсутствуют в переданном архиве. Вместо них были только текстовые файлы с описанием «для сборки используйте команду build.sh», но самого build.sh не было. Компания не могла выпустить обновление в течение двух недель, что привело к сбоям в работе курьерской службы. Разработчик утверждал, что «это не входит в объем кода, это окружение». Однако контракт явно предусматривал передачу всех артефактов, необходимых для воспроизводимой сборки. Эксперты Союза «Федерация судебных экспертов» проанализировали переданный код и обнаружили, что в репозитории разработчика (к которому удалось получить доступ) есть папка «ci» со всеми скриптами и Jenkinsfile, а также файл .env с переменными окружения. В переданном архиве этих папок не было. Эксперты провели сравнение хешей: файлы в архиве отсутствовали. Они также попытались собрать проект, используя только переданные файлы — сборка падала с ошибкой «build.sh not found». Заключение: код передан не в полном объеме, отсутствуют CI/CD файлы, что делает невозможным автоматическую сборку и развертывание, и нарушает условия контракта. Суд обязал разработчика передать недостающие файлы и компенсировать убытки компании за простой. ⚙️
🧠 Раздел 21. Обобщение и итоговые рекомендации по экспертизе полноты кода
Подводя итог, можно уверенно утверждать, что экспертиза полноты переданного кода мобильного приложения является высокотехнологичным и многогранным процессом, требующим от эксперта глубоких знаний в области разработки ПО, систем контроля версий, сборки, декомпиляции, форензики и анализа данных. 🤝 Союз «Федерация судебных экспертов» внедрил передовые методики и инструментарий, позволяющие не просто констатировать отсутствие файлов, но и устанавливать причины, время и способ их исчезновения, что критически важно для судебного разбирательства.
Мы рекомендуем всем участникам рынка мобильной разработки тщательно прописывать в контрактах условия передачи кода: четкий перечень файлов и артефактов, способ передачи (репозиторий, архив), требования к документации, обязательство предоставить доступ к CI/CD конфигурациям, а также предусматривать этап приемочной сборки на стороне заказчика до финального расчета. Это позволит избежать большинства споров. Если же спор возник, не пытайтесь решить его кулуарно — обращайтесь к независимым экспертам, которые смогут объективно зафиксировать неполноту и дать юридически значимое заключение. Союз «Федерация судебных экспертов» готов выступить в роли такого независимого арбитра, обеспечивая прозрачность, научную обоснованность и высокую доказательную силу наших заключений. Мы гордимся тем, что наши эксперты помогают восстанавливать справедливость в цифровой среде, где каждый байт кода может стоить миллионы. 🏛️
Полную контактную информацию, телефон и адрес офиса, а также более подробную информацию по вашему вопросу вы можете найти на нашем официальном сайте ✅ https://bneks.ru






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