Моя работа связана с телефонией. Однажды на известной торговой площадке я наткнулся на объявление о продаже бесплатно! телефонного аппарата Cisco SPA504g (на самом деле — aka Linksys/Sipura). Цена была обусловлена одной «досадной» мелочью — аппарат был «запаролен» оператором, который предоставляет услуги телефонии, отдавались они на запчасти. Аппаратов было много, прямо несколько десятков, для обучения даже такие бы пригодились. Поскольку таких аппаратов мне встречалось не мало, опыт сброса/разблокировки и даже «раскирпичивания» был, я с радостью согласился. Даже, на худой конец, на запчасти. Бородач, который выкатил тележку с горой аппаратов, без сожаления отдал её со словами типа «не охота паять». Но я то считал себя спецом, да и почти не расслышал его! Что с этого вышло — ниже.


Аппарат, как уже отмечалось, имеет корни от Linksys (весьма важное замечание, о котором не все догадываются), которые ранее были вообще Sipura. На заре своего погружения в VOIP я их даже путал. Не правда ли, весьма похожи? Однако аппараты не содержат ни одной общей детали, даже кнопки, даже трубки, ну разве что кабель от неё до самого аппарата.
Сами по себе аппараты слывут ��адежными, как автомат Калашникова, но сложными в настройке с кучей непонятных параметров. Документация по ним не слишком‑то глубока. А для сервисных центров в открытом доступе так вообще отсутствует. У Linksys‑ов неоднократно сталкивался с неработающими кнопками (аппараты все же древние, сейчас выкидывают по дешевке на торговых площадках в основном что‑то годов 2008-2012). С обратной стороны кнопок стирается токопроводящее графитовое напыление. Лучшее что можно — заменять их (резиновые кнопки), хоть на что‑то похожее.
Cisco SPA504G несколько поновее, встречаются в основном моложе 2012 годов (о них гласит характерная наклейка на задней крышке аппарата). И почему‑то очень часто встречались аппараты с лейблом на задней крышке: желтый полумесяц и синий мячик.

Родственные модели с разными буквами на конце — SPA501, SPA502, SPA512, SPA303 (без POE!!), SPA508, SPA509, SPA514, и даже весьма похожие на них SPA525 (хотя честно говоря прошивка на них несколько отличается). А SPA303 — так вообще выглядит копией SPA942, ну разве что с тремя кнопками.
Первым делом включаем аппарат, подаем ему 5В (желательно не менее 2А блок питания) в разъем на задней панели, либо Ethernet c POE в сетевую розетку SW. Телефон задумчиво молчит несколько секунд (без паники! он тестируется), потом светит диодами на прозрачных клавишах — зеленым на «громкая связь», «гарнитура» и красным на «микрофон». Потом загораются четыре оранжевых диода линий с подсветкой экрана, потом четыре диода гаснут, потом уже загораются все светодиоды (в том числе красный сверху над экраном). Потом должна вылезать заставка CISCO (ну или то, на что эту заставку поменяли при конфигурировании). В моем случае вылез гордый логотип оператора. Назовем его (не для рекламы)…. пусть «СОТЫ». Потом телефон начинает искать локальную сеть, и если кабель не вставлен в SW, зажигает красный светодиод на кнопке «микрофон» (как ни странно) — и высвечивает Initializing Network. Если в настройках стоял режим DHCP, то даже подсунув ему Ethernet, он будет инициализировать сеть. Только получив IP адрес (или восстановив его из backup) телефон наконец‑таки загрузится — сверху черная полоса и экран. В моем случае там высвечивалась заставка оператора, и практически ни одной программной клавиши в нижнем ряду.

