Nuke Device — система удалённого управления Android-устройствами, которую я разработал для корпоративных сценариев безопасности. Когда нужна возможность удалённо стереть, заблокировать или проверить связь с устройством в поле — и это должно работать даже когда приложение убито. Система использует Firebase Realtime Database и FCM push-уведомления для гарантированной доставки команд.
- Зачем я создал Nuke Device
- Архитектура: как работает Nuke Device удалённый сброс
- Три ключевые команды
- Безопасность Firebase
- Стек технологий
- Практическое применение
- Исходный код
- FAQ
- Работает ли Nuke Device когда приложение принудительно закрыто?
- Как подтверждается factory reset?
- Какие разрешения нужны приложению?
- Можно ли использовать для управления парком устройств?
Зачем я создал Nuke Device
Управление корпоративными устройствами — реальная проблема. Устройства теряются, крадутся, компрометируются. Традиционные MDM-решения дорогие и избыточные. Мне нужно было что-то лёгкое, надёжное и разворачиваемое за минуты. Nuke Device решает это двухкомпонентной архитектурой: Flutter-приложение для Android с правами Device Admin и Python-пульт управления через Firebase.
Критическое требование: команды wipe и lock должны работать даже когда приложение убито. Это достигается через FCM high-priority data messages, которые будят устройство и выполняют команду через фоновый Kotlin-сервис — без участия пользователя.
Архитектура: как работает Nuke Device удалённый сброс
Система работает по простому, но надёжному принципу: Firebase Realtime Database — шина команд, FCM push — гарантия доставки даже при убитом процессе.
Android-приложение (Flutter + Kotlin) регистрируется как Device Admin, получает FCM-токен и начинает слушать команды по пути commands/{device_id}. Каждые 30 секунд отправляет heartbeat со статусом — батарея, Wi-Fi, IP-адреса, тип блокировки экрана, права администратора.
Python-пульт читает реестр устройств из devices/, показывает дашборд состояния и записывает команды в Firebase. Есть CLI и GUI (Tkinter). При отправке команды параллельно шлёт FCM push с высоким приоритетом для пробуждения устройства.
Три ключевые команды
- Hello Test — проверка связи. Устройство пишет подтверждение обратно в Firebase, а префикс в ответе показывает способ доставки: через DB listener (приложение открыто) или FCM service (приложение убито)
- Lock — удалённая блокировка экрана через
DevicePolicyManager.lockNow(). Работает мгновенно в фоне и на переднем плане - Wipe — ядерная опция. Вызывает
DevicePolicyManager.wipeData(0)для полного сброса до заводских настроек. Перед wipe FCM-сервис синхронно записывает подтверждение через CountDownLatch с таймаутом 3 секунды — потому что послеwipeData()процесс умирает
Безопасность Firebase
Система использует Firebase Anonymous Auth для аутентификации устройств. Каждое устройство идентифицируется по ANDROID_ID из Settings.Secure — уникальный и персистентный между переустановками. Структура базы чётко разделяет ответственность:
devices/{id}— устройство пишет статус, пульт читаетcommands/{id}— пульт пишет команды, устройство читает и выполняет
FCM-сервис берёт WakeLock на 10 секунд при получении сообщения, чтобы Android не убил процесс до завершения команды. Для wipe-команд подтверждение записывается синхронно перед вызовом wipeData() — критическое архитектурное решение, поскольку factory reset немедленно убивает процесс.
Стек технологий
- Android-приложение: Flutter (Dart UI) + Kotlin native (Method Channel для DevicePolicyManager, FCM Service, API устройства)
- Пульт управления: Python + firebase-admin SDK, CLI и Tkinter GUI
- Бэкенд: Firebase Realtime Database (шина команд + статусы), Firebase Cloud Messaging (push-доставка), Firebase Anonymous Auth
- Android API: DevicePolicyManager (lock, wipe), Device Admin Receiver, WakeLock, ConnectivityManager, WifiManager
Практическое применение
В моей работе внештатного CTO я внедрял решения для управления устройствами в разных отраслях. Корпоративные парки Android-планшетов в закрытых сетевых средах требуют возможности удалённого сброса. POS-терминалы в рознице, складские сканеры, полевые планшеты — всё это риски утечки данных при потере или краже.
Nuke Device демонстрирует лёгкий подход по сравнению с полными MDM-платформами. Для организаций с 10-100 устройствами и базовыми требованиями безопасности эта архитектура обеспечивает основные контроли — удалённый сброс, блокировку и мониторинг здоровья — без лицензионных расходов enterprise MDM.
Исходный код
Исходный код доступен по запросу. Свяжитесь со мной для получения доступа к репозиторию. Репозиторий включает Flutter-приложение, Kotlin-сервисы, Python-пульт (CLI + GUI) и конфигурацию Firebase.
Для консультаций по корпоративной безопасности и управлению устройствами — свяжитесь со мной. За плечами более 15 лет опыта в информационной безопасности и 6 патентов.
FAQ
Работает ли Nuke Device когда приложение принудительно закрыто?
Да. FCM high-priority data messages доставляются в фоновый Kotlin-сервис даже когда Flutter-приложение убито. Сервис берёт WakeLock для выполнения команды (wipe, lock или hello test) без необходимости запуска основного приложения.
Как подтверждается factory reset?
Перед вызовом wipeData(0) FCM-сервис синхронно записывает wipeAck в Firebase через CountDownLatch с таймаутом 3 секунды. Это гарантирует что пульт управления получит подтверждение доставки команды до того, как устройство сотрёт себя.
Какие разрешения нужны приложению?
Приложение требует права Device Admin (для блокировки и сброса), разрешение на уведомления, исключение из оптимизации батареи (чтобы оставаться активным в фоне) и доступ к сети. Device Admin активируется пользователем через системный диалог.
Можно ли использовать для управления парком устройств?
Да. Python-пульт поддерживает множество устройств через реестр Firebase. Каждое устройство идентифицируется уникальным ANDROID_ID и отправляет статус каждые 30 секунд — батарея, Wi-Fi, IP-адреса, права администратора. Для больших парков (100+ устройств) рекомендую переход на полноценное MDM-решение.
