Root доступ до пилососа Xiaomi STYTJ02YM (Viomi V8) Vacuum Robot
Сучасний робот пилосос оснащено камерою, радаром і бог зна ще чим. При цьому усьому він завжди має доступ до інтернет і, теоретично, може надсилати розмови, фото, адреси та карти ваших помешкання якомусь абстрактному Лі Хуан Чжану. А беручи до уваги те, що скоріш за все, у вашому будинку (та й на вас самих і ймовірно на усіх членах вашої родини) окрім робота пилососа ще купа різної іншої "розумної" техніки, то й же Лі Хуан Чжан, якщо того захоче, може знати про вас стільки всього, що ви й самі про себе не здогадуєтесь. Серцевий ритм, кількість кисню у крові, температуру повітря і підлоги у ваших кімнатах, яскравість освітлення... Ще трохи і вони будуть знати ваш гормональний фон. Страшне 😬
Отже, час від часу я замислювався над необхідністю відвʼязати робота пилососа від китайських "хмар" і використовувати його виключно локально. Під час рісьорчу знайшов штуку під назвою Valetudo, але для встановлення потрібний root доступ до операційної системи. Власне про це і пишу. Насправді в інтернетах вже достатньо матеріалів на цю тему. Але тут я спробував скомпілювати усе до купи, послідовно та українською мовою.
Для початку перекидаємо вашого dust sucker'а пузом догори. Бачимо наклєєчку.
Знімаємо рамку головної щітки, саму щітку і знаходимо чотири гвинта що потрібно викрутити малою хрестовою викруткою.
Знімаємо кришку, витягаємо батарейку, відключаємо її розʼєм (1) і підключаємо дріт microUSB (2), але ще не підключаємо компʼютер.
Справа в тому, що підключення до ADB сервера на девайсі можливе лише впродовж однієї-двох секунд з моменту завантаження операційної системи. Після цього робот закриває доступ до ADB. До того ж підключення до shell нічого тобі не дасть тому, що попередньо потрібно замінити або відредагувати файл /bin/adb_shell
. Наразі він має наступний контент:
1#!/bin/sh
2export ENV='/etc/adb_profile'
3if [ $1 = '-' ];then
4 /bin/login
5elif [ $1 = '-c' ];then
6 /bin/login -c "$2"
7else
8 /bin/login
9fi
ми повинні замінити його на:
1#!/bin/sh
2export ENV='/etc/adb_profile'
3exec /bin/sh "$@"
Для цього створюємо файл із назвою adb_shell
будь де на вашому на компі. Пишемо у нього код наданий вище, а також встановлюємо йому execution bits.
1touch adb_shell
2chmod +x adb_shell
Для того щоб не "тиркати" команду adb push -a adb_shell /bin/adb_shell
щосекундно вручну, виловлюючи той самий момент коли з ним можна взаємодіяти, пишемо в консолі отаке:
1while true; do adb push -a adb_shell /bin/adb_shell | grep -v "no devices"; done
і чекаємо допоки не побачимо наступне:
1adb_shell: 1 file pushed, 0 skipped. 0.0 MB/s (100 bytes in 0.033s)
Після цього висмикуємо із робота дріт і підключаємо знову.
Виконуємо наступне, щоб вимкнути автозапуск основного процессу, який не дає нормально працювати через adb
.
NOTE: Спокійно, це безпечно тому, що тут ми видаляємо сімлінк на файл а не сам файл. Потім все відновимо.
1while true; do (adb shell rm /etc/rc.d/S90robotManager && echo "Done") 2>&1 | grep -v "no devices"; done
Чекаємо на успішне виконання попередньої інструкції (якщо не вдалось відключаємо USB і повторюєм усе з початку).
Після цього вже можна спокійно підключатись за допомогою adb shell
. Якщо ти бачиш шось отаке, то це успіх.
Тепер потрібно встановити Dropbear щоб уможливити підключення через ssh. Звісно можна зібрати його із сирців але простіше скачати готовий бінарник і встановити його.
1adb push dropbear_2015.71-2_sunxi.ipk /tmp
2adb shell opkg install /tmp/dropbear_2015.71-2_sunxi.ipk
3adb shell sed -i -e "/PasswordAuth/ s/off/on/g" /etc/config/dropbear
- пушимо його з компа на пилосос
- інсталюємо на пилососі
- дозволяємо підключення за допомогою пароля
Відключаємось від USB пилососа. Тепер можна підключити назад його батарейку, чекаємо на завантаження і підключаємось по ssh.
1ssh [email protected]
Де vacuum.home
- IP адреса вашого робота у локальній мережі. Він запитає вас пароль, використай оце @3I#sc$RD%xm^2S&
. Наступною командою виконай:
1passwd
Тепер він запитає тебе новий пароль два рази. Далі можна встановити ssh ключ /etc/dropbear/authorized_keys
якщо хочеш, але то не обовʼязково.
І от тепер можна "повернути до життя" головний процес пилососа.
1cd /etc/rc.d
2ln -s ../init.d/robotManager S90robotManager
Тобто тут ми повертаємо назад сімлінку яку видалили раніше.
Всьо, можна збирати і перезавантажувати робота. Тепер можна спокійно підключатись до нього по ssh у разі потреби.