Нажимаем кнопку с загнутым конвертиком (вторая сверху) и выбираем FactoryReset.
Телефон просит пароль. Понятное дело. Не отчаиваемся. Выбираем SetPassword, устанавливаем свой пароль для пользователя. Сохраняем, перезагружаемся. Вообще одна из отрицательных черт этого класса аппаратов — медлительность на фоне современных. Перезагрузка составляет порядка 50 секунд. Потом заходим в меню Network — там он даст установить свои параметры сети, маску, шлюз и VLAN (при работе с компьютером Windows не нужно, ну то есть ��тключено). Только устанавливать надо в неочевидные поля — они внизу меню типа Non‑DHCP IP address и подобные Non‑DHCP…
Подключаем компьютер, присваиваем ему адрес рядом с телефоном, открываем браузер и вбиваем IP телефона. Внимание! Аппарат не поддерживает https, и поэтому ручками в адресной строке правим на http. Открывается его web‑интерфейс. Весьма не богатый (пока). Для полного доступа ко всем настройкам надо выбрать в такой последовательности — Admin Login, потом advanced. Однако уже на этапе Admin Login всплывает окно авторизации. Логин admin, а пароль можно пытаться подобрать.
Я пробывал даже с ИИ написать скрипт для брут‑форса, однако это мало того, что небыстро, а еще и через несколько частых запросов телефон перестает на некоторое время отзываться, и дело вообще становиться невыносимо долгим.

Не отчаиваясь (да ты не бойся, я тыщу раз так делал!), подключаем WireShark и смотрим, куда этот телефон пытается отправлять запросы на провижинг.
Например так:

Чаще всего это происходит (по умолчанию) по протоколу TFTP, ну иногда по HTTP или FTP.
В примере выше бедолага пытается запросить у сервера 192.168.1.1 файлы конфигурации для своего mac-адреса SEP00E0A66641F9.cnf.xml, либо обобщенный для модели XMLDefault504G.cnf.xml, или на худой конец обобщенный XMLDefault.cnf.xml
По этой теме (как составлять файл провижинга) есть множество статей, в том числе на Хабре.
Минимальное его содержимое -
<?xml version="1.0" encoding="ISO-8859-1"?>
<flat-profile>
<Admin_Passwd ua="na"></Admin_Passwd>
</flat-profile>
Выше указан параметр – пустой пароль администратора. Поднимаем TFTP сервер, типа tftp32 под Windows, ну или под Linux – мне нравится tftp-hpa.
В обычном случае работает обновление конфигурации даже по запросу из браузера
http://<Phone_IP_Address>/admin/resync?tftp://<Server_IP_Address>/<имя конфигурационного файла>
Но тут стоит пароль администратора.
Перезагружаем телефон, он подтягивает конфигурацию, перезагружается, в этот момент можно выключить tftp сервер, после чего довольные сбрасываем аппарат в дефолт. С первым подобным аппаратом у меня несколько лет назад это заняло почти сутки.
Но статья не была бы такой длинной, если бы новая гора аппаратов вообще никак не провижинилась. Никуда. Только на сайт к провайдеру за регистрацией и ничего более.
Что ж, пробуем другие методы, в том числе социальной инженерии.
Подключение КГБ-ЦРУ, терморектальных криптоанализаторов, ремонтных мастерских и даже ранее официальных академии/курсов Cisco ни к чему не привели. Ремонтники либо откровенно разводили, либо пытались уговорить на замену платы. Академия же ответила осторожно – мол можно попробовать сбросить комбинацией клавиш при включении. Еще раз обращаю внимание, что аппараты Cisco серии SPA это совсем не Cisco, разве что сами телефонные трубки их роднят например с CP-7942G. И комбинации типа решетка, зажатая при включении, а затем 123456789*0# ну совсем не подходящие.
Из истории в веб-интерфейсе и в меню можно было посмотреть куда они звонили, ну и кто им звонил. Куча звонков на иностранные номера, на 8-800.. (обращаю внимание, именно так! И ни как иначе, номера +7-800…не имеют смысла, поскольку за входящий из-за границы вызов на бесплатный в РФ номер невозможно взимать плату на плече ДО границы). И из снифера можно увидеть с какими логинами на какой сервер они регистрировались.
Попробовал обратится к оператору…Тут можно написать целую сагу о техподдержке, но ограничусь малым. Обращался на горячую линию для корпоративных клиентов. Сейчас естественно, на номере поддержки сначала включаются роботы, речевые. Которые сходу требуют номер договора для корпоративного клиента. Однако добившись общения (стучался по всем линиям – в чате, на почту, по телефону) с человеком, разница не существенная. Я даже ездил в офис корпоративных клиентов. Для формирования обращения (даже не от клиента) им нужен номер договора! (пусть старого). Их практически запрограммировали, если не зазомбировали на этот критерий. Полмесяца общения привели к тому, что меня-таки услышали почти из верхов компании. Призывы о гуманитарной помощи, объяснения о том, что компания-держатель аппаратов покинула РФ, их mac-адреса, учетные записи для регистрации, история звонков с тех самых аппаратов, обернулись ответом:
«Уважаемый………, обговорив Ваш запрос с вышестоящим руководством, была создана заявка № ХХХХХХХХ, а также уведомила ответственных по части Корпоративная благотворительность.»
Неделя тишины… и ответ (надо честно сказать, что не отписка), в духе что это было очень, очень давно (как потом по истории звонков поглубже капнув, высмотрел год так 2015-2016), что все, кто мог быть причастными, скорее всего уволились.
Что ж, мы не привыкли отступать. Вспомнились обрывки статей о том, что у аппаратов есть что-то типа jtag или tty. Да…похоже бородач чего-то знал, что я не знал.
Разобрать аппарат собственно подтолкнула статья. Хотя она и о шлюзе, но делать-то больше было нечего.
Как выяснилось позднее, обрывки материалов про SPA504G тоже есть по этой теме в сети. Но скорее это мольбы о помощи в перепрошивке/раскирпичивании аппаратов на форумах, причем без ответов. Хотя выложенные там логи тоже интересны.
Откручиваем шесть винтов под torx th10 на задней панели.
Непосредственно основу телефона составляют три микросхемы.

