
Брутфорс паролів інженерного меню радіостанції
Що таке інженерне меню і навіщо воно потрібно? Дозволю собі процитувати з wiki:
Недокументовані возмо ́ жності (англ. undocumented features), ПДВ - можливості технічних пристроїв та/або програмного забезпечення, не відображені в документації. Найчастіше недокументовані можливості свідомо закладаються розробниками з метою тестування, подальшого розширення функціональності. Недокументовані можливості виявляються, зазвичай, у процесі зворотної розробки, але можуть бути виявлені і випадково.
Далі в статті, опис моєї спроби підібрати коди до інженерного меню радіостанції.
Введення
Придбав я одного разу радіостанцію KYD-IP620 китайського виробництва, але під вітчизняним «брендом». Рекламувати бренд не буду, гугл підкаже. Покрутив в руках, пограв і закинув. Але нещодавно натрапив на неї знову і вирішив приділити побільше уваги цьому диву техніки. Скупе меню на налаштування, змусило мене пошукати ПЗ для роботи з цією станцією. Мені здавалося, що софт дасть більше налаштувань, ніж доступно через меню.
Зайшовши на сайт виробника знайшов свою модель радіостанції, але софт не виявив. Написав листа в техпідтримку, відповіли швидко і надіслали ПЗ. Встановив, запустив і перше, що кинулося в очі, це більша кількість підтримуваних діапазонів. Вони мене і підштовхнули на пошуки можливості записати необхідну мені частоту (в розумних межах від поточного діапазону). Але тут мене чекав облом.
Офіційний софт перед записом перевіряв введену частоту на потрапляння в обраний діапазон і забороняв запис поза діапазоном. Гаразд, запустив сніффер, розібрався з протоколом запису-читання, накидав на коліні Delphi свою утиліту. Але тут з'явилася інша бяка. Записати частоту, яку хотів, у мене вийшло, але радіостанція на ній тупо мовчала. Прийом або передача-тиша. Мабуть, перевірка є ще й в МК станції.
Розібрав станцію. На платі знайшлася крім усього іншого 24C64. Це мікросхема i2c EEPROM. Її випаяв, зняв дамп, запаяв назад. У дампі не знайшлося нічого крім моїх налаштувань і мною записаних частот. Причепив сніффер i2c до пам'яті, ганяв запис/читання офіційним софтом, своєю утилітою, нічого. Все, що бігало по i2c шині, було в EEPROM, нічого зайвого не читалося і не писалося. Всі дані в EEPROM тільки ті, що я записав. Пізніше вже я допрацював протокол запису/читання і зміг читати/писати за всіма адресами пам'яті.
Про що це все?
Передбачаючи питання «навіщо мені все це потрібно, про що я тут пишу?» спробую описати свою думку. Гугл дав кілька схем попередніх і наступних моделей радіостанції. Принципову схему своєї піддослідної, яку описую в статті, я не знайшов, але вона на 70% збігається з ними (з'ясував, поки викликанював потрібні ноги). За схемою відмінності не суттєві. Звідси напрошується висновок, що для здешевлення продукції замовнику, виробник, особливо Китай (з його масовим виробництвом) не буде знову проектувати глобально схеми, писати софт під МК радіостанції і т. д. Навіщо коли вже є готове, яке потрібно трохи скорегувати - і віддати. ІМХЗ найлегше скоригувати програмно, причому без застосування программатора. Це дозволить зробити велику купу заготовок, які потім доведуть під вимоги замовника найменшими зусиллями. Після цієї думки я почав шукати вхід в інженерне меню, і знайшов. Складного нічого не було: потрібно було затиснути 2-ті кнопки і включити радіостанцію.
Ось воно!
Перед входом до меню пишеться напис «SET».
Для подальшого доступу до функцій потрібен пароль з 6-ти цифр. Перебір вручну стомливий і відпадає. У разі неправильного пароля виводиться знову напис «SET». Гугл дав один пароль, який веде до скидання на заводські налаштування. При його введенні напис змінюється на «ERASE». Ось він мені потім при налагодженні і знадобився. З'явилася думка організувати перебір на МК. Нехай потихеньку крутить собі паролі, а я буду своїми справами займатися.
Приступимо
Для введення пароля на радіостанції є: кнопкова клавіатура і енкодер.
Показ введених даних: LCD екран. Прикручувати камеру до всієї цієї справи і аналізувати знімки або відео з неї, мені не хотілося. У нас є екран, будемо використовувати його. Вивчивши трохи детальніше внутрішності станції, виявив, що за LCD дисплей відповідає драйвер HT1621B. Погуглив даташит на драйвер и его распиновку, выяснил необходимые мне пины. Це CS, WR і DATA. Коротко CS - початок передачі, WR- «синхронізація», DATA- дані. Пробуємо з цим злетіти. Викликанюємо і підпоюємося на висновки МК станції, що ведуть до ніжок драйвера LCD екрану.
Підключаємо логічний аналізатор і дивимося дані на драйвер для напису «SET» і для напису «ERASE». Зрозуміло, що дані різні, вони нам і знадобляться. Далі підпоюємося до «органів» введення. Нам потрібно 2 кнопки з клавіатури (MENU і F), і енкодер. Ардуїни у мене немає, буду робити на тому що під рукою. Під рукою опинилася Pinboard з AtMega16, від камраду DiHalt.
Технічне завдання
Пишемо емулятор енкодера і емулятор натискання кнопок «MENU» і «F» (вони потрібні для введення і підтвердження пароля). Аналізуємо дані, які відобразилися на LCD екрані. Читати дані драйвера LCD будемо через переривання AtMega16. За різних даних драйвера від «еталона» («SET») будемо виводити за UART на поточний пароль. У формат даних для драйвера можна не заглиблюватися. Нам потрібно відрізнити, коли не висвітився напис «SET» після натискання кнопки «MENU» і коли вона світиться. Логічно, що дані будуть різні. Тому я буду порівнювати рядок отриманих байт після останньої введеної цифри пароля і натискання кнопки «MENU». Відловивши кілька посилок драйвера LCD для напису «SET», переконався що вони однакові, взяв цю посилку за еталон. Порівнюючи з нею, я відкидаю ті, які збігаються, інші передаю в UART, для подальшого аналізу. Цей алгоритм я перевірив з паролем, який веде до скидання на заводські налаштування, він виправдав мої надії. Взагалі алгоритм введення пароля виглядає так: горить напис «SET», запрошення в інженерне меню. Натискаємо кнопку «MENU» і вводимо 1-й символ пароля. Далі знову натискаємо кнопку «MENU» для введення наступного символу. Так повторюємо до останнього символу. Коли введено останній символ, натискаємо знову кнопку «MENU». І ось тут або загориться напис «SET» або щось інше. Якщо світиться «SET» топаємо в початок провівши ітерацію пароля, якщо інше, передаємо пароль за UART для аналізу. Скрін програми для управління перебором.
Реальність
Реальність така, що я розраховував на велику швидкість перебору, але життя внесло корективи. У радіостанції МК обробляє енкодер і натискання клавіш так, як і годиться, з «анти-дребезгом» контактів, із затримками реакції користувача. Тому в код брутфорсу внесено затримки. Та він весь побудований на затримках. Накидав утиліту для управління перебором. У разі зчитування даних драйвера, відмінних від «еталона», у утиліту на комп'ютер за UART передається пароль при якому це виникло.
Підсумок
Перебір запустив, і цокає. На даний момент нічого ще не збрутив. Але я не здаюся. Буду терпляче чекати закінчення. Зрозуміло, що з таким підходом можуть бути «помилкові» спрацювання. Але на загальному тлі майбутнього кількості перебраних паролів - це крапля в морі. Ці «помилкові» паролі в подальшому можна швидко перевірити через утиліту. По закінченню перебору обов'язково повідомлю, чим весь цей брутфорс закінчився і що в підсумку вийшло.
Вихідники утиліти, прошивка AtMega16 доступні на гітхабі.