ID:
SO_BINDTODEVICEКатегория: VPN-артефакты и сокеты Статус в RKNHardering 2.10.0: Активная проверка Роль в вердикте: Средняя
Эта страница описывает фактическую реализацию RKNHardering 2.10.0. Здесь отдельно указано, что можно сделать без root, что требует root, а также где способ только уменьшает один сигнал, но не скрывает VPN целиком.
Функция detectSocketLeaks() не вызывает SO_BINDTODEVICE. Она создаёт несвязанный UDP/IPv4 socket, делает getsockname() и выдаёт so_bindtodevice|local_ip=..., только если local address не равен 0. Обычно несвязанный socket возвращает 0.0.0.0, поэтому строка редка. Legacy policy — medium review.
Unconnected UDP socket сразу имеет ненулевой local IPv4 address.
Это подозрительная socket identity, но название страницы исторически неверно. Настоящий SO_BINDTODEVICE проверяется в bindtodevice-leak.
Как строка влияет на отчёт: Строка не даёт самостоятельный окончательный вердикт, но выставляет needsReview=true и добавляет доказательство средней уверенности.
В стандартном Linux адрес выбирается после connect/bind, поэтому текущая проба обычно ничего не выдаёт. Контейнер или hook может изменить поведение.
Важно оценивать эту строку вместе с соседними сигналами. Один чистый API не перекрывает Java Binder, libc, raw netlink/syscall, procfs/sysfs, локальные сокеты и серверные признаки одновременно.
Не требуется менять сеть, если строка отсутствует. При срабатывании повторите на clean device и проверьте virtualization/proxy SDK.
Ищите hook, который автоматически bind/connect socket, а не маскируйте detail. Исключите target из in-process modules.
Для воспроизведения нужен небольшой native test: socket(AF_INET, SOCK_DGRAM) → getsockname() без bind/connect. Команда ss не показывает незарегистрированный краткоживущий socket. В коде:
rg -n 'detectSocketLeaks|so_bindtodevice' app/src/main/cpp/native_signs_probe.cpp
После любого изменения сделайте force-stop RKNHardering и VPN-клиента, запустите их заново и повторите полный scan. Для Zygisk/Xposed/kernel-модулей обычно нужна перезагрузка. Сравнивайте не только эту строку, но и соседние сигналы: частичный hook часто создаёт несогласованность между API.
Сама проба выполняется с обычными правами приложения и не запрашивает root. ADB-команды ниже служат только для ориентира: adb shell работает под другим UID и может видеть больше или меньше, чем процесс приложения. Решающий тест — повторный запуск самой проверки после force-stop.
Изменение глобального socket binding ломает маршрутизацию приложений.
Верните последнее изменение: отключите добавленный модуль или правило через штатный менеджер, перезагрузите устройство и повторите baseline. Не накладывайте новый hook поверх неизвестного состояния.
Средняя. Проверено по фактическому коду; документация исправляет несоответствие имени реализации.
Статус стороннего решения не переносится автоматически на это устройство. Заявление разработчика модуля — это исходная гипотеза; подтверждением служит повторяемый результат RKNHardering на конкретной версии Android, прошивки и ядра.
native_signs_probe.cpp — нативная реализация проб.NativeSignsChecker.kt — основной native/legacy verdict.NativeSignalId.kt — полный реестр ID.NativeSignalCatalog.kt — категория, slug и mapping строк.Связанные сигналы: bindtodevice-leak, getsockname-leak.