Repository navigation
ru ARCHITECTURE
Languages: English | العربية | Čeština | Deutsch | Español | فارسی | Français | हिन्दी | Bahasa Indonesia | Italiano | 日本語 | 한국어 | Nederlands | Polski | Português | Русский | Svenska | ไทย | Türkçe | Tiếng Việt | 中文
Как устроен VD Google и почему. Эта страница объясняет замысел и принципы. Она не перечисляет конкретные файлы, таблицы или запросы, которые использует каждый читатель: это живёт только в исходном коде, и так задумано, чтобы ни приложение, ни документация никогда не превратились в инструкцию для того, кто хочет подделать те же значения.
- Читать правду. Показывать то, что собственные приложения Google уже записали, объяснять это и никогда не выдумывать значение. Когда на устройстве нет ответа, говорить «Неизвестно».
- Ноль сети. Приложение не объявляет вообще никаких разрешений; WebUI блокирует любой удалённый источник. Ничего и никогда никуда не отправляется.
- Одно поведение, два лица. Приложение и модуль WebUI остаются абсолютно идентичными: те же сигналы, те же формулировки, тот же экспортируемый отчёт.
- Честность важнее красоты. Настоящий отрицательный результат показывается как отрицательный; устаревший кеш помечается как кешированный; отсутствующее значение: «Неизвестно». Распознавание никогда не смягчается ради более приятного вида.
-
Приложение написано на Kotlin с Jetpack Compose (Material 3). Оно получает root
через
RootServiceиз libsu, никогда не вызываяsuнапрямую, и читает внутри этого привилегированного сервиса. - Модуль WebUI: небольшой веб-корень на HTML/JS, обслуживаемый вашим менеджером root (KernelSU, APatch или Magisk). Он выполняет те же чтения через root-мост менеджера. Строгая Content-Security-Policy запрещает любой удалённый источник, поэтому страница не может «позвонить домой» даже в принципе.
Оба генерируются из одного общего набора строк на 21 языке, так что подпись никогда не переводится дважды.
Часть состояния, которое читает VD Google, живёт в базах данных SQLite, принадлежащих
приложениям Google. В Android есть собственный SQLite, но системный SQLite ненадёжен при
открытии копии чужой базы, отложенной в сторону: на некоторых прошивках производителей
он даёт сбой для каждой базы и ничего не возвращает. Чтобы читать одинаково на каждом
устройстве, VD Google несёт собственный двоичный файл sqlite3 (arm64 и arm32) и
выполняет запросы через него от имени root. Приложение и WebUI используют идентичный
двоичный файл, поэтому всегда читают одним и тем же движком и получают один и тот же
результат. Происхождение и контрольные суммы этого файла описаны в разделе
Встроенные двоичные файлы.
Чтение сначала копирует базу в сторону и только потом открывает её, никогда не трогая живой файл и никогда не копируя индекс общей памяти, который работающая база может сообщать как повреждённый.
Самое трудное в честном чтении RCS: то, что очевидные флаги лгут. Простой флаг «доступно», флаги функций и состояние провизионирования, всё это может читаться отрицательно на линии, где RCS работает безупречно, потому что это кеши или потому что линия работает через собственный бэкенд Google (Jibe), а не через IMS-сеть оператора. VD Google вычисляет единый вердикт Соединение из реальной конфигурации чата и движка провизионирования, который остаётся верным во всех версиях Android и Google Messages, и показывает лгущие флаги с чёткой пометкой «кешировано», чтобы они информировали, не вводя в заблуждение. См. руководство пользователя о том, что означает каждая строка.
Экспорт: очищенный JSON-снимок. Перед записью чего-либо запускается очиститель: он отбрасывает ключи и значения, похожие на учётные данные, затирает длинные последовательности цифр и никогда не выдаёт ваш номер телефона, содержимое сообщений, имена контактов или сырые блобы возможностей. Необязательный раздел диагностики несёт только имена схем, счётчики, размеры и версии, и даже там любой встроенный в имя отпечаток конкретной личности схлопывается. Приложение и WebUI выдают одну и ту же схему.
- Никогда не объявляет сетевое разрешение, а WebUI никогда не обращается к удалённому источнику.
- Никогда не фабрикует, не подменяет и не скрывает значение.
- Никогда не сообщает вердикт Play Integrity, потому что этого вердикта нет на устройстве.
- Изменяет состояние только через явное, подтверждённое, локально записанное в журнал действие.
Эта документация создана с помощью Claude (Anthropic) и поддерживается VD171. Исправления и улучшения приветствуются; см. CONTRIBUTING.md.