Большая квадратная – центральный процессор. Оперативная память – на фото под ним, поменьше и с ногами вдоль длинной стороны Winbond, и самая интересующая в данный момент – флеш-память на 64МБ MX29LV640ETTI-70G с ногами вдоль коротких торцов. Встречается еще на Али.
Еще в телефоне применен дисплей 128х64 с подсветкой, но он относится к исчезающим видам динозавров в Интернете, и при выходе из строя (а бывало) сейчас уже легче купить донора.
Нам понадобится USB адаптер, брал самый дешевый на торговой площадке.

На ноутбуке хотя и есть железный Com, но на нем рабочие напряжения существенно выше, нежели для TTL логики.
Я приведу пример на Win7 ноутбуке с Putty, но можно (и у меня получалось) и на других системах, в том числе Linux. Настраиваем COM порт. Вставляем USB преобразователь в порт и ставим драйвер. Для Linux он как правило не нужен – такую древность, как адаптер виртуального порта, ядро поддерживает очень давно.
Потом на примере ОС Windows проверить, какой номер порта появился после подключения USB-TTY (виртуальный com-порт).
Правой клавишей Компьютер-Управление, и далее найти com-порт в диспетчере. В моем случае это 24.

Затем запускаем Putty, выбрать
Connection-Serial
COM24 - Скорость 9600 8-1-None-None

Выбрать Session Serial - Serial line - COM24, Speed - 9600
Чтобы сто раз потом не выбирать можно сохранить сессию, назвав её каким-нибудь удобным именем, а потом сразу выбирать из списка.

Перед тем, как припаивать, можно замкнуть передачу и прием (3 и 6 контакты обычной витой пары на преобразователе типа Cisco: зеленый и бело-зеленый). Нажимаем буквы в консоли – и в ней побегут эти же буквы. Если не бегут буквы – проблема! Смотреть внимательнее драйвер, номер и скорости порта, правильно ли нашли прием/передачу и запуск программы - произведен ли он от имени админа.
Вот так припаиваем:

Сверху вниз
GND
Пусто
Rx phone
Tx phone
Припаиваемся: передача нашего TTY кабеля на приём телефона и наоборот.
Кстати на фото желтый элемент похожий на конденсатор – самовосстанавливающийся предохранитель. Но горит по питанию если память не изменяет как правило не он, а элемент выше, это скорее варистор.
Подаем питание на телефон (5V 5,5x2,5 мм или POE в порт SW). Некоторые по подобию разъема подают питание любым блоком 5,5x2,5мм либо 9В либо 12В и получают сгоревший аппарат.
После включения питания в консоли побегут буковки, нажать ESC
Basic POST completed... Success.
Last reset cause: Software reset (memory controller also reset)
PSPBoot1.4 rev: 1.4.0.6
(c) Copyright 2002-2008 Texas Instruments, Inc. All Rights Reserved.
Press ESC for monitor... 1
(psbl)
пригласительная строка станет (psbl). В это время дисплей телефона пустой, на нем горят только красный и два зеленых светодиода.
Можно посмотреть доступные команды командой
help
если дали неправильную команду, можно стереть символы Shift+Backspace, но бывает что ошиблись, и нужно отключать питание телефона.

Пример команды для просмотра флеш-памяти
fa
Покажет из каких разделов состоит флешка.
PSBL – загрузчик
ENV – хранит переменные для загрузчика
RECOVERY – раздел с образом восстановления прошивки
KOS – заводские постоянные, в том числе MAC, серийный номер, версия аппаратного обеспечения, сертификат безопасности пользователя
FFS – развернутая из образа файловая система
(psbl) fa
Current Flash Allocation:
section : PSBL, base : 0xb0000000, size : 122176 bytes
section : ENV, base : 0xb0020000, size : 65536 bytes
section : RECOVERY, base : 0xb0030000, size : 131072 bytes
section : KOS, base : 0xb0050000, size : 1048576 bytes
section : FFS, base : 0xb0360080, size : 4789616 bytes
unallocated Space Start: 0xb0150000
unallocated Space End : 0xb0800000
(psbl) ls
FlashDiskDump for /
drwxrwxrwx 0:0 a: 0 i:0 Jul 27, 1999 2:17:40am 2 bin
drwxrwxrwx 0:0 a: 0 i:0 Jul 27, 1999 2:17:40am 2 etc
drwxrwxrwx 0:0 a: 0 i:0 Jul 27, 1999 2:17:40am 2 ttys
rwxrwxrwx 0:0 a: -1 i:1 Jan 1, 1970 12:00:00am 1473768 kosmos_ipp.st.gz
rwxrwxrwx 0:0 a: -1 i:1 Jan 1, 1970 12:00:00am 969342 sipapp.o.z
rwxrwxrwx 0:0 a: -1 i:1 Jan 1, 1970 12:00:00am 718468 spcpapp.o.z
rwxrwxrwx 0:0 a: -1 i:1 Jan 1, 1970 12:00:00am 6629 update
rwxrwxrwx 0:0 a: -1 i:2 Jan 1, 1970 12:00:00am 1248 ca_crt.der
rwxrwxrwx 0:0 a: -1 i:2 Jan 1, 1970 12:00:00am 12994 ca_crt.pem
rwxrwxrwx 0:0 a: -1 i:2 Jan 1, 1970 12:00:00am 425079 constdat.gz
rwxrwxrwx 0:0 a: -1 i:2 Jan 1, 1970 12:00:00am 8000 Double-Low-Twelve-Times.raw
rwxrwxrwx 0:0 a: -1 i:2 Jan 1, 1970 12:00:00am 8880 Eleven-Regular-Sharp-Very-Loud-Factory-Floor.raw
rwxrwxrwx 0:0 a: -1 i:2 Jan 1, 1970 12:00:00am 15520 Musical-Four-Reverb.raw
rwxrwxrwx 0:0 a: -1 i:2 Jan 1, 1970 12:00:00am 90776 nmm.conf
rwxrwxrwx 0:0 a: -1 i:2 Jan 1, 1970 12:00:00am 529377 pt1.ld
rwxrwxrwx 0:0 a: -1 i:2 Jan 1, 1970 12:00:00am 7200 Pulse1.raw
rwxrwxrwx 0:0 a: -1 i:2 Jan 1, 1970 12:00:00am 4000 Ring7.raw
rwxrwxrwx 0:0 a: -1 i:2 Jan 1, 1970 12:00:00am 349184 spa500ds_image.dat
rwxrwxrwx 0:0 a: -1 i:2 Jan 1, 1970 12:00:00am 3668 spa500ds_iso8859all10mono.dat
rwxrwxrwx 0:0 a: -1 i:2 Jan 1, 1970 12:00:00am 3668 spa500ds_iso8859all12bmono.dat
rwxrwxrwx 0:0 a: -1 i:2 Jan 1, 1970 12:00:00am 1241 spa_crt.der
rwxrwxrwx 0:0 a: -1 i:2 Jan 1, 1970 12:00:00am 608 spa_key.der
rwxrwxrwx 0:0 a: -1 i:2 Jan 1, 1970 12:00:00am 8160 Ten-Medium-Warble.raw
Можно посмотреть файловую систему на FFS разделе как показано выше - команда
ls
Собственно список переменных (некоторые я уже самостоятельно добавил)
(psbl) printenv
BUILD_OPS 0x977
MODETTY0 9600,n,8,1,hw
PATH /bin:/ttyS
CPUFREQ 162500000
MIPSFREQ 87500000
SYSFREQ 87500000
PROMPT (psbl)
bootloaderVersion 1.4.0.6
HWA_0 580A2087BC96
SUBNET_MASK 255.255.0.0
IPA 192.168.1.2
IPA_SVR 192.168.1.1
SerialNumber CCQ18270C1S
HWRevision 1.0.4
HWRevison 1.0.4
IPA_GATEWAY 192.168.1.1
HOSTNAME TNETV1050SDB
Можно самому с помощью команды setenv задать параметры
HWA_0 - mac-адрес
SUBNET_MASK маска подсети
IPA свой адрес
IPA_SVR адрес сервера tftp
IPA_GATEWAY адрес шлюза по умолчанию
Прошить аппарат из этого режима можно командой
(psbl) upgrade
Usage: upgrade [-i server_address] firmware_file
Прошивку можно взять на сайте Cisco. Но форум для нас пару лет как заблокирован, пользуйтесь обходными путями. Если прошивка была старше 7-5-2, то сначала надо шиться на 7-5-2b, затем на более свежие, хоть на 7-6-2g.
Но даже прошившись, вы не скинете конфигурацию.....
Для начала я отформатировал раздел FFS.
Тут все легко
fmt
И побежало форматирование, где-то одну минуту. Раздел FFS заполнится единичками.
Потом можно дать команду reboot или дернуть питание.
Телефон вывалится во второй режим - SOS Recovery Mode, который отобразится на экране.
Он чуть-чуть пошире, нежели (psbl), но из него тоже можно прошиться. Внимательно смотрите на логи – если телефон в StaticIP, то он покажет свой адрес, маску, и путь к серверу и файлу, из которого он хочет прошиться. Или придется подкидывать DHCP.
Тут я не рассматриваю утилиту восстановления, например spa5x5-7-4-4-recovery.exe или подобные. Хотя именно эта для SPA525, однако она (если я не путаю и помнится верно) помогала и для SPA303. При старте будет выбор – прошивать или восстанавливать прошивку? Выбираем восстановление. Вместо серийника можно написать кучу FFFF, телефон прошьется, и после перезагрузки восстановится.
Из этого же файла (или подобных exe) можно выдернуть и саму прошивку – распаковываем архиватором 7z, внутри самый большой файл 112. Вытаскиваем из архива и переименовываем.
Попробовал следующую команду
fmtkosmos

