TGViewer
Мамкін Архітектор Мамкін Архітектор @mamkin_architect · 3.24K subscribers
Post #692 2.39K
Реверснули сигналізацію заради Home Assistant

У мене вдома звичайна GSM-сигналізація. Не Ajax і не якась модна історія, простий пульт від постачальника послуг. Керується через хмару: є застосунок, ставиш і знімаєш з охорони. Проблема в тому, шо той застосунок треба щоразу відкривати, або вводити код на панелі, де клавіатура час від часу підзаліпає.

Захотілось, щоб воно саме ставилось, коли всі вийшли з хати, і само знімалось, коли хтось зайшов.

Пошукав можливості інтеграції. Ні відкритого API, ні згадки на сайті виробника, ба більше — конкретно мою модель він уже й не підтримує. Або міняти залізо на щось просунуте, або розбиратися з тим, шо є.

Грошей шкода, а вдома вже стоїть Home Assistant і поряд Claude Code з токенами. Ну то чом би не спробувати.

Перше, шо зробили: завернули трафік застосунку через проксі, подивитись, як воно говорить з хмарою. В мене openwrt на роутері, агент поставив туди якусь приблуду і побачив весь трафік.

І тут перший сюрприз: усе їде по звичайному HTTP, без TLS. Тобто трафік керування охоронною системою читається в тій самій мережі голими руками. Для охоронного продукту це трохи занадто відкрито, але я не шарю — може всі так роблять 🙂

Тіло самої команди все ж було зашифроване, тому дістали APK і декомпілювали. На Android майже все на Java, тому це доволі просто: розбираєш dex і читаєш логіку. Всередині знайшовся ГОСТ 28147-89 (це стандарт шифрування) з нестандартними S-box (це таблиці заміни: шифр підставляє одні значення замість інших), захардкодженими прямо в застосунку.

Тобто безпека тримається на тому, шо ключ заховано в клієнті. Хто ж міг подумати, шо код можна побачити?

Відтворили шифр, креди знаємо, скрафтили команду на постановку, відправили. Хмара відповідає OK, але панель мовчить і нічого не робить. Payload валідний, дешифрується коректно, помилки ніде немає. Тут би я здався, але агенти не здаються.

Розгадка знайшлась, коли почали звіряти свій трафік і живий трафік застосунку. Виявилось, шо команда це не один запит, а два: спершу ping за одноразовим токеном сесії (він живе хвилин десять), і вже той токен треба покласти в наступний запит. А байти, куди запихали ідентифікатор панелі, насправді чекали на токен. Обидва варіанти дешифруються однаково валідно, тому вгадати наперед було неможливо.

Ще був код активації, з якого робиться ключ: у відкритому вигляді він не передається. Довелось брутфорсити його з перехопленого запиту, відсіюючи варіанти по контрольній сумі. Кілька хвилин, і ключ підібрано. Дуже добре, що він виявився коротким і M1 навіть не напрягся.

Там був смішний момент, ось скрін (це з каналу, де планую викладати смішні діалоги і відповіді агентів, підписуйтесь теж)

В цілому воно зараз працює. Панель під'єднана до Home Assistant, ставлю і знімаю з телефона, приходять нотифікації про втрату живлення і тд.

Але прикол в тому, що тепер я повернувся туди, з чого починав. Інтеграція є, а от як її безпечно автоматизувати — досі питання. Думав ловити телефон у домашній Wi-Fi і по цьому знімати охорону. Але телефон може сісти, Wi-Fi глюкнути, а ціна помилки тут не просто "ой": приїде наряд, і далі ти пояснюєш людям з табельною зброєю, шо тривога хибна.

Тому автоматику поки поставив на паузу. Шукаю гарні варіанти, щоб було просто і безпечно. Може ви знаєте? Напишіть в коменти.
  • 👍 28
  • ❤ 9
  • 🔥 2
More from @mamkin_architect
  1. Oct 7, 2026Хтось не деплоїть по пʼятницях. Ми не деплоїмо, поки триває тривога. Ми різні
  2. Oct 6, 2026Оновив Portainer однією кнопкою Я вже не раз розповідав, як влаштований мій homelab: є сер…
  3. Oct 1, 2026Обіцяв технічні подробиці по Дронам на районі, тому ось вони. Стек частково вже називав: P…
  4. Sep 30, 2026‼️ увага ‼️ Я провтикав і випадково закрив коменти деяким підписникам пару днів назад. Зар…
  5. Sep 30, 2026В Києві останнім часом тривога триває постійно, з дуже короткими перервами. Раніше треба б…
  6. Sep 21, 2026Від умовного Скайнету чи Матриці нас рятувало те, що LLM-ки доволі повільні: довго відпові…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →