Исследование Устройств Светодиодного Контроллера Wi-Fi

Сегодня мы представляем на рассмотрение устройство, призванное облегчить нашу жизнь.

Это устройство предназначено для управления освещением.

При подключении RGB-диодов можно управлять цветом и яркостью, а при подключении одноцветных диодных ламп — только яркостью.

В последнем случае 3 цветовых канала могут использоваться отдельно.

Кроме того, устройство имеет несколько режимов, устанавливающих либо постоянное свечение, либо мигание.

Питание устройства от 5 до 24 вольт. Устройство выдает на каналы одинаковое напряжение.

Технические характеристики: Максимальная нагрузка: 288 Вт Пульт дистанционного управления: 50 м Модель: Wi-Fi контроллер WIFI100

Исследование устройств светодиодного контроллера Wi-Fi

Однако после включения моя жизнь не стала легче.

Напротив, все стало сложнее.

Причиной тому стало входящее в комплект приложение MagicColor v1.0. Несмотря на то, что эта программа работала на телефонах HTC и LG, на моих устройствах Samsung Galaxy Note 10.1 и Galaxy Nexus она не работала, что заставило ее немного разобрать, а вместе с ней и сам замечательный аппарат. Первое, что было установлено, о чем не было упомянуто в инструкции, это наличие WEB-интерфейса с логином:admin и паролем 1234, что меня конечно порадовало.

Как видно из скриншотов, по умолчанию устройство работает в режиме Ad hoc с незащищенным доступом к сети.

Протокол по умолчанию — TCP и порт 5000.

Исследование устройств светодиодного контроллера Wi-Fi



Исследование устройств светодиодного контроллера Wi-Fi

Надо сказать, что эта ситуация меня никак не устраивала.

Во-первых, безопасность есть, ее просто не существует. Любой может получить доступ к этому устройству.

Во-вторых, хотелось бы видеть это устройство в своей домашней сети, в которой уже есть свой DHCP-сервер и защита от внешних атак.

К сожалению, MagicColor не имеет возможности изменить IP-адрес устройства.

Кроме того, как выяснилось позже, программа проверяет имя сети ssid. Теперь давайте разберемся с программой.

Я использовал APK Manager v.4.9, чтобы извлечь файл MagicColor.apk. Для этого просто скопируйте .

apk в папку «place-apk-here-for-modding» и запустите скрипт Script.bat. После этих манипуляций в корневой папке программы появляется папка «projects» и в ней папка с таким же названием, как у .

apk-файла.

Теперь вам нужно получить файл .

jar из файла groups.dex, для которого использовался скрипт dex2jar. Достаточно перетащить мышкой файл .

dex на dex2jar.bat и мы получим то, что хотели.

Следующим шагом будет декомпиляция полученного файла groups_dex2jar.jar. Сначала я попробовал декомпилятор JD-gui. Но оно не оправдало ожиданий, выдавая некорректный код. Но следующий декомпилятор AndroChef полностью справился с задачей.

Давайте посмотрим на полученные источники.

Для дизассемблирования я использовал стандартную версию Eclipse Kepler с установленным на ней плагином ADT. Установить его можно из оболочки Eclipse, вызвав меню «Справка» — «Установить новое программное обеспечение…».

затем нажмите кнопку «Добавить» и введите ADT Plugin в поле «Имя» и в поле «Местоположение:».

dl-ssl.google.com/android/eclipse .

Выберите все компоненты и нажмите «Готово».

Для начала я создал пустой проект приложения Android. Где я установил Имя приложения: Color, Имя проекта: MagicColor2, Имя пакета: com.android.color. Затем я снял флажки «Создать собственный значок запуска» и «Создать активность».

Полученные при декомпиляции папки «cn» и «com» я поместил в папку src. Из «com/android/color» переносим файл R.java и заменяем его в папку «gen/com/android/color».

Не забудьте перенести все файлы из папки «res» в одноименную папку проекта.

И AndroidManifest.xml. Что я получил, используя скрипт apktool с параметрами Java -jar apktool.jar d MagicColor.apk. После запуска скрипта создается папка out, содержащая папку res и AndroidManifest.xml. Можно приступить к анализу программного кода.

Eclipse находит в программе несколько ошибок, которые необходимо исправить.

Как я это сделал, можно увидеть в исходниках, которые я прикрепил к статье ниже.

В StaticClass.java мы видим настройки программы по умолчанию.

Некоторые из этих параметров пригодятся нам позже.

В файле Protocol.java описан алгоритм генерации команды для устройства, основанный на функции getAll(), в которой генерируется команда.

  
   

public byte[] getAll() { this.all[0] = this.frameHead[0]; this.all[1] = this.frameHead[1]; this.all[2] = 0; this.all[3] = this.mode; this.all[4] = this.keyNumber; this.all[5] = this.keyValue; this.all[6] = this.colorRGB[0]; this.all[7] = this.colorRGB[1]; this.all[8] = this.colorRGB[2]; this.all[9] = this.checkValue; return this.all; }

На основе этих данных мы видим, что первые два байта всегда одинаковы и равны -86 и 85, образуя в двоичном виде 10101010 и 1010101 последовательность битов, позволяющую определить подлинность и правильность команды.

Также для определения правильности в команду входит контрольная сумма, которая находится в самом конце, 9-м байте команды.

Он рассчитывается по функции getCurCheckValue(int paramInt1, int paramInt2, int paramInt3, int paramInt4, int paramInt5) следующим оригинальным способом: Key_Num + (синий +(зеленый + (красный +(bar_No + 255))) +режим)%255 Где: paramint1 – StaticClass.bar_No, paramint2 – StaticClass.red, paramint3 – StaticClass.green, paramin4 – StaticClass.blue, paramint5 – StaticClass.Key_Num Как вы уже догадались, красное, зеленое и синее поля — это значения от 1 до 255 для каналов 1,2,3 соответственно.

При подключении RGB освещения меняется цвет, а при подключении обычных диодных ламп меняется яркость.

Поле Key_Num определяет режим работы устройства.

Режимы следующие: 1 - выключение освещения, 2 - включение освещения, 3 последовательное переключение встроенных режимов устройства, от частого моргания до постоянного свечения.

Имея в своем распоряжении всего один канал с лампой, я не смог ознакомиться со всем многообразием режимов.

Поле mode = 1, поле bar_No всегда равно 50. Перед отправкой команда модифицируется функциями обменбайты И обменИнт видимо для того, чтобы слегка зашифровать протокол передачи.

Идея этих функций в том, что симметричные относительно центра части крайних байтов меняются местами, например, если у нас исходное сообщение AB CD, то после преобразования мы получим AC BD, а если 12 34 56 78 тогда получим 17 35 46 28. Как умно!! ! Теперь о проблеме, которая мешала мне использовать программу на своих устройствах Samsung. Как выяснилось при отладке приложения, SSID сети заключен в кавычки и его длина увеличивается на 2 символа, чего программа не ожидает, а при проверке длины SSID рассчитывает получить 5 вместо 7. Проверка функции, расположенные в файле ColorActivity.java, обсуждаются ниже.

Их два: частная пустота getWifiInfo() И защищенная пустота ().

Обе функции содержат следующий код:

if(this.ssid != null) { if(this.ssid.length() != 5) { StaticClass.wifi_correct = false; return; } if(!this.ssid.substring(0, 2).

equals("LN")) { StaticClass.wifi_correct = false; return; }

Эти чеки Самвы я выделил жирным шрифтом.

Зачем проверять длину SSID и первых двух символов имени SSID, а они всегда одинаковые, я не знаю.

В SSID различаются только последние 3 символа, и они зависят от положения переключателя SSID на устройстве.

Положение 0 на переключателе соответствует имени SSID «LN001».

Для того чтобы программа заработала на моем телефоне достаточно было убрать эти проверки.

Далее мне удалось добавить на страницу настроек программы дополнительное поле, в которое можно ввести IP-адрес устройства.

Теперь есть возможность перевести устройство из режима «ad hoc» в режим «инфраструктура», настроить безопасность и подключить его из домашней сети, оставив возможность управлять освещением с мобильного устройства.

Готовый проект и рабочую программу в папке «bin» с добавленным в настройки полем IP-адреса устройства можно найти здесь: Проект «Магический цвет 2».

Теги: #Компьютерное оборудование #Android #wifi #LED-контроллер #MagicColor

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.