После нажимаем ENTER
ждем 10-15 секунд, когда снова появится пригласительная строка, перезагружаем по питанию или командой reboot.
Телефон раза два перезагрузится, и скинет конфигурацию в дефолт.
На дисплее появится CISCO и ожидание настройки сети. Если сеть подключена и выдан DHCP – то отобразиться меню на дисплее.
Вскоре выяснился побочный эффект, не сразу запримеченный на волне радости – все аппараты сбросили серийный номер (да и не жалко), а вот mac-адрес стал у всех одинаковый. Раздел KOS сейчас содержит единички. Причем в режиме (psbl) это один mac-адрес, такой же во втором режиме (SOS RecoveryMode) и другой адрес в полностью загруженном аппарате.
Кроме того я в ходе экспериментов также удалял и раздел Recovery, в результате аппарат работал, его можно было прошить и восстановить раздел.
Таким образом аппараты сброшены в настройки «по умолчанию», пароли администратора тоже сброшены. Для установки в одном сегменте локальной сети такие аппараты не подходят теперь, но в разные сети с маршрутизацией или в разные vlan-ы вполне. Откуда он берет настройки адреса mac так осталось и непонятным. Скорее всего из прошивки. Тут есть материал про прошивку аппарата, как из модулей склеить файл и много интересного
Буду рад подсказкам, как можно вернуть аппаратам разные mac.
sekuzmin
Во-первых аплодисменты за настойчивость и смелость, после таких экспериментов устройство обычно превращается в кирпич. За что уважение инженерам, которые находят место для two stage bootloader и recovery.
Если проскроллить текст выше, написано, что
В прошивке есть упоминания нескольких MAC: HWA_0, HWA_1 и HWA_SWITCH
dimone73 Автор
Эти параметры работают только в режиме (psbl) и то, не все