HWID (Hardware ID)
Аппаратный идентификатор устройства, используемый для привязки подписок к конкретным устройствам и отслеживания активных подключений.
Формат
HWID — hex-строка SHA-256 хеша, производная от аппаратных характеристик устройства с солью incy_hwid_.
Генерация по платформам
Android
Компоненты (объединяются через |):
Android ID
Settings.Secure.ANDROID_ID
Производитель
Build.MANUFACTURER
Модель
Build.MODEL
Бренд
Build.BRAND
Устройство
Build.DEVICE
Продукт
Build.PRODUCT
Плата
Build.BOARD
Оборудование
Build.HARDWARE
Алгоритм:
deviceId = SHA256("androidId|manufacturer|model|brand|device|product|board|hardware")
hwid = SHA256("incy_hwid_" + deviceId)Результат: 64 символа (hex) Хранение: EncryptedSharedPreferences (сохраняется при переустановке)
Desktop (Linux)
Компоненты (объединяются через |):
Machine ID
/etc/machine-id
Hostname
InetAddress.getLocalHost().hostName
OS
System.getProperty("os.name")
Архитектура
System.getProperty("os.arch")
Пользователь
System.getProperty("user.name")
Desktop (Windows)
Компоненты (объединяются через |):
Machine GUID
HKLM\SOFTWARE\Microsoft\Cryptography\MachineGuid
Hostname
InetAddress.getLocalHost().hostName
OS
System.getProperty("os.name")
Архитектура
System.getProperty("os.arch")
Пользователь
System.getProperty("user.name")
Алгоритм (Linux/Windows):
Результат: 64 символа (hex) Хранение: файл {configDir}/device_id
iOS
Компоненты:
Vendor ID
UIDevice.current.identifierForVendor
Имя устройства
Модель устройства
Алгоритм:
Результат: 16 символов (hex) Хранение: Keychain (сохраняется даже при удалении приложения)
iOS использует укороченный формат (16 символов) в отличие от Android/Desktop (64 символа).
Использование
HTTP-заголовки запроса
При включённой отправке HWID приложение добавляет заголовки к запросам подписки:
Premium API — проверка лимита устройств
При запросе конфигурации провайдера клиент передаёт хеш HWID:
Сервер использует hwidHash для проверки, зарегистрировано ли устройство у данного провайдера, и принятия решения о выдаче premium-статуса в рамках лимита устройств.
Поле hwidHash в регистрации
При регистрации устройства в Firestore помимо сырого hwid записывается поле hwidHash = SHA256(hwid). Это позволяет серверу находить устройство по хешу без знания исходного идентификатора.
Принудительная отправка
Провайдер может включить принудительную отправку HWID через Premium API:
При этом пользователь не может отключить отправку HWID для данной подписки.
Short HWID
Для отображения в UI используются первые 8 символов HWID.
Последнее обновление