Введение
Несмотря на чрезвычайную популярность смартфонов, обычные кнопочные телефоны не потеряли свою актуальность среди людей, которым нужны исключительно базовые функции связи.
Рынок РФ заполнен множеством моделей разных характеристик, размеров, форм-факторов и расцветок: от миниатюрных телефонов размером с автомобильный брелок для удобной доставки на зону, до моделей а-ля 90-е, которыми можно убить грудного ребёнка.
Купил я телефон Inoi 101: дешевый, но функционально достойный даже на фоне более дорогих моделей. Всё бы хорошо, если бы не нежелательная функциональность, присущая большинству недорогих звонилок:
-
Пробные игры с покупкой полной версии через СМС, причём состояние покупки сбрасывается при полном сбросе устройства;
-
Встроенное меню СМС-подписок «Funbox»: гороскопы, анекдоты, новости, прочая платная ерунда.
Попробуем устранить недостатки путём анализа и модификации прошивки.
Чипсет
Современные кнопочные девайсы строятся на платформах трёх производителей: RDA Microelectronics, Spreadtrum, Mediatek. Первой компании уже не существует: её купил Spreadtrum в середине 2015. Обе компании ребрендировали под именем Unisoc в 2018 году.
Рассматриваемый телефон работает на последнем чипе «классического» RDA семейства Gallite, и был сделан уже после покупки компании, из-за чего у чипа два названия: RDA8826C (RDA’шное) и SC6533g (Spreadtrum’овское). В интернете нет не только datasheet’ов, но и почти никакой публичной информации об этой модели.
Архивная страница сайта rdamicro.com 2017 года скупо повествует нам о ключевых возможностях SoC’а:
General Description
RDA8826C is a high performance, highly integrated system-on-chip solution for low cost, low power, GSM/GPRS mobile phone.
Integrating all essential electronic components, including baseband, quad band RF transceiver, power management, FM receiver, Bluetooth onto a single system on chip, RDA8826C offers best in class bill of material, space requirement and cost/feature ratio for complete phone handsets.Key Features
1. MIPS 312MHz processor
2. GSM/GPRS modem
3. 32Mb Flash and 64Mb PSRAM integrated
4. 320×480(HVGA) resolution
Нынешние телефоны построены в основном на процессорах Spreadtrum и Mediatek архитектуры ARM. Inoi 101 — не только «последний из могикан» на чипе ныне несуществующей компании, но и работает на ныне непопулярной архитектуре, с не самым известным набором команд MIPS16e, в котором инструкции кодируются в 2 байта вместо четырех, для уменьшения размера прошивки, что жизненно необходимо устройству со всего 4 МБ (32 Мбит) флеша.
Печальный факт: производители современных звонилок агрессивно экономят на флеш-памяти. Доступный пользователю объем выражается, как правило, десятками килобайт.
Вы не сможете пользоваться диктофоном или камерой без MicroSD-карты. Количество контактов и СМС-сообщений в памяти телефона ограничено, как и длина поля «имя», и общее количество полей записной книги.
Для сравнения, в Samsung X100 2003 года выпуска пользователю было доступно 9 мегабайт памяти, в Siemens C65 2004-го — 6 МБ.
Такова плата за дешевизну: X100 — $230 на старте продаж, Inoi 101 — $9.
SoC RDA8826 содержит в себе центральный процессор RDA8809e2, Baseband-процессор CT8851C, Bluetooth и FM-модули rdabt_8809 и rdafm_8809. Достоверная информация о всех компонентах в интернете не представлена.
Получение прошивки
Чтобы модифицировать прошивку, нужно сначала завладеть ей. Самый простой вариант — поискать на веб-сайте производителя. Inoi выкладывает прошивки ко всем своим моделям, но они не всегда самые последние — оказалось, что в версии с сайта отсутствует набор Т9 и игра «Тетрис».
Что-ж, телефон уже прошит, придётся покупать второй и скачивать актуальную прошивку с него. Сделать это можно, в случае RDA, только сторонними программами, т.н. «боксами» — аппаратно-программными комплексами для прошивки и восстановления от сторонних разработчиков. Обычно необходимо купить сам «бокс» (устройство с набором кабелей) и подписку на ПО, но к счастью подходящее ПО уже есть взломанной версии, отвязанное и от бокса, и от подписки — Miracle Thunder 2.82 от Gsm_X_Team. Относитесь к этому ПО как к трояну — устанавливайте на отдельный компьютер, без интернета (в виртуалке не работает).
Официальные прошивки поставляются в текстовом формате .lod. Этот формат описывает процесс прошивки поблочно, в соответствии с размерами блоков флеш-памяти, в виде адреса загрузки и бинарных данных, закодированных по 4 байта little endian. Формат нестандартный, но простой, без особенностей. Единственное, что нужно учесть при написании конвертера — файл описывает не все блоки флеша, некоторые из блоков не программируются (есть «дыры»).
#$mode=flsh_spi32m
#$sectormap=(16 x 4k, 57 x 64k, 96 x 4k)
#$base=0x08000000
#$spacesize=0x08000000
#$XCV_MODEL=xcv_8809e2
#$PA_MODEL=pasw_hs8292u
#$FLSH_MODEL=flsh_spi32m
#$FLASH_SIZE=0x00400000
#$RAM_SIZE=0x00800000
#$RAM_PHY_SIZE=0x00800000
#$CALIB_BASE=0x003FA000
#$FACT_SETTINGS_BASE=0x003FE000
#$CODE_BASE=0x00000000
#$USER_DATA_BASE=0x00380000
#$USER_DATA_SIZE=0x0007A000
#$PM_MODEL=pmu_8809
#$FM_MODEL=rdafm_8809e
@08000000
d9ef0045
00000000
00000000
00000000
27bdffd0
afb10028
00808821
3c0481e0
…
Открываем дамп флеша или преобразованный файл прошивки в вашем любимом дисассемблере, начинаем анализировать, быстро разочаровываемся: строк мало, сегментация памяти непонятная, IDA норовит неправильно определить MIPS32/MIPS16-код, тут и там странные указатели 0x82xxxxxx на оперативную память, в которые никто не пишет…
Скребём по сусекам
Раз не получается найти спецификацию на процессор, попробуем поискать какие-либо исходники по немногочисленным строкам, найденным в прошивке.
Поиск приводит к двум репозиториям: https://github.com/jprothwell/sc-fix и https://github.com/cherryding1/RDA8955_W17.44_IDH
По первой ссылке можно скачать старые, но достаточно актуальные исходные коды загрузчика, HAL, пользовательского интерфейса и всей обвязки для старого семейства чипов RDA, а по второй ссылке доступен memory layout [1], [2] для нашего процессора.
Из заголовочных файлов узнаём самое основное:
-
Флеш располагается по адресу 0x88000000 (4 МиБ)
-
Оперативная память — в 0x82000000 (8 МиБ)
-
SRAM — 0x81C00000 (64 КиБ)
-
BootROM — 0x81E00000
UI на моём устройстве построен на форке фреймворка MMI (man-machine interface) от компании Pixtel — CoolMMI. Подобный фреймворк используется и в ОС для кнопочных телефонов Mediatek MAUI, под названием PlutoMMI.
Фреймворк создавался в лучшие годы кнопочных телефонов, с соответствующим качеством кода — всё завязано на глобальные переменные, глобальные состояния, магические константы, массивы строк, массивы функций-обработчиков кнопок. Монолитная архитектура без какой-либо модульности (даже минимальной) не позволяет писать красивый код — разные функциональные возможности активируются #define’ами в унифицированных *.c-файлах для всех случаев, затрудняющими чтение кода.
Обращение к текстовым строкам, ресурсам, задачам, меню, элементам NVRAM происходит с помощью уникального цифрового идентификатора, что затрудняет исследование: вы видите только цифры, далеко не сразу поддающиеся установке соответствия в осмысленную строку, пункт меню или ресурс.
/* Get current screen to gui buffer for history purposes*/
guiBuffer = GetCurrGuiBuffer( SCR_CALL_TIME_SETUP_MAIN );
/* Retrieve no of child of menu item to be displayed */
nNumofItem = GetNumOfChild( MENU_CALL_TIME_SETUP );
/* Get attribute of menu to be displayed */
//nDispAttribute = GetDispAttributeOfItem( MENU_CALL_TIME_SETUP );
/* Retrieve string ids in sequence of given menu item to be displayed */
GetSequenceStringIds( MENU_CALL_TIME_SETUP, nStrItemList );
/* Set current parent id*/
SetParentHandler( MENU_CALL_TIME_SETUP );
/* Register highlight handler to be called in menu screen */
RegisterHighlightHandler( ExecuteCurrHiliteHandler );
/* Construct hint for menu items */
ConstructHintsList(MENU_CALL_TIME_SETUP, displayBuffer);
/* Display Category1 Screen */
ShowCategory52Screen( STR_MENU_CALL_TIME_SETUP, IMG_MENU_CALL_TIMES,
STR_GLOBAL_OK, IMG_GLOBAL_OK, STR_GLOBAL_BACK,
IMG_GLOBAL_BACK, nNumofItem, nStrItemList,
(U16 *)gIndexIconsImageList,
displayBuffer, 0, 0, guiBuffer );
/* Register function with right softkey */
SetKeyHandler( GoBackHistory,KEY_LEFT_ARROW, KEY_EVENT_DOWN);
SetRightSoftkeyFunction( GoBackHistory, KEY_EVENT_UP );
return;
Начальную информацию об основных функциях PlutoMMI от Mediatek можно почерпнуть из файла mmi framework and architecture.pdf. Архитектура CoolMMI и PlutoMMI совпадает в достаточной мере, чтобы пользоваться (аналогично скудной) документацией конкурирующего производителя.
Поиск сжатых ресурсов
Итак, память размечена правильно, а кардинальных изменений не видно — множество функций продолжают вызывать код из оперативной памяти, но найти, кто пишет в эти адреса, с наскока не получается. Да и ресурсов подозрительно мало.
После непродолжительного анализа обнаруживаются три особенности:
Переиспользование функций из BootROM
Для максимальной экономии пространства на флеш-памяти производитель реализовал наиболее востребованные функции библиотеки C непосредственно в ROM-памяти чипа: строковые функции (strlen, strcmp, strcpy, strcat, strtok), функции сравнения и копирования памяти (memcmp, memcpy, memmem, memchr), форматирования и вывода (sprintf, vsprintf), поиска и сортировки (bsearch, qsort) вызываются из памяти ROM, и не содержатся в коде прошивки, экономя драгоценные килобайты.
Сжатие кода и ресурсов алгоритмом LZMA
Код наиболее объемных «модулей» (WAP-браузера, мультимедиа-плеера, приложения FM-радио, инженерного меню) хранится в сжатом виде, а распаковывается один раз, при запуске телефона. Ничего дополнительного после распаковки не происходит: код скомпонован так, будто эти модули всегда в оперативной памяти по фиксированным адресам.
Аналогично распаковываются текстовые строки, но только для одного, текущего языка.
Копирование несжатого кода в оперативную память
Самый архитектурно важный код ОС копируется в оперативную память и выполняется из неё. Вероятно, это сделано для максимальной скорости исполнения базовых функций ОС.
Сжатые ресурсы легко находятся через binwalk. Можно было бы каждый из них вручную распаковать и загрузить в текущую базу IDA по корректным адресам, но я нашел способ проще, надёжней и быстрее.
Снятие оперативной памяти
Оказалось, протокол прошивки не только простой, но и разрешает чтение произвольных адресов без какой-либо подготовки, прямо во время работы телефона. В интернете была найдена готовая программа для чтения прошивки через UART, которая после модификации была использована для чтения всех 8 МиБ оперативной памяти через USB. 2 минуты — и никакой ручной работы!
Чтобы получить коммандный порт через USB, можно воспользоваться модулем usb-serial в Linux. Достаточно всего лишь «научить» модуль работать с RDA:
$ echo 1e04 0900 | sudo tee /sys/bus/usb-serial/drivers/generic/new_id
Отныне нам доступны все распакованные функции и ресурсы в оперативной памяти, что позволяет нам беспрепятственно их проанализировать.
«Покупаем» игры
В рассматриваемом телефоне присутствуют 3 платных игры производства Gameloft: Danger Dash, Ninja Up, Tetris. Первая — раннер, без какой-либо физики прыжка, вторая — примитивный фроггер с одним экраном, играть можно разве что в тетрис, но он начинает тормозить при заполнении экрана фигурами.
Каждая игра запускается всего 5 раз, далее их предлагается оплатить. Игры стоят 99 рублей каждая — половину стоимости телефона — обдираловка!
С точки зрения пользователя, покупка совершается так: нажимаем на кнопку «купить», телефон отправляет платное СМС, пользователю приходит ответный код, который нужно ввести в окно регистрации. Но если купить игру, запомнить ответный код, сбросить телефон и попробовать заново ввести этот же код, то он, с большой вероятностью, не подойдет.
Как так?
Алгоритм следующий:
-
Генератор псевдослучайных чисел инициализируется значением текущей минуты;
-
Генерируется псевдослучайное число от 1000 до 9999;
-
Случайное число отправляется в СМС и сохраняется в NVRAM;
-
Ответный код проверяется с учётом сохраненного случайного числа.
Связка запрос-ответ уникальна для каждой модели, и зависит от той минуты, в которую была нажата кнопка «купить»:
game_response_code = (1000 * (game_random % 10)
+ game_random / 1000
+ 100 * (game_random / 10 % 10)
+ 10 * (game_random / 100 % 10)) ^ 0x1D6B;
game_code_temp = game_response_code;
game_response_code = atoi("28060") + game_code_temp;
return game_response_code == input_code;
Где 28060 — идентификатор телефона Inoi 101.
Этот нехитрый алгоритм легко реализовать в виде кейгена, что я и сделал: http://gameloft-keygen.valdikss.org.ru/
К слову, на телефонах с Mediatek алгоритм кода регистрации точно такой же, но алгоритм генерации псевдослучайных чисел отличается.
Самый простой способ зарегистрировать игры навсегда — пропатчить код инициализации, заменив переменные количества демо-запусков на переменные купленности игры. Так как эта функция находится в несжатой области кода, проблем с её модификацией не возникнет.
Найти функции можно по отладочным строкам, содержащим характерное имя файла:
Отключаем Funbox
Меню платных СМС-подписок — ожидаемая, но неуместная функция послепродажного заработка денег производителем. Одно неловкое нажатие — и минимум 5 рублей со счёта в сутки вам обеспечено. Подобные вещи позволяют держать цены на кнопочные телефоны на очень низком уровне, но в моём устройстве им не место.
Как и в случае с играми, в функциях Funbox присутствует отладочный вывод номеров строк с именем файла «src/gmb_smart_sms_win.c». С этих строк можно «дошагать» до функции-обработчика выделения элемента главного меню (в CoolMMI они называются hilite, очевидно имеется в виду highlight), в котором и находится иконка.
Методом проб и ошибок удалось обнаружить обработчик входа в интерфейс подписок, который был благополучно за’nop’лен — нажатие на иконку Funbox центральной кнопкой или левой софт-клавишей более ни к чему не приводят.
Функция расположена в несжатой области и легко поддаётся изменению.
Исправляем громкость
Компонент аудиоусилителя телефона имеет 15 ступеней усиления, но для мультимедии прошивка телефона предусматривает всего 7 уровней громкости, с большими шагами между ними. Это неудобно: на «единице» телефон еле слышно, а на «двойке» он сразу ОРЁТ.
Попробуем исправить эту проблему. В заголовочных файлах быстро находится регистр CONFIG_REGS по базовому адресу 0x01A24000, структура которого описывается следующим образом:
#define REG_CONFIG_REGS_BASE 0x01A24000
#define hwp_configRegs ((HWP_CFG_REGS_T*) KSEG1(REG_CONFIG_REGS_BASE))
typedef volatile struct
{
REG32 CHIP_ID; //0x00000000
/// This register contain the synthesis date and version
REG32 Build_Version; //0x00000004
/// Setting bit n to '1' selects GPIO Usage for PAD connected to GPIOn. Setting
/// bit n to '0' selects Alt.
REG32 GPIO_Mode; //0x00000008
REG32 Alt_mux_select; //0x0000000C
REG32 IO_Drive1_Select; //0x00000010
REG32 IO_Drive2_Select; //0x00000014
REG32 audio_pd_set; //0x00000018
REG32 audio_pd_clr; //0x0000001C
REG32 audio_sel_cfg; //0x00000020
REG32 audio_mic_cfg; //0x00000024
REG32 audio_spk_cfg; //0x00000028
REG32 audio_rcv_gain; //0x0000002C
REG32 audio_head_gain; //0x00000030
} HWP_CFG_REGS_T;
//audio_spk_cfg
#define CFG_REGS_AU_SPK_GAIN(n) (((n)&15)<<0)
#define CFG_REGS_AU_SPK_MUTE_N (1<<4)
Использование регистра происходит через сегмент KSEG1, в обход MMU и кешей. Полный адрес audio_spk_cfg, обращения к которому нужно искать в дисассемблере — 0xA1A24028.
После непродолжительного поиска обнаруживается функция, преобразующая уровень усиления (по всей видимости, в децибелах) в значение SPK_GAIN:
int __fastcall volume_maps(int a1) // 0x88038184
{
int result; // $v0
result = 0;
if ( a1 >= 5 )
{
result = 2;
if ( a1 >= 14 )
{
result = 4;
if ( a1 >= 18 )
{
result = 6;
if ( a1 >= 20 )
{
result = 8;
if ( a1 >= 22 )
{
result = 10;
if ( a1 != 22 )
{
result = 12;
if ( a1 != 23 )
return 14;
}
}
}
}
}
}
return result;
}
Изменив уровни с [0, 2, 4, 6, 8, 10, 12, 14] на [0, 1, 2, 3, 5, 6, 8, 10], мы получили более плавную регулировку ценой уменьшения максимальной громкости, которая всё равно только приводила к перегрузу маломощного динамика телефона.
Если при воспроизведении MP3-файлов положительный эффект очевиден, то громкость FM-радио всё ещё регулируется с недостаточной гранулярностью. Вероятно, это аппаратная проблема подключения FM-чипа.
Неожиданные трудности
Для MIPS существует два стандарта 16-битных инструкций: MIPS16e и microMIPS. Первый является дополнением (extension) к архитектуре MIPS32: код может использовать одновременно оба набора инструкций, процессор может переключаться между режимом выполнения MIPS32 и MIPS16e в любое время, прыжком на нечётный адрес инструкции. Не все инструкции и возможности MIPS можно выразить командами MIPS16e — иногда переключение в режим MIPS32 просто необходимо.
microMIPS же — полноценная архитектура с полным набором 16-битных команд. Вот что говорит официальная брошюра:
The benchmarks prove that the microMIPS architecture delivers similar memory savings as the MIPS16e ASE, but with much better performance. The question is how? The list of reasons includes new optimized 16- and 32-bit instructions, an optimized recoding of MIPS32 instructions, and optimized op code format and register utilization.
The earlier stated fact that microMIPS is a complete architecture – not an extension − is also key. Both MIPS16e, and for that matter the similarly-targeted ARM Thumb technologies, are extensions. Both microMIPS and these extensions rely on the concept of new 16-bit versions of regularly used instructions to minimize code size. And all deliver reductions in code size. But only microMIPS delivers 32-bit performance.
The microMIPS mode can handle all operations such as exception handling, and offers a superset of the MIPS32 ISA. With MIPS16e, the programmer had to swap modes to use ASEs such as MIPS DSP. The microMIPS mode can seamlessly access the ASEs. The need to run legacy binary code is really the only reason that would prompt a programmer to use the MIPS32 mode.
Проблема в том, что привычные утилиты инлайн-ассемблирования кода для патча программы, такие как rasm2 из состава Radare2 и kstool из KeyStone, не поддерживают режим MIPS16e. Они либо ассемблируют 32-битные команды, несмотря на то, что выбран 16-битный режим, либо выводят опкоды, явно не соответствующие MIPS16e.
К счастью, ассемблер gcc поддерживает режим MIPS16e, а работать с ним почти так же удобно, как с rasm2/kstool. Есть, разве что, одна особенность: он выравнивает блок nop’ами.
$ echo 'jr $ra' | mips64-linux-gnu-as -o /dev/null -al -mips16 -32
GAS LISTING page 1
1 0000 E8206500 jr $ra
1 65006500
1 65006500
1 65006500
Вывод
Надеюсь, эта небольшая заметка поможет исследователям прошивок кнопочных телефонов на платформе RDA и подогреет желание к погружению в звонилки на платформах других производителей. Доступные в любом магазине, эти дешевые но полнофункциональные двухсимочные телефоны с доступом в интернет так и просятся в руки хакеров, чтобы их адаптировали не только под базовые потребности связи.
Как оказалось, нет ничего сложного в минимальном изменении функциональности подобных устройств. Автор не столкнулся с неразрешимыми проблемами, проделанный путь в целом совпадает с анализом прошивкок любого другого устройства, а доступные исходники, хоть и устаревшие, позволяют разобраться в архитектуре и, при желании, интегрировать новые функции, не обладая кодом самой прошивки.
Готовую модифицированную прошивку для Inoi 101 можно скачать на GSMForum.ru: https://gsmforum.ru/threads/inoi-101-modificirovannaja-proshivka.337775/
Случаются моменты, когда нужно сменить программное обеспечение на мобильном телефоне. От этой мысли у многих становятся дыбом волосы и учащается сердцебиение. И зря, ведь на самом деле сделать это нетрудно.
Зачем прошивать мобильный телефон?
Сейчас время компьютерных технологий и плоских смартфонов с сенсорным экраном. Однако, вопреки технологическому буму, не стоит сбрасывать со счетов старые кнопочные мобильные телефоны. Те самые «кирпичи», слайдеры и «раскладушки», которые были у каждого буквально несколько лет назад. Никто и не думал о смене ПО на этих легендарных аппаратах. Спрашивается, зачем их вообще прошивать?
Прошивка телефона («Самсунг», «Нокиа» и др.) может производиться по следующим причинам:
- программное обеспечение устройства вышло из строя или стало работать хуже;
- для получения более нового ПО.
Мало кто видел, чтобы у такого устройства слетала система, однако такое вполне возможно, и причин для этого предостаточно. К тому же официальные и независимые разработчики выпускают новые версии прошивки для этих гаджетов.
Прошивка телефона через компьютер
Перед тем как поставить новое программное обеспечение, нужно помнить несколько моментов.
- Для начала нужно создать резервную копию всех данных (контакты, смс, настройки и т.д.) телефона на компьютер. Сделать это можно с помощью специализированных программ (MyPhoneExplorer и другие).
- После этого необходимо обязательно зарядить мобильный: не ниже 80 % батареи, хотя лучше на все 100 %.
- Лучше всего, чтобы прошивка телефона через компьютер происходила с помощью ноутбука. Причина в том, что в нем есть аккумулятор, в результате чего из-за случайного выключения электричества будет возможность закончить начатый процесс. Иначе последствия могут быть катастрофическими.
Для прошивки понадобятся следующие вещи:
- само собой, телефон, заряженный на 100 %;
- дата-кабель (в большинстве случаев используется USB, однако для некоторых мобильных устройств нужен именно специальный дата-кабель);
- файл прошивки; его необходимо скачать из Интернета, однако перед этим нужно тщательно ознакомиться с информацией, почитать комментарии и отзывы, а перед этим нужно узнать версию старой прошивки: вводим на клавиатуре код *#06# (для Nokia будет другой код — *#0000#);
- драйвера на мобильное устройство;
- программа для прошивки телефона («прошивальщик»).
Программы
Утилит для прошивки довольно много и подразделяются они на две категории:
- общие, которые подходят для всех моделей;
- те, которые предназначены для одного производителя (например, программа «Феникс» для прошивки телефонов Nokia).
Общие утилиты могут прошить практически любую модель. Однако если существует программа, которая создана специально для определенной марки мобильных устройств, лучше использовать её, так как в ней уже содержатся все необходимые драйвера и, возможно, сама ОС. Вот небольшой перечень «прошивальщиков» для конкретных марок, которые помогут «вылечить» гаджет:
- для Nokia – Phoenix Service и официальный сервис Nokia Software Updater;
- Sony Ericsson – PC Companion (обновленная SEUS), неофициальная DaVinchi;
- LG – «прошивальщики» Speedo, GsMulti;
- Motorola – Flash&Backup, P2K;
- Samsung – OptiFlash;
- BenQ – Winswup, Update Tool.
Рассмотрим алгоритм работы на примере утилиты Phoenix.
Прошиваем Nokia
Перед тем как сделать прошивку телефона, нужно скачать и установить утилиту Phoenix («Феникс»), которая предназначена специально для этой марки. Кроме первичных приготовлений, которые описаны выше, нужно сделать ещё кое-что, а именно удалить все программы, которые каким-то образом могут быть связаны с мобильным устройством (Nokia Software Update, Nokia PC Suite и так далее) и почистить после них кэш и регистр. Иначе прошивка телефона «Нокиа» может пройти с ошибками. Также на всякий пожарный стоит отключить антивирус.
Теперь нужно установить драйвера Nokia Connectivity Cable Driver и Nokia Flashing Cable Driver. Подключаем мобильное устройство к ПК. Убедиться, что все драйвера на месте, можно в «Диспетчере устройств». Открываем свойства компьютера. После выбираем «Диспетчер устройств» и раскрываем пункт Wireless Communication Devices. Количество устройств должно быть от четырех до шести.
Подключаемся к компьютеру (выбрать режим PC Suite) и запускаем Phoenix. В пункте Connection нажимаем Setting. В открывшемся окне выбираем Add. Кликаем на выпадающий список Driver, выбираем USB и сканируем (Scan). Выделяем появившееся устройство. Нажимаем Select. Теперь из выпадающего списка в пункте Connection выбираем нужное устройство. Далее переходим во вкладку File\ Scan Product. После сканирования должно появиться внизу нужное мобильное устройство. Если это случилось, идем дальше.
Переходим в раздел Flashing, где нужно нажать Firmware Update. Теперь следует выбрать код. Если нет и малейшего понятия, какой нужен, тогда берем любой. При этом нужно помнить один момент: если желателен русский язык в телефоне, то ищем в названии файла прошивки слова Russian, Cyrillic или RU. Когда Product Code выбран, жмем на Refurbish. Поздравляем, прошивка телефона через компьютер началась. Длиться она будет примерно 7-10 минут. В это время не стоит трогать телефон, кабель или саму программу.
Flashtool
В случае если специальной утилиты нет и нужна прошивка телефона через компьютер, программа Flashtool с легкостью с этим справится при наличии файла ОС и драйверов, которые нужно будет найти самому.
Алгоритм работы следующий. Выключаем телефон, вынимаем и вставляем аккумулятор. Включаем программу Flashtool. Нажимаем на значок молнии, оставляем точечку на пункте Flashmode. Далее выбираем из списка скачанную прошивку в левом окошке и нажимаем «Ок». После должна появиться инструкция для подключения смартфона к ПК через USB-кабель. Делаем это, и программа для прошивки телефона начинает работать.
Прошиваем «Андроид»
Мобильные устройства на базе операционной системы «Андроид» гораздо чаще требуют смены ОС, нежели обычные мобильные телефоны. Причиной этому могут быть многочисленные вредоносные программы, скачанные из неизвестных источников приложения и т.д. Однако самая основная и наиболее частая причина выхода из строя смартфона – это его владелец.
Делается прошивка телефона через компьютер, однако можно обойтись и без него (в режиме Recovery).
С помощью ПК
Сначала нужно сделать некоторые приготовления.
- Скачиваем специальную утилиту для перепрошивки (Flashtool, Bootloader или программу от официального разработчика – PC Companion для Sony Ericsson, «Обновление ПО смартфонов Fly» для Fly и т.д.).
- Параллельно с этим скачиваем прошивку на конкретную модель устройства. При этом стоит обязательно ознакомиться с характеристиками, почитать комментарии и отзывы. Копируем прошивку в папку Firmwares программы Flashtool.
- Устанавливаем драйвера на ПК.
- Делаем резервную копию файлов со смартфона, а также копируем на компьютер содержимое флэшки (прошивка телефона через компьютер не оставит старых меток о расположении файлов на флэш-карте, поэтому создаст новые поверх старых).
- Находим USB-кабель, а также делаем отладку по USB (заходим в «Настройки», находим «Функции разработчика», далее отмечаем пункт «Отладка по USB» птичкой).
- Заряжаем устройство на 100 %.
После открываем утилиту Flashtool и проходим описанный выше алгоритм.
Без ПК
Делается это через режим Recovery. Для этого должен быть скачан и перемещен на карту памяти файл прошивки. Теперь выключаем смартфон и включаем Recovery. Для этого нужно одновременно зажать определенную комбинацию клавиш (питание и громкость вниз, вверх или меню – комбинация зависит от производителя). Точно узнать комбинацию можно, заглянув в паспорт устройства. Далее выбираем пункт «Apply Update From External Storage» (прошивка телефона «Самсунг» и многих других смартфонов на базе «Андроид» происходит так же).
Далее выбираем файл прошивки на флэшке и прошиваем.
Работаем над Windows Mobile
Со смартфонами на базе Windows Mobile дела обстоят намного проще. Для этого понадобится, собственно, сам гаджет, USB-кабель и программа Windows Phone Recovery Tool для компьютера. Для начала скачиваем эту утилиту с официального сайта (или по этой прямой ссылке: go.microsoft.com/fwlink/?linkid=522381, скачивание начнется автоматически), устанавливаем и запускаем. Программа сразу же начнет поиск обновлений, после чего попросит подключить смартфон к ПК.
Теперь начнется поиск и установка драйверов для подключенного устройства. Если их не оказалось, можно нажать на соответствующую кнопочку для поиска в Интернете. Когда драйвера будут установлены, появится большая плитка с изображением подключенного гаджета. Нажав на нее, вы запустите скачивание файла прошивки. Не стоит паниковать, если процесс идет слишком долго, так как файл может весить около гигабайта. Кроме того, если загрузка внезапно прервется, его всегда можно продолжить с момента остановки. Ещё есть один приятный момент: если возникнет желание прошить смартфон ещё раз, то скачивать уже ничего не придется, так как ОС останется на компьютере.
Когда загрузка закончится, появится кнопка Reinstal Software, нажав на которую, вы начнете установку ПО. При этом категорически нежелательно трогать телефон, USB-кабель, включать/выключать компьютер, так как результаты подобных манипуляций могут быть довольно плачевны.
Гаджеты, Реверс-инжиниринг, Сотовая связь
Рекомендация: подборка платных и бесплатных курсов дизайна интерьера — https://katalog-kursov.ru/
Введение
Несмотря на чрезвычайную популярность смартфонов, обычные кнопочные телефоны не потеряли свою актуальность среди людей, которым нужны исключительно базовые функции связи.
Рынок РФ заполнен множеством моделей разных характеристик, размеров, форм-факторов и расцветок: от миниатюрных телефонов размером с автомобильный брелок для удобной доставки на зону, до моделей а-ля 90-е, которыми можно убить грудного ребёнка.
Купил я телефон Inoi 101: дешевый, но функционально достойный даже на фоне более дорогих моделей. Всё бы хорошо, если бы не нежелательная функциональность, присущая большинству недорогих звонилок:
-
Пробные игры с покупкой полной версии через СМС, причём состояние покупки сбрасывается при полном сбросе устройства;
-
Встроенное меню СМС-подписок «Funbox»: гороскопы, анекдоты, новости, прочая платная ерунда.
Попробуем устранить недостатки путём анализа и модификации прошивки.
Чипсет
Современные кнопочные девайсы строятся на платформах трёх производителей: RDA Microelectronics, Spreadtrum, Mediatek. Первой компании уже не существует: её купил Spreadtrum в середине 2015. Обе компании ребрендировали под именем Unisoc в 2018 году.
Рассматриваемый телефон работает на последнем чипе «классического» RDA семейства Gallite, и был сделан уже после покупки компании, из-за чего у чипа два названия: RDA8826C (RDA’шное) и SC6533g (Spreadtrum’овское). В интернете нет не только datasheet’ов, но и почти никакой публичной информации об этой модели.
Архивная страница сайта rdamicro.com 2017 года скупо повествует нам о ключевых возможностях SoC’а:
General Description
RDA8826C is a high performance, highly integrated system-on-chip solution for low cost, low power, GSM/GPRS mobile phone.
Integrating all essential electronic components, including baseband, quad band RF transceiver, power management, FM receiver, Bluetooth onto a single system on chip, RDA8826C offers best in class bill of material, space requirement and cost/feature ratio for complete phone handsets.Key Features
1. MIPS 312MHz processor
2. GSM/GPRS modem
3. 32Mb Flash and 64Mb PSRAM integrated
4. 320×480(HVGA) resolution
Нынешние телефоны построены в основном на процессорах Spreadtrum и Mediatek архитектуры ARM. Inoi 101 — не только «последний из могикан» на чипе ныне несуществующей компании, но и работает на ныне непопулярной архитектуре, с не самым известным набором команд MIPS16e, в котором инструкции кодируются в 2 байта вместо четырех, для уменьшения размера прошивки, что жизненно необходимо устройству со всего 4 МБ (32 Мбит) флеша.
Печальный факт: производители современных звонилок агрессивно экономят на флеш-памяти. Доступный пользователю объем выражается, как правило, десятками килобайт.
Вы не сможете пользоваться диктофоном или камерой без MicroSD-карты. Количество контактов и СМС-сообщений в памяти телефона ограничено, как и длина поля «имя», и общее количество полей записной книги.
Для сравнения, в Samsung X100 2003 года выпуска пользователю было доступно 9 мегабайт памяти, в Siemens C65 2004-го — 6 МБ.
Такова плата за дешевизну: X100 — $230 на старте продаж, Inoi 101 — $9.
SoC RDA8826 содержит в себе центральный процессор RDA8809e2, Baseband-процессор CT8851C, Bluetooth и FM-модули rdabt_8809 и rdafm_8809. Достоверная информация о всех компонентах в интернете не представлена.
Получение прошивки
Чтобы модифицировать прошивку, нужно сначала завладеть ей. Самый простой вариант — поискать на веб-сайте производителя. Inoi выкладывает прошивки ко всем своим моделям, но они не всегда самые последние — оказалось, что в версии с сайта отсутствует набор Т9 и игра «Тетрис».
Что-ж, телефон уже прошит, придётся покупать второй и скачивать актуальную прошивку с него. Сделать это можно, в случае RDA, только сторонними программами, т.н. «боксами» — аппаратно-программными комплексами для прошивки и восстановления от сторонних разработчиков. Обычно необходимо купить сам «бокс» (устройство с набором кабелей) и подписку на ПО, но к счастью подходящее ПО уже есть взломанной версии, отвязанное и от бокса, и от подписки — Miracle Thunder 2.82 от Gsm_X_Team. Относитесь к этому ПО как к трояну — устанавливайте на отдельный компьютер, без интернета (в виртуалке не работает).
Официальные прошивки поставляются в текстовом формате .lod. Этот формат описывает процесс прошивки поблочно, в соответствии с размерами блоков флеш-памяти, в виде адреса загрузки и бинарных данных, закодированных по 4 байта little endian. Формат нестандартный, но простой, без особенностей. Единственное, что нужно учесть при написании конвертера — файл описывает не все блоки флеша, некоторые из блоков не программируются (есть «дыры»).
#$mode=flsh_spi32m
#$sectormap=(16 x 4k, 57 x 64k, 96 x 4k)
#$base=0x08000000
#$spacesize=0x08000000
#$XCV_MODEL=xcv_8809e2
#$PA_MODEL=pasw_hs8292u
#$FLSH_MODEL=flsh_spi32m
#$FLASH_SIZE=0x00400000
#$RAM_SIZE=0x00800000
#$RAM_PHY_SIZE=0x00800000
#$CALIB_BASE=0x003FA000
#$FACT_SETTINGS_BASE=0x003FE000
#$CODE_BASE=0x00000000
#$USER_DATA_BASE=0x00380000
#$USER_DATA_SIZE=0x0007A000
#$PM_MODEL=pmu_8809
#$FM_MODEL=rdafm_8809e
@08000000
d9ef0045
00000000
00000000
00000000
27bdffd0
afb10028
00808821
3c0481e0
…
Открываем дамп флеша или преобразованный файл прошивки в вашем любимом дисассемблере, начинаем анализировать, быстро разочаровываемся: строк мало, сегментация памяти непонятная, IDA норовит неправильно определить MIPS32/MIPS16-код, тут и там странные указатели 0x82xxxxxx на оперативную память, в которые никто не пишет…
Скребём по сусекам
Раз не получается найти спецификацию на процессор, попробуем поискать какие-либо исходники по немногочисленным строкам, найденным в прошивке.
Поиск приводит к двум репозиториям: https://github.com/jprothwell/sc-fix и https://github.com/cherryding1/RDA8955_W17.44_IDH
По первой ссылке можно скачать старые, но достаточно актуальные исходные коды загрузчика, HAL, пользовательского интерфейса и всей обвязки для старого семейства чипов RDA, а по второй ссылке доступен memory layout [1], [2] для нашего процессора.
Из заголовочных файлов узнаём самое основное:
-
Флеш располагается по адресу 0x88000000 (4 МиБ)
-
Оперативная память — в 0x82000000 (8 МиБ)
-
SRAM — 0x81C00000 (64 КиБ)
-
BootROM — 0x81E00000
UI на моём устройстве построен на форке фреймворка MMI (man-machine interface) от компании Pixtel — CoolMMI. Подобный фреймворк используется и в ОС для кнопочных телефонов Mediatek MAUI, под названием PlutoMMI.
Фреймворк создавался в лучшие годы кнопочных телефонов, с соответствующим качеством кода — всё завязано на глобальные переменные, глобальные состояния, магические константы, массивы строк, массивы функций-обработчиков кнопок. Монолитная архитектура без какой-либо модульности (даже минимальной) не позволяет писать красивый код — разные функциональные возможности активируются #define’ами в унифицированных *.c-файлах для всех случаев, затрудняющими чтение кода.
Обращение к текстовым строкам, ресурсам, задачам, меню, элементам NVRAM происходит с помощью уникального цифрового идентификатора, что затрудняет исследование: вы видите только цифры, далеко не сразу поддающиеся установке соответствия в осмысленную строку, пункт меню или ресурс.
/* Get current screen to gui buffer for history purposes*/
guiBuffer = GetCurrGuiBuffer( SCR_CALL_TIME_SETUP_MAIN );
/* Retrieve no of child of menu item to be displayed */
nNumofItem = GetNumOfChild( MENU_CALL_TIME_SETUP );
/* Get attribute of menu to be displayed */
//nDispAttribute = GetDispAttributeOfItem( MENU_CALL_TIME_SETUP );
/* Retrieve string ids in sequence of given menu item to be displayed */
GetSequenceStringIds( MENU_CALL_TIME_SETUP, nStrItemList );
/* Set current parent id*/
SetParentHandler( MENU_CALL_TIME_SETUP );
/* Register highlight handler to be called in menu screen */
RegisterHighlightHandler( ExecuteCurrHiliteHandler );
/* Construct hint for menu items */
ConstructHintsList(MENU_CALL_TIME_SETUP, displayBuffer);
/* Display Category1 Screen */
ShowCategory52Screen( STR_MENU_CALL_TIME_SETUP, IMG_MENU_CALL_TIMES,
STR_GLOBAL_OK, IMG_GLOBAL_OK, STR_GLOBAL_BACK,
IMG_GLOBAL_BACK, nNumofItem, nStrItemList,
(U16 *)gIndexIconsImageList,
displayBuffer, 0, 0, guiBuffer );
/* Register function with right softkey */
SetKeyHandler( GoBackHistory,KEY_LEFT_ARROW, KEY_EVENT_DOWN);
SetRightSoftkeyFunction( GoBackHistory, KEY_EVENT_UP );
return;
Начальную информацию об основных функциях PlutoMMI от Mediatek можно почерпнуть из файла mmi framework and architecture.pdf. Архитектура CoolMMI и PlutoMMI совпадает в достаточной мере, чтобы пользоваться (аналогично скудной) документацией конкурирующего производителя.
Поиск сжатых ресурсов
Итак, память размечена правильно, а кардинальных изменений не видно — множество функций продолжают вызывать код из оперативной памяти, но найти, кто пишет в эти адреса, с наскока не получается. Да и ресурсов подозрительно мало.
После непродолжительного анализа обнаруживаются три особенности:
Переиспользование функций из BootROM
Для максимальной экономии пространства на флеш-памяти производитель реализовал наиболее востребованные функции библиотеки C непосредственно в ROM-памяти чипа: строковые функции (strlen, strcmp, strcpy, strcat, strtok), функции сравнения и копирования памяти (memcmp, memcpy, memmem, memchr), форматирования и вывода (sprintf, vsprintf), поиска и сортировки (bsearch, qsort) вызываются из памяти ROM, и не содержатся в коде прошивки, экономя драгоценные килобайты.
Сжатие кода и ресурсов алгоритмом LZMA
Код наиболее объемных «модулей» (WAP-браузера, мультимедиа-плеера, приложения FM-радио, инженерного меню) хранится в сжатом виде, а распаковывается один раз, при запуске телефона. Ничего дополнительного после распаковки не происходит: код скомпонован так, будто эти модули всегда в оперативной памяти по фиксированным адресам.
Аналогично распаковываются текстовые строки, но только для одного, текущего языка.
Копирование несжатого кода в оперативную память
Самый архитектурно важный код ОС копируется в оперативную память и выполняется из неё. Вероятно, это сделано для максимальной скорости исполнения базовых функций ОС.
Сжатые ресурсы легко находятся через binwalk. Можно было бы каждый из них вручную распаковать и загрузить в текущую базу IDA по корректным адресам, но я нашел способ проще, надёжней и быстрее.
Снятие оперативной памяти
Оказалось, протокол прошивки не только простой, но и разрешает чтение произвольных адресов без какой-либо подготовки, прямо во время работы телефона. В интернете была найдена готовая программа для чтения прошивки через UART, которая после модификации была использована для чтения всех 8 МиБ оперативной памяти через USB. 2 минуты — и никакой ручной работы!
Чтобы получить коммандный порт через USB, можно воспользоваться модулем usb-serial в Linux. Достаточно всего лишь «научить» модуль работать с RDA:
$ echo 1e04 0900 | sudo tee /sys/bus/usb-serial/drivers/generic/new_id
Отныне нам доступны все распакованные функции и ресурсы в оперативной памяти, что позволяет нам беспрепятственно их проанализировать.
«Покупаем» игры
В рассматриваемом телефоне присутствуют 3 платных игры производства Gameloft: Danger Dash, Ninja Up, Tetris. Первая — раннер, без какой-либо физики прыжка, вторая — примитивный фроггер с одним экраном, играть можно разве что в тетрис, но он начинает тормозить при заполнении экрана фигурами.
Каждая игра запускается всего 5 раз, далее их предлагается оплатить. Игры стоят 99 рублей каждая — половину стоимости телефона — обдираловка!
С точки зрения пользователя, покупка совершается так: нажимаем на кнопку «купить», телефон отправляет платное СМС, пользователю приходит ответный код, который нужно ввести в окно регистрации. Но если купить игру, запомнить ответный код, сбросить телефон и попробовать заново ввести этот же код, то он, с большой вероятностью, не подойдет.
Как так?
Алгоритм следующий:
-
Генератор псевдослучайных чисел инициализируется значением текущей минуты;
-
Генерируется псевдослучайное число от 1000 до 9999;
-
Случайное число отправляется в СМС и сохраняется в NVRAM;
-
Ответный код проверяется с учётом сохраненного случайного числа.
Связка запрос-ответ уникальна для каждой модели, и зависит от той минуты, в которую была нажата кнопка «купить»:
game_response_code = (1000 * (game_random % 10)
+ game_random / 1000
+ 100 * (game_random / 10 % 10)
+ 10 * (game_random / 100 % 10)) ^ 0x1D6B;
game_code_temp = game_response_code;
game_response_code = atoi("28060") + game_code_temp;
return game_response_code == input_code;
Где 28060 — идентификатор телефона Inoi 101.
Этот нехитрый алгоритм легко реализовать в виде кейгена, что я и сделал: http://gameloft-keygen.valdikss.org.ru/
К слову, на телефонах с Mediatek алгоритм кода регистрации точно такой же, но алгоритм генерации псевдослучайных чисел отличается.
Самый простой способ зарегистрировать игры навсегда — пропатчить код инициализации, заменив переменные количества демо-запусков на переменные купленности игры. Так как эта функция находится в несжатой области кода, проблем с её модификацией не возникнет.
Найти функции можно по отладочным строкам, содержащим характерное имя файла:
Отключаем Funbox
Меню платных СМС-подписок — ожидаемая, но неуместная функция послепродажного заработка денег производителем. Одно неловкое нажатие — и минимум 5 рублей со счёта в сутки вам обеспечено. Подобные вещи позволяют держать цены на кнопочные телефоны на очень низком уровне, но в моём устройстве им не место.
Как и в случае с играми, в функциях Funbox присутствует отладочный вывод номеров строк с именем файла «src/gmb_smart_sms_win.c». С этих строк можно «дошагать» до функции-обработчика выделения элемента главного меню (в CoolMMI они называются hilite, очевидно имеется в виду highlight), в котором и находится иконка.
Методом проб и ошибок удалось обнаружить обработчик входа в интерфейс подписок, который был благополучно за’nop’лен — нажатие на иконку Funbox центральной кнопкой или левой софт-клавишей более ни к чему не приводят.
Функция расположена в несжатой области и легко поддаётся изменению.
Исправляем громкость
Компонент аудиоусилителя телефона имеет 15 ступеней усиления, но для мультимедии прошивка телефона предусматривает всего 7 уровней громкости, с большими шагами между ними. Это неудобно: на «единице» телефон еле слышно, а на «двойке» он сразу ОРЁТ.
Попробуем исправить эту проблему. В заголовочных файлах быстро находится регистр CONFIG_REGS по базовому адресу 0x01A24000, структура которого описывается следующим образом:
#define REG_CONFIG_REGS_BASE 0x01A24000
#define hwp_configRegs ((HWP_CFG_REGS_T*) KSEG1(REG_CONFIG_REGS_BASE))
typedef volatile struct
{
REG32 CHIP_ID; //0x00000000
/// This register contain the synthesis date and version
REG32 Build_Version; //0x00000004
/// Setting bit n to '1' selects GPIO Usage for PAD connected to GPIOn. Setting
/// bit n to '0' selects Alt.
REG32 GPIO_Mode; //0x00000008
REG32 Alt_mux_select; //0x0000000C
REG32 IO_Drive1_Select; //0x00000010
REG32 IO_Drive2_Select; //0x00000014
REG32 audio_pd_set; //0x00000018
REG32 audio_pd_clr; //0x0000001C
REG32 audio_sel_cfg; //0x00000020
REG32 audio_mic_cfg; //0x00000024
REG32 audio_spk_cfg; //0x00000028
REG32 audio_rcv_gain; //0x0000002C
REG32 audio_head_gain; //0x00000030
} HWP_CFG_REGS_T;
//audio_spk_cfg
#define CFG_REGS_AU_SPK_GAIN(n) (((n)&15)<<0)
#define CFG_REGS_AU_SPK_MUTE_N (1<<4)
Использование регистра происходит через сегмент KSEG1, в обход MMU и кешей. Полный адрес audio_spk_cfg, обращения к которому нужно искать в дисассемблере — 0xA1A24028.
После непродолжительного поиска обнаруживается функция, преобразующая уровень усиления (по всей видимости, в децибелах) в значение SPK_GAIN:
int __fastcall volume_maps(int a1) // 0x88038184
{
int result; // $v0
result = 0;
if ( a1 >= 5 )
{
result = 2;
if ( a1 >= 14 )
{
result = 4;
if ( a1 >= 18 )
{
result = 6;
if ( a1 >= 20 )
{
result = 8;
if ( a1 >= 22 )
{
result = 10;
if ( a1 != 22 )
{
result = 12;
if ( a1 != 23 )
return 14;
}
}
}
}
}
}
return result;
}
Изменив уровни с [0, 2, 4, 6, 8, 10, 12, 14] на [0, 1, 2, 3, 5, 6, 8, 10], мы получили более плавную регулировку ценой уменьшения максимальной громкости, которая всё равно только приводила к перегрузу маломощного динамика телефона.
Если при воспроизведении MP3-файлов положительный эффект очевиден, то громкость FM-радио всё ещё регулируется с недостаточной гранулярностью. Вероятно, это аппаратная проблема подключения FM-чипа.
Неожиданные трудности
Для MIPS существует два стандарта 16-битных инструкций: MIPS16e и microMIPS. Первый является дополнением (extension) к архитектуре MIPS32: код может использовать одновременно оба набора инструкций, процессор может переключаться между режимом выполнения MIPS32 и MIPS16e в любое время, прыжком на нечётный адрес инструкции. Не все инструкции и возможности MIPS можно выразить командами MIPS16e — иногда переключение в режим MIPS32 просто необходимо.
microMIPS же — полноценная архитектура с полным набором 16-битных команд. Вот что говорит официальная брошюра:
The benchmarks prove that the microMIPS architecture delivers similar memory savings as the MIPS16e ASE, but with much better performance. The question is how? The list of reasons includes new optimized 16- and 32-bit instructions, an optimized recoding of MIPS32 instructions, and optimized op code format and register utilization.
The earlier stated fact that microMIPS is a complete architecture – not an extension ? is also key. Both MIPS16e, and for that matter the similarly-targeted ARM Thumb technologies, are extensions. Both microMIPS and these extensions rely on the concept of new 16-bit versions of regularly used instructions to minimize code size. And all deliver reductions in code size. But only microMIPS delivers 32-bit performance.
The microMIPS mode can handle all operations such as exception handling, and offers a superset of the MIPS32 ISA. With MIPS16e, the programmer had to swap modes to use ASEs such as MIPS DSP. The microMIPS mode can seamlessly access the ASEs. The need to run legacy binary code is really the only reason that would prompt a programmer to use the MIPS32 mode.
Проблема в том, что привычные утилиты инлайн-ассемблирования кода для патча программы, такие как rasm2 из состава Radare2 и kstool из KeyStone, не поддерживают режим MIPS16e. Они либо ассемблируют 32-битные команды, несмотря на то, что выбран 16-битный режим, либо выводят опкоды, явно не соответствующие MIPS16e.
К счастью, ассемблер gcc поддерживает режим MIPS16e, а работать с ним почти так же удобно, как с rasm2/kstool. Есть, разве что, одна особенность: он выравнивает блок nop’ами.
$ echo 'jr $ra' | mips64-linux-gnu-as -o /dev/null -al -mips16 -32
GAS LISTING page 1
1 0000 E8206500 jr $ra
1 65006500
1 65006500
1 65006500
Вывод
Надеюсь, эта небольшая заметка поможет исследователям прошивок кнопочных телефонов на платформе RDA и подогреет желание к погружению в звонилки на платформах других производителей. Доступные в любом магазине, эти дешевые но полнофункциональные двухсимочные телефоны с доступом в интернет так и просятся в руки хакеров, чтобы их адаптировали не только под базовые потребности связи.
Как оказалось, нет ничего сложного в минимальном изменении функциональности подобных устройств. Автор не столкнулся с неразрешимыми проблемами, проделанный путь в целом совпадает с анализом прошивкок любого другого устройства, а доступные исходники, хоть и устаревшие, позволяют разобраться в архитектуре и, при желании, интегрировать новые функции, не обладая кодом самой прошивки.
Готовую модифицированную прошивку для Inoi 101 можно скачать на GSMForum.ru: https://gsmforum.ru/threads/inoi-101-modificirovannaja-proshivka.337775/
Главная » Железо » Как прошить кнопочный телефон через компьютер. Резервирование установленной версии Android
Как перепрошить телефон с помощью кнопок
Прошивка android – установка программы на микрочип устройства. Такая манипуляция выполняется на заводе-производителе. Исходя из этого, несложно догадаться, что перепрошивка – обновление программы. Манипуляцию выполняют в следующих ситуациях:
- если версия операционной системы устарела и необходимо установить новый вариант;
- если в работе программы возникли какие-либо сбои;
- если необходимо сменить язык системы на русский;
- если необходимо взломать защиту программе при блокировке гаджета.
Поиск и установка ПО для прошивки
Самый доступный рядовому пользователю и простой в использовании способ прошить телефон – это использовать специальную программу CWM-recovery . ЕЕ можно найти и скачать на любом сайте, где выложены ПО для мобильных устройств. Перед установкой этого менеджера нужно найти и загрузить в Google маркете приложение под названием Mobileuncle MTK Tools . Оно понадобиться, чтобы установить нужный нам менеджер для решения проблем мобильных устройств.
Эта программа занимает совсем немного места на носителе мобильного устройства и является бесплатной. Затем следует скачать файл CWM-recovery на любом тематическом сайте, например 4PDA.ru . Здесь можно найти достаточно много полезного . Можно просто вбить название программы в поисковик сайта или попытаться найти вручную. Серфинг по разделам сайта довольно простой, поэтому проблем с поиском не возникнет. Затем скаченный файл нужно распаковать и перенести его в память телефона. Запустив приложение Mobileuncle MTK Tools , нужно предоставить программе права мультипользователя.
После этого следует простая процедура обновления встроенного менеджера решения проблем. Программа автоматически найдет нужный файл и запросит обновление у пользователя. Сам процесс занимает не более минуты, и, после завершения, устройство автоматически перезагрузится и откроет менеджер.
На 4PDA.ru можно найти и файл с прошивкой. Нужно пройти в раздел форум, выбрать категорию Android-устройства и найти свой гаджет. Затем из списка прошивок достаточно скачать нужную. Данный сайт хорош тем, что здесь представлены не только официальные обновления для андроида, но и неофициальные прошивки. Однако, нужно быть крайне внимательным, чтобы не скачать некорректное ПО. Затем нужно перенести скаченный файл в память телефона на SD карту. Лучше всего подойдет корень карты, то есть не нужно его переносить в какую-либо папку, чтобы не усложнить впоследствии поиск новой операционной системы.
Подготовка к установке новой операционной системы
Перед началом прошивки нужно полностью зарядить мобильное устройство и выключить его. Затем, чтобы включить девайс, нужно одновременно нажать кнопку включения или блокировки экрана и кнопку увеличения громкости. Таким образом на андроид устройствах обычно запускается CWM-based Recovery , системная утилита для мониторинга и решения проблем с устройством. Посредством этой утилиты можно не только перепрошить телефон, но и очистить некоторые разделы памяти, сделать резервную копию устройства, настроить девайс или вернуть к первоначальным настройкам.
Прежде чем устанавливать новую версию операционной системы, нужно очистить определенные разделы памяти устройства. Для этого при помощи качельки громкости и кнопки блокировки выбираем команду «Wipe data/factory reset» и подтверждаем свой выбор в следующем меню.
Посредством этой команды выполняет сброс всех настроек пользователя и откат мобильного устройства до первоначального состояния. Обычно процесс форматирования не занимает больше нескольких минут.
Затем в этой же утилите нужно выбрать команду и также подтвердить свой выбор. После этого утилита очистит кэш устройства, в памяти устройства эти данные находятся в папке /cache .
Следующим шагом нужно перейти в раздел «Advanced» и выбрать команду «Wipe dalvik cache» и подтвердить свой выбор. Этот процесс также очищает кэш, но уже в папке /dalvik
Затем в главном меню нужно перейти в раздел «Mount and starage» и выбрать команду «format /system» и подтвердить свой выбор. Посредством этой команды текущая система устройства форматируется, то есть, таким несложным образом удаляются все файлы и данные предыдущей операционной системы.
После того, как все этапы подготовки были правильно выполнены, можно переходить к установке новой. В этой же утилите нужно выбрать команду «Install from sdcard» , а затем «Choose zip from internal sdcard» .
После этого утилита переносит пользователя в каталог SD карты устройства. В этом меню нужно найти и выбрать файл с прошивкой, который изначально был перенесен на устройство и снова подтвердить свой выбор.
Затем начнется установка новой операционной системы мобильного устройства. Обычно этот процесс занимает от одной до 10 минут в зависимости от мощности девайса.
Первый запуск и настройка
Первый запуск прошитого устройства может быть долгим в виду новой операционной системы. После запуска следует стандартная процедура настройки основных параметров: язык, время и дата, персонализация и виджеты. То есть девайс фактически не будет иметь каких-либо настроек, как и при покупке. В первые полчаса после перепрошивки стоит активно использовать устройство, чтобы найти возможные ошибки в работе системы и попытаться сразу же их исправить. При правильной установке проблем возникать не должно, но за качество обновления отвечает не пользователь, а автор, поэтому никто не застрахован от ошибки.
Чтобы избежать возможных проблем на последнем этапе, стоит скачивать только официальные обновление, а не продукт народных умельцев. В последнем же случае, стоит обратить особое внимание на комментарии к скачиваемому файлу. Если же проблем в использовании не возникло, значит, что прошивка устройства закончилась успешно.
Спустя пару лет использования пользователь смартфона может столкнуться с некоторыми проблемами операционной системы девайса. Сегодня мы расскажем, как перепрошить Андроид самостоятельно, чтобы избавиться от всех этих неполадок.
Правила прошивки
Перед прошивкой стоит уяснить несколько правил, которые нужно обязательно соблюдать, дабы не превратить телефон в «мертвый кирпич».
- Аппарат должен быть заряжен на 100%. Процесс прошивки может затянуться, и, если батарея мобильника сядет в неподходящее время, то можно буквально выкидывать его в урну.
- Это касается и ноутбука, который будет участвовать в процессе прошивки. Если есть выбор между ПК и ноутом, то лучше не рисковать и выбрать ноутбук, так как в случае отключения света у ноута есть аккумулятор.
- Перед прошивкой обязательно сделайте бекап своих данных: контакты, смс, мультимедиа-файлы. После перепрошивки телефона все это сотрется, и вы не сможете восстановить файлы никакими программами.
SamFirm — программа для быстрого поиска прошивок
Для работы программы на вашем компьютере должны быть установлены:
Как найти и скачать прошивку на Cамсунг?
Что такое CSC регион и как его найти?
CSC код используется в телефонах фирмы Samsung для определения страны где был продан телефон и языка прошивки. Что-бы узнать какая версия прошивки вам нужна, следует уточнить код под батарейкой телефона. Также его можно узнать из таблицы ниже.
Последние прошивки
26.10.2020Samsung SM-A015FA015FXXU3ATI2Q(Android 10) New Zealand (TNZ)
26.10.2020Samsung SM-A015FA015FXXU3ATI2Q(Android 10) New Zealand (NZC)
26.10.2020Samsung SM-A015FA015FXXU3ATI2Q(Android 10) New Zealand (VNZ)
26.10.2020Samsung SM-A015MA015MUBU3ATH1Q(Android 10) Uruguay (ANC)
26.10.2020Samsung SM-A015MA015MUBU3ATH1Q(Android 10) Colombia (COB)
26.10.2020Samsung SM-A015VA015VVRS2ATI1Q(Android 10) USA (VZW)
26.10.2020Samsung SM-A102UA102USQS8BTI1Q(Android 10) USA (AIO)
26.10.2020Samsung SM-A105FNA105FNXXU4BTI2Q(Android 10) Slovakia (ORX)
26.10.2020Samsung SM-A105FNA105FNXXU4BTI2Q(Android 10) United Kingdom (VOD)
Flashtool
В случае если специальной утилиты нет и нужна прошивка телефона через компьютер, программа Flashtool с легкостью с этим справится при наличии файла ОС и драйверов, которые нужно будет найти самому.
Алгоритм работы следующий. Выключаем телефон, вынимаем и вставляем аккумулятор. Включаем программу Flashtool. Нажимаем на значок молнии, оставляем точечку на пункте Flashmode. Далее выбираем из списка скачанную прошивку в левом окошке и нажимаем «Ок». После должна появиться инструкция для подключения смартфона к ПК через USB-кабель. Делаем это, и программа для прошивки телефона начинает работать.
Как подготовиться к перепрошивке Андроид смартфона?
- Разбираясь, как самому прошить китайский смартфон нужно тщательно подготовиться к этому процессу. Первым делом нужно убедиться в том, что на телефоне есть минимум 50% заряда, а лучше зарядить его полностью. Это нужно для того, чтобы исключить вероятность отключения. В ходе процедуры можно подключить девайс к заряднику. Если смартфон отключиться в ходе процедуры, то Вы потеряете все данные и он может превратиться в бесполезный кирпич, поэтому не пренебрегайте этим правилом;
- Узнайте какая версия операционной системы актуальна для вашего телефона и какая стоит сейчас. Узнать это можно перейдя в меню настроек и выбрать там раздел “О телефоне”. Посмотрите версию Андроид, версию ядра, а также номер сборки.
Пришла пора разбираться, как прошить смартфон Андроид через компьютер. На основании сведений, которые Вы получили указанным выше методом, находим свежую прошивку, созданную специально для модели Вашего устройства. Также лучше предварительно сделать бэкап системы, чтобы в случае чего иметь возможность восстановиться до прежней версии прошивки. Как это сделать мы уже рассказывали в этой статье.
Для начала
В рамках данной статьи будут рассмотрены способы прошивки девайсов под управлением операционной системы Android. Рассмотрим способы от самых простых, до самых сложных (работа в программных средах). Однако в самом начале ознакомимся с первичными действиями, которые нужно сделать до начала процедуры.
Резервная копия данных
Бэкап – это необходимое действие перед началом любого существенного вмешательство в Андроид. В обязательном порядке зарезервируйте:
- Полный слепок системы (собственно бэкап). В него входит настройки установленных приложений, основных параметров системы, контакты, переписки, личные файлы пользователя, настройки будильников, заметки и многое другое.
- Личный архив медиа и фото. Скиньте на SD-карту все фотографии и видеофайлы из галереи. Настоятельно рекомендуем сохранить ключи доступа и другие важные документы.
Личную информацию можно сохранить на стороннем сервисе. Например, в облаке. Сбросьте данные на Яндекс. Диск, Google Drive или в DropBox. Только заранее докупите места на сервисе, так как бесплатный тариф, обычно, ограничен дисковым пространством в 5 Гб.
Для создания резервной копии воспользуйтесь любым из указанных приложений:
- Titanium Backup. Неплохое приложение с высокими пользовательскими оценками. Но потребуется выдать рут-права.
- 7-Data Android Recovery. Помогает создать бэкап, а также находит и восстанавливает удаленные файлы. Лучше качать с официального источника.
- Резервное копирование – Backup. Удобное и бесплатное приложение. Помогает восстановить данные или сделать бэкап. Программа находит и сохраняет закрытые пароли к Wi-Fi.
Внимание! Устанавливайте программы только из проверенных источников. Не пользуйтесь непроверенными сайтами с левыми APK-файлами.
Есть и второй способ. Он предполагает создание резервной копии из системного меню Recovery. Для этого метода не требуется установка дополнительного ПО. Нужна только чистая SD-карта.
- Запустите системное меню Recovery. Как туда попасть – читайте ниже в статье.
- При помощи аппаратных клавиш найдите строчку: «backup and restore». Войдите в данный пункт меню.
- Теперь выбрать строчку «Reserver». Подтвердите действия.
Скомпилированный бэкап сохранится на SD-карточке.
Качественный провод
Обязательно купите хороший USB-кабель. Лучше всего взять оригинальный аксессуар, которые прикладывает завод изготовитель. Конечно, можно обновить систему и по Wi-Fi. Но это рискованный способ, так как помехи радиосигнала могут повлиять на путь установки. Смартфон просто окирпичится. Обновление по воздуху допустимо, если вы закачиваете прошивку или обновление, которое поступило от самого производителя. Но не когда на телефон ставят кастомную или более старую ОС в ручном режиме!
Требования к проводу:
- Подойдет только оригинальный провод или качественный аналог.
- Не используйте дешевые китайские USB-кабели от «noname» брендов.
- Не пробуйте прошить телефон через неисправный кабель: перебитый, покусанный, надломленный, проплавленный и проч.
- Откажитесь от старых аксессуаров. В них могут быть перетерты некоторые жилы.
Лучше всего купить новый фирменный кабель.
Полностью заряженный аккумулятор
Стоит сразу определиться, в каком состоянии пребывает АКБ Если он быстро высаживается, контроллер питания барахлит – ни в коем случае не переходите к прошивке!
Дело в том, что гаджет может просто подвиснуть на какой-то момент. Если в это время батарея сядет, вы получите на руки кирпич, который будет очень сложно восстановить.
Современные литий-ионные АКБ рекомендуется держать в интервале заряда от 20% до 80%. Эта рекомендация сохраняет их работоспособность и продлевает срок жизни. Но для процедуры стоит сделать исключение, и зарядить батарейку на 100%.
Если вы прошиваете смартфон с ноутбука, стоит позаботиться о бесперебойном питании. Подключите технику в сеть, чтобы батарейка в компьютере не сыграла злую шутку с процессом прошивки. Эта же рекомендация действует и для ПК. Чтобы застраховать себя на 100%, возьмите блок бесперебойного питания.
Возможные проблемы
Если во время прошивки что-то пошло не так, пользователя наверняка ждут проблемы. Неисправности могут носить фатальный характер или просто испортят функционал девайса:
- Окирпичивание. Смартфон просто перестает отвечать на какие-либо нажатия и прочие манипуляции, одним словом не реагирует ни на что. Экран не включается, индикаторы не горят. Звуков и вибрации нет. Мертвый смартфон можно воскресить. Но для этого потребуется достаточно много времени, чтобы разобраться и сделать самостоятельно в домашних условиях. Как вариант – отнести трубку в сервисный центр, для восстановления телефона после неудачной прошивки.
- Циклическая перезагрузка или зависает на заставке. Менее опасное явление, которое подлежит ремонту. После установки новой версии ПО, мобильник начинает постоянно перезагружаться в момент появления логотипа. Так продолжается цикл за циклом, пока не сядет АКБ. Ситуация поправимая, но шить придется через компьютер. В сложных случаях может потребоваться сервисная программа или flashtool.
- Отваливается часть функций. Например, не видит сим карту, не работает Wi-Fi, Bluetooth или NFC после перепрошивки. Такая ситуация часто встречается при накатывании кастомной версии операционной системы. Исправляется перепрошивкой на официальную рабочую глобальную версию ОС (откатить).
- Снятие с гарантии. Если пользователь решил прошить гаджет вручную, аппарат автоматически слетит с гарантии. Впрочем, об этом пишет сам производитель. Но далеко не все читают мануал.
- Отключение части сервисов. Эта ситуация знакома владельцами таких гаджетов как: Xiaomi или Huawei. Когда пользователь переходит с китайской прошивки на международную (глобальную). В таком случае могут отвалиться фирменные фишки и аккаунты в экосистемах MIUI или EMUI; заблокируется доступ к загрузчику и прочие моменты.
Поэтому рекомендуется использовать только официальные версии прошивок. Либо кастомные сборки, которые можно найти на проверенных источниках. Например, на форуме 4PDA в ветке, посвященной конкретному девайсу.
Что значит «Прошивка» и «Перепрошивка» телефона
Прошивка — это установка программного обеспечения на микрочип мобильного устройства (телефона, планшета).
Перепрошивка – это замена старой программной оболочки на другую. Обычно выполняется, если предустановленная прошивка приводит к каким-либо неисправностям в работе устройства.
Что делать, если телефон не запускается после прошивки
Если процесс запуска смартфона так и не продвинулся дальше логотипа, есть смысл заново его перезагрузить. Не помогло и это? Тогда перепрошивайтесь вновь. В ином случае нам нужно откатиться на стандартную прошивку и восстановить Бэкап. Как восстанавливать резервную копию Вы уже знаете, но как откатиться на ранее установленную версию прошивки? Ответ один – никак, её придётся устанавливать через компьютер.
- Устанавливаем драйвера;
- Скачиваем официальную прошивку с сайта 4pda.ru (однофайловую);
- Скачиваем программу ODIN для установки официальных и кастомных прошивок на основе оригинальных;
- Подключаем телефон в ODIN-mode: для этого при включении зажмите три кнопки «Vol — + Home + Power» и дождитесь загрузки соответствующего экрана;
- Так как прошивка состоит из одного файла, мы будем прошивать PDA-часть. Кликаете по кнопке PDA, указываете место нахождения прошивки;
Как прошить телефон самому
С появлением «яблочного» сенсорного девайса эпоха кнопочных телефонов закончилась. Многие пользователи признали удобство «сенсорики» и перешли в стан «лопат и кирпичей». Но у сенсорных телефонов есть и минусы, вследствие чего некоторые пользователи предпочли им обычные кнопочные телефоны.
Да и рынок «кнопочников» до конца еще не вымер. Nokia, Alcatel, Explay не прекращают выпускать бюджетные телефоны, ориентированные на приверженцев классических телефонов. Пока существуют такие аппараты, будет актуальным и вопрос, как перепрошить телефон.
Способы прошивки мобильника
Существует пара способов прошивки мобильного телефона: ручной и автоматический. Со вторым способом справится любой пользователь. Так, для телефонов от Sony существует официальное программное обеспечение для прошивки – SEUS, а для моделей от Nokia – NSU. Устанавливаете программу, подключаете телефон и активируете автоматическое обновление. Утилита сама найдет прошивку, скачает ее и зальет в мобильник.
Для «ручной» перепрошивки потребуются определенные знания, а также терпение и умение работать с ПК. О данном способе прошивки мобильника мы и поговорим в статье.
Правила прошивки
Перед прошивкой стоит уяснить несколько правил, которые нужно обязательно соблюдать, дабы не превратить телефон в «мертвый кирпич».
Что нужно для перепрошивки телефона?
Итак, для прошивки телефона понадобится следующее:
Порядок прошивки мобильника
Если вас все еще мучает вопрос, как прошить телефон самому, то вот ответ на него.
Несомненно, процесс прошивки одного мобильника может отличаться от другого. И в рамках одной статьи описать процесс прошивки для каждой модели просто невозможно. Вышеуказанная инструкция – это лишь стандартная процедура. Прошивки для Nokia и инструкции по их «применению» можно найти на сайте http://allnokia.ru. Для других моделей рекомендуется форум 4pda.ru: http://4pda.ru/forum/index.php?showforum=268. Там собран наиболее полный каталог прошивок. Но для того чтобы скачать что-нибудь с форума, потребуется регистрация.
В сервисном центре за перепрошивку возьмут неплохую сумму, которая может быть равна половине стоимости телефона. Но проще поступить иначе и самому прошить телефон. Мобильники прошивают не только из-за поломок. Кто-то желает обновить прошивку, а кому-то и вовсе хочется «пошаманить» с меню, иконками и прочим. Что касается мобильников из Поднебесной, то прошить китайский телефон будет вдвойне сложнее, так как найти для них прошивку и драйвера очень непросто.
Источник
Как перепрошить кнопочный телефон через компьютер
Приветствую всех неравнодушных к кнопочникам.
Если:
— есть информация о создании прошивок,
— хотите поучавствовать,
— хотите посоветовать
— хоите хоть как то проявить активность в этом направлении
— отговорить и сказать что все бесполезно
Напишите что думаете по этому поводу.
p.s.
Я сам программист и абсолютно не питаю иллюзий на тему сложности задачи
Ресурсы по платформам кнопочников (пост будет обновляться):
Лучше ан вордстате посомтреть сколько народа ищет кнопочник.
Пока что-то разочаровался в поисках документаций по созданию прошивок.
А идеальный с программной точки зрения телефон 2010х годов я так понял то Phillips X5500
Прошивку со своего тела пока не дампил.
AlterrAq, спасиб мил человек! продвинул мои познания. Чего-то и правда у меня не очень с гуглением получилось.
Зато теперь я на сайте Nucleus RTOS прочитал все про эту операционку на оф сайте: https://www.mentor.com…dded-software/nucleus/
Насколько я понял по номеру телефона эти ребята из США. Делают всякое разное ПО (не только Nucleus RTOS) для небольших девайсов (в основном прошивки базовые, драйвера и т.п.). Ну даже не то что бы небольших, а скорее нестандартных и с небольшим энергопотреблением. Самый крупный способ использовать их наработки это навигационная система Garmin для небольших и средних самолётов.
Есть обучение какое-то у них. Могут сделать девайс за тебя 🙂 Предоставляют какой-то демо стартер кит с 30 дневным пробным периодом и каким-то ограничением на работу создаваемых девайсов. Для экспериментов норм, для коммерции этот кит не подойдет.
В общем думаю у них запросить этот стартер кит и что посоветуют для разработки и экспериментов над мобильными телефонами и сколько будет стоит обучение у них.
погуглил я еще и еще обнаружил вот такое:
https://www.freertos.org/
Типа свободная открытая операционка реал тайм. Открытый конкурент Nucleus. Сайт поскромнее, инфы чуть меньше, но достаточно. Еще подробно не изучал, а изучать там есть что.
Еще в тему простых кнопочников Simbian OS и т.п.
Смотрел я развитие нокий от простых Simbian-ов до последних (Simbian 9.3 или около того).
И вот чем круче операционка, тем круче использовалось железо.
В целом есть масса задач которые можно было бы решить без крутого процессора:
— коннект к смарт часам,
— нормальный аудио плеер с эквалайзером,
— кнопка SOS с отправкой координат от GPS по смс.
— читалка текстовых файлов
— файлообменник через интернет,
— приложение со скидками магазинов типа «кошелька» в андройде
— версия телеги/вотсапа/вибера/джабера(xmpp) без видео.
— и т.п.
Еще смотрел гугл тренды и яндекс вордстат.
в 2017-2018 на вордстате «кнопочник», «кнопочный телефон» рост запросов в 1.5-2 раза.
на гугл трендах «button phone», «simple phone» в 2018 году тоже начал подниматься.. правда на 20% или около того примерно..
Какие еще инетересные странички нашел в интернетах:
osmocom.org, еще не понял точно о чем это, но масштабно, прозрачно и для GSM мобильных.
в Nucleus RTOS отправил запрос на стартер кит и инфу об обучении. На Них больше всего возлагаю надежды ибо на этом нуклеусе точно делают мобильники.
Источник
Блог Евгения Крыжановского
Я научу вас ремонтировать свой компьютер!
Прошивка телефона через компьютер. Программа для прошивки телефона
В определенные моменты у пользователя появляется необходимость сменить программное обеспечение на телефоне. У многих пользователей данная процедура вызывает жуткий стресс: сердцебиение учащается, руки трясутся, а волосы становятся дыбом. А ведь сделать это вопреки общепринятому мнению совершенно не сложно.
Зачем нужно прошивать мобильный телефон?
Настало время высоких компьютерных технологий. Сегодня практически каждый пользователь использует смартфон с сенсорным экраном. Но не стоит раньше времени сбрасывать со счетов старые кнопочные телефоны. Буквально несколько назад в салонах мобильной техники можно было встретить слайдеры, «кирпичи» и «раскладушки». Еще буквально несколько лет назад такими устройствами пользовался каждый пользователь. И никто не думал менять программное обеспечение на этих аппаратах. А зачем вообще нужна прошивка? Прошивка может производится по следующим причинам:
— для получения обновленного программного обеспечения;
— программное обеспечение стало работать хуже или вообще вышло из строя.
Мало кто из пользователей сталкивался с полным выходом системы из строя, но такое вполне возможно. На то существует множество причин. Кроме того, как официальные, так и независимые обработчики сегодня занимаются выпуском новых версий прошивки для данных устройств.
Прошивка через компьютер
Прежде, чем приступать к установке нового программного обеспечения, необходимо учесть несколько важных моментов. Прежде всего, создайте резервную копию всей информации, которая хранится на мобильном устройстве. Это могут быть контакты, настройки, смс. Сохранить резервную копию лучше на компьютере. Для этой цели можно использовать специализированные программные продукты, такие как MyPhoneExplorer. После этого зарядите мобильное устройство как минимум на 80% от заряда батареи.
Лучше все-таки зарядить аппарат на все 100%. Прошивку лучше осуществлять при помощи ноутбука, а не стационарного компьютера. Дело в том, что у портативного компьютера также имеется собственный аккумулятор. Это даст вам возможность в случае случайного отключения электроэнергии закончить процесс. В противном случае последствия могут быть крайне неприятными. Для прошивки вам потребуются следующие элементы:
— собственно сам телефон;
— дата-кабель (чаще всего используется USB, но для некоторых устройств может потребоваться дата-кабель).
— файл прошивки. Скачать его можно из интернета. Перед установкой тщательно ознакомьтесь со всей представленной информацией. Прочитайте отзывы и комментарии. Узнайте версию старой прошивки (для этого необходимо ввести на клавиатуре устройства код *#06#).
— драйвера на мобильное устройство;
— прошивальщик (специальная программа для прошивки телефона).
Программы для прошивки
Сегодня существует достаточно много утилит для прошивки. В общем случае их можно разделить на две категории: программы, которые могут использоваться для всех моделей и программы, предназначенные для устройств конкретного производителя. Так, например, для прошивки телефонов Nokia используется программа «Феникс». С помощью общих утилит можно прошить практически любую модель. Но если у вас в распоряжении имеется программа, которая разработана специально для определенной марки, лучше использовать именно ее. В таких программах содержатся все необходимые драйвера. Далее представлен небольшой список специализированных программ-«прошивальщиков» для конкретных марок мобильных устройств.
— Nokia – Phoenix Service;
— Sony Ericsson – PC Companion;
— LG – Speedo, GsMulti;
— Motorola – Flash&Backup;
— BenQ – Winsup;
— Samsung – OptiFlash.
Алгоритм работы программы-«прошивальщика» рассмотрим на примере утилиты Phoenix.
Прошивка Nokia
Прежде чем приступать к прошивке телефона, вам нужно будет скачать и установить на свой компьютер программу Phoenix. Она предназначенная специально для телефонов Nokia. Помимо описанных выше первичных приготовлений, вам нужно будет выполнить еще некоторые операции. Удалите все программы, которые могут быть каким-то образом связаны с мобильным устройством. Это могут быть такие приложения, как Nokia PC Suite, Nokia Software Update. После этого необходимо также очистить регистр и кэш.
В противном случае прошивка может быть выполнена с ошибками. На всякий случай предварительно также отключите антивирусную программу. После этого необходимо установить драйвера Nokia Flashing Cable Driver и Nokia Connectivity Cable Driver. Теперь можно подключать мобильный телефон к компьютеру. Чтобы убедиться предварительно в том, что все драйвера на месте, используйте «Диспетчер устройств». Откройте свойства компьютера и выберите пункт «Диспетчер устройств». Далее найдите «Wireless Communication Devices».
Количество устройств здесь может доходить до шести. Подключите устройство к компьютеру и запустите программу Phoenix. В пункте «Connection» необходимо выбрать «Setting». В открывшемся окне нужно выбрать «Add». Кликните по выпадающему списку и выберите USB. Проведите сканирование путем нажатия кнопки «Scan». Выделите появившееся устройство и нажмите на кнопку «Select». Далее в пункте Connection из выпадающего списка выберите нужное вам устройство.
Теперь необходимо перейти ко вкладке File\Scan Product.После завершения процесса сканирования внизу должно появиться нужное вам устройство. После этого можно следовать дальше. Перейдите к разделу Flashing и нажмите Firmware Update. Далее нужно выбрать код. Если вы понятия не имеете, какой код вам нужен, выбирайте любой. Но учтите один очень важный момент: если на телефоне должен иметься русскоязычный интерфейс, то в названии файла прошивки следует искать слова RU, Cyrillic, Russian. После того, как Product Code будет выбран, нужно нажать Refurbish. Итак, вы приступили к прошивке телефона через персональный компьютер. Продолжаться данный процесс будет в течение 7-10 минут. В этот период времени не стоит трогать программу, телефон или кабель.
Flashtool
В том случае, если у вас нет специальной утилиты, вам подойдет программа Flashtool. Однако обязательным условием в данном случае является наличие файла операционной системы и драйверов. Для выполнения данной операции необходимо выполнить следующую последовательность действий.
1. Выключите телефон, выньте аккумулятор и вставьте его обратно.
2. Включите программу FlashTool.
3. Нажмите на значок молнии.
4. Ставим отметку в пункте Flashmode.
5. Из списка выбираем скачанную прошивку, в левом окне программы жмем кнопку «Ок».
6. Появится инструкция подключения мобильного устройства к компьютеру при помощи USB-кабеля. Выполните данное действие. Программа прошивки начнет работать.
Прошивка Android
Устройствам на базе ОС Android намного чаще требуется смена системы, нежели другим смартфонам. Причина может заключаться в огромном количестве вредоносных программ, приложений, скачанных из неизвестных источников. Однако самой основной и наиболее часто встречающейся причиной выхода мобильного устройства из строя является владелец. Прошивка телефона осуществляется через компьютер, но можно попробовать и без него. Для этого необходимо использовать режим Recovery.
На персональном компьютере необходимо выполнить некоторые приготовления. Прежде всего, необходимо скачать специальную программу для перепрошивки. Это может быть FlashTool или Bootloader. Также необходимо скачать прошивку на используемую вами модель смартфона. Предварительно обязательно следует ознакомится с основными характеристиками, а также прочитать отзывы и комментарии. После этого файл прошивки необходимо копировать в папку Firmwares. Теперь устанавливаем на компьютер драйвера.
После этого делаем на компьютере резервную копию файлов с мобильного устройства. Также можно копировать на ПК содержимое флэшки. Делаем отладку по USB. Для этого необходимо зайти в пункт «Настройки» и выбрать «Функции разработчика». Здесь нужно отметить пункт «Отладка USB». Зарядите устройство на все 100%. После этого откройте утилиту Flash Tool и используйте описанный выше алгоритм.
Прошивка без персонального компьютера
Работа с Windows Mobile
Для смартфонов на базе Windows Mobile ситуация складывается несколько проще. Чтобы перепрошить устройство вам понадобиться USB-кабель и программа для компьютера Windows Phone Recovery Tool. Прежде всего нужно скачать данную утилиту с официального сайта, установить ее и запустить на компьютере. Программа автоматически запустит поиск обновлений, а затем выдаст сообщение о необходимости подключения смартфона к ПК. Начнется поиск драйверов на устройство.
При их отсутствии необходимо отметить соответствующий пункт для поиска драйверов в Интернете. После того, как все драйвера будут установлены, на экране появится плитка, на которой будет изображено подключенное устройство. При нажатии на нее запустится скачивание файла прошивки. Данный процесс может занять некоторое время. Когда загрузка завершится, на экране появится кнопка Reinstal Software. При нажатии на нее запустится установка программного обеспечения.
Запись опубликована 11.09.2015 автором katrinas11 в рубрике Программы. Отблагодари меня, поделись ссылкой с друзьями в социальных сетях:
Источник
Мелкая доработка прошивки кнопочного телефона на платформе RDA8826 (SC6533, MIPS): отключаем Funbox, взламываем игры
Введение
Inoi 102 и Strike F10
Купил я телефон Inoi 101: дешевый, но функционально достойный даже на фоне более дорогих моделей. Всё бы хорошо, если бы не нежелательная функциональность, присущая большинству недорогих звонилок:
Пробные игры с покупкой полной версии через СМС, причём состояние покупки сбрасывается при полном сбросе устройства;
Встроенное меню СМС-подписок «Funbox»: гороскопы, анекдоты, новости, прочая платная ерунда.
Платные игр и меню Funbox
Попробуем устранить недостатки путём анализа и модификации прошивки.
Чипсет
Современные кнопочные девайсы строятся на платформах трёх производителей: RDA Microelectronics, Spreadtrum, Mediatek. Первой компании уже не существует: её купил Spreadtrum в середине 2015. Обе компании ребрендировали под именем Unisoc в 2018 году.
Рассматриваемый телефон работает на последнем чипе «классического» RDA семейства Gallite, и был сделан уже после покупки компании, из-за чего у чипа два названия: RDA8826C (RDA’шное) и SC6533g (Spreadtrum’овское). В интернете нет не только datasheet’ов, но и почти никакой публичной информации об этой модели.
Архивная страница сайта rdamicro.com 2017 года скупо повествует нам о ключевых возможностях SoC’а:
General Description
RDA8826C is a high performance, highly integrated system-on-chip solution for low cost, low power, GSM/GPRS mobile phone.
Integrating all essential electronic components, including baseband, quad band RF transceiver, power management, FM receiver, Bluetooth onto a single system on chip, RDA8826C offers best in class bill of material, space requirement and cost/feature ratio for complete phone handsets.
Key Features
1. MIPS 312MHz processor
2. GSM/GPRS modem
3. 32Mb Flash and 64Mb PSRAM integrated
4. 320×480(HVGA) resolution
Нынешние телефоны построены в основном на процессорах Spreadtrum и Mediatek архитектуры ARM. Inoi 101 — не только «последний из могикан» на чипе ныне несуществующей компании, но и работает на ныне непопулярной архитектуре, с не самым известным набором команд MIPS16e, в котором инструкции кодируются в 2 байта вместо четырех, для уменьшения размера прошивки, что жизненно необходимо устройству со всего 4 МБ (32 Мбит) флеша.
SoC RDA8826 содержит в себе центральный процессор RDA8809e2, Baseband-процессор CT8851C, Bluetooth и FM-модули rdabt_8809 и rdafm_8809. Достоверная информация о всех компонентах в интернете не представлена.
Получение прошивки
Чтобы модифицировать прошивку, нужно сначала завладеть ей. Самый простой вариант — поискать на веб-сайте производителя. Inoi выкладывает прошивки ко всем своим моделям, но они не всегда самые последние — оказалось, что в версии с сайта отсутствует набор Т9 и игра «Тетрис».
Что-ж, телефон уже прошит, придётся покупать второй и скачивать актуальную прошивку с него. Сделать это можно, в случае RDA, только сторонними программами, т.н. «боксами» — аппаратно-программными комплексами для прошивки и восстановления от сторонних разработчиков. Обычно необходимо купить сам «бокс» (устройство с набором кабелей) и подписку на ПО, но к счастью подходящее ПО уже есть взломанной версии, отвязанное и от бокса, и от подписки — Miracle Thunder 2.82 от Gsm_X_Team. Относитесь к этому ПО как к трояну — устанавливайте на отдельный компьютер, без интернета (в виртуалке не работает).
Miracle Thunder
Открываем дамп флеша или преобразованный файл прошивки в вашем любимом дисассемблере, начинаем анализировать, быстро разочаровываемся: строк мало, сегментация памяти непонятная, IDA норовит неправильно определить MIPS32/MIPS16-код, тут и там странные указатели 0x82xxxxxx на оперативную память, в которые никто не пишет…
Скребём по сусекам
Раз не получается найти спецификацию на процессор, попробуем поискать какие-либо исходники по немногочисленным строкам, найденным в прошивке.
Из заголовочных файлов узнаём самое основное:
Флеш располагается по адресу 0x88000000 (4 МиБ)
Оперативная память — в 0x82000000 (8 МиБ)
SRAM — 0x81C00000 (64 КиБ)
BootROM — 0x81E00000
UI на моём устройстве построен на форке фреймворка MMI (man-machine interface) от компании Pixtel — CoolMMI. Подобный фреймворк используется и в ОС для кнопочных телефонов Mediatek MAUI, под названием PlutoMMI.
Фреймворк создавался в лучшие годы кнопочных телефонов, с соответствующим качеством кода — всё завязано на глобальные переменные, глобальные состояния, магические константы, массивы строк, массивы функций-обработчиков кнопок. Монолитная архитектура без какой-либо модульности (даже минимальной) не позволяет писать красивый код — разные функциональные возможности активируются #define’ами в унифицированных *.c-файлах для всех случаев, затрудняющими чтение кода.
Обращение к текстовым строкам, ресурсам, задачам, меню, элементам NVRAM происходит с помощью уникального цифрового идентификатора, что затрудняет исследование: вы видите только цифры, далеко не сразу поддающиеся установке соответствия в осмысленную строку, пункт меню или ресурс.
Начальную информацию об основных функциях PlutoMMI от Mediatek можно почерпнуть из файла mmi framework and architecture.pdf. Архитектура CoolMMI и PlutoMMI совпадает в достаточной мере, чтобы пользоваться (аналогично скудной) документацией конкурирующего производителя.
Поиск сжатых ресурсов
Итак, память размечена правильно, а кардинальных изменений не видно — множество функций продолжают вызывать код из оперативной памяти, но найти, кто пишет в эти адреса, с наскока не получается. Да и ресурсов подозрительно мало.
После непродолжительного анализа обнаруживаются три особенности:
Переиспользование функций из BootROM
Для максимальной экономии пространства на флеш-памяти производитель реализовал наиболее востребованные функции библиотеки C непосредственно в ROM-памяти чипа: строковые функции (strlen, strcmp, strcpy, strcat, strtok), функции сравнения и копирования памяти (memcmp, memcpy, memmem, memchr), форматирования и вывода (sprintf, vsprintf), поиска и сортировки (bsearch, qsort) вызываются из памяти ROM, и не содержатся в коде прошивки, экономя драгоценные килобайты.
Сжатие кода и ресурсов алгоритмом LZMA
Код наиболее объемных «модулей» (WAP-браузера, мультимедиа-плеера, приложения FM-радио, инженерного меню) хранится в сжатом виде, а распаковывается один раз, при запуске телефона. Ничего дополнительного после распаковки не происходит: код скомпонован так, будто эти модули всегда в оперативной памяти по фиксированным адресам.
Аналогично распаковываются текстовые строки, но только для одного, текущего языка.
Копирование несжатого кода в оперативную память
Самый архитектурно важный код ОС копируется в оперативную память и выполняется из неё. Вероятно, это сделано для максимальной скорости исполнения базовых функций ОС.
Сжатые ресурсы легко находятся через binwalk. Можно было бы каждый из них вручную распаковать и загрузить в текущую базу IDA по корректным адресам, но я нашел способ проще, надёжней и быстрее.
Снятие оперативной памяти
Оказалось, протокол прошивки не только простой, но и разрешает чтение произвольных адресов без какой-либо подготовки, прямо во время работы телефона. В интернете была найдена готовая программа для чтения прошивки через UART, которая после модификации была использована для чтения всех 8 МиБ оперативной памяти через USB. 2 минуты — и никакой ручной работы!
Чтобы получить коммандный порт через USB, можно воспользоваться модулем usb-serial в Linux. Достаточно всего лишь «научить» модуль работать с RDA:
$ echo 1e04 0900 | sudo tee /sys/bus/usb-serial/drivers/generic/new_id
Разжатая функция в оперативной памяти
Отныне нам доступны все распакованные функции и ресурсы в оперативной памяти, что позволяет нам беспрепятственно их проанализировать.
«Покупаем» игры
В рассматриваемом телефоне присутствуют 3 платных игры производства Gameloft: Danger Dash, Ninja Up, Tetris. Первая — раннер, без какой-либо физики прыжка, вторая — примитивный фроггер с одним экраном, играть можно разве что в тетрис, но он начинает тормозить при заполнении экрана фигурами.
Каждая игра запускается всего 5 раз, далее их предлагается оплатить. Игры стоят 99 рублей каждая — половину стоимости телефона — обдираловка!
С точки зрения пользователя, покупка совершается так: нажимаем на кнопку «купить», телефон отправляет платное СМС, пользователю приходит ответный код, который нужно ввести в окно регистрации. Но если купить игру, запомнить ответный код, сбросить телефон и попробовать заново ввести этот же код, то он, с большой вероятностью, не подойдет.
Как так?
Генератор псевдослучайных чисел инициализируется значением текущей минуты;
Генерируется псевдослучайное число от 1000 до 9999;
Случайное число отправляется в СМС и сохраняется в NVRAM;
Ответный код проверяется с учётом сохраненного случайного числа.
Связка запрос-ответ уникальна для каждой модели, и зависит от той минуты, в которую была нажата кнопка «купить»:
Где 28060 — идентификатор телефона Inoi 101.
Этот нехитрый алгоритм легко реализовать в виде кейгена, что я и сделал: http://gameloft-keygen.valdikss.org.ru/
К слову, на телефонах с Mediatek алгоритм кода регистрации точно такой же, но алгоритм генерации псевдослучайных чисел отличается.
Самый простой способ зарегистрировать игры навсегда — пропатчить код инициализации, заменив переменные количества демо-запусков на переменные купленности игры. Так как эта функция находится в несжатой области кода, проблем с её модификацией не возникнет.
Замена переменных в функции инициализации
Найти функции можно по отладочным строкам, содержащим характерное имя файла:
Функция вывода номера строки файла src/gameloft_billing.c
Отключаем Funbox
Меню платных СМС-подписок — ожидаемая, но неуместная функция послепродажного заработка денег производителем. Одно неловкое нажатие — и минимум 5 рублей со счёта в сутки вам обеспечено. Подобные вещи позволяют держать цены на кнопочные телефоны на очень низком уровне, но в моём устройстве им не место.
Как и в случае с играми, в функциях Funbox присутствует отладочный вывод номеров строк с именем файла «src/gmb_smart_sms_win.c». С этих строк можно «дошагать» до функции-обработчика выделения элемента главного меню (в CoolMMI они называются hilite, очевидно имеется в виду highlight), в котором и находится иконка.
Методом проб и ошибок удалось обнаружить обработчик входа в интерфейс подписок, который был благополучно за’nop’лен — нажатие на иконку Funbox центральной кнопкой или левой софт-клавишей более ни к чему не приводят.
Функция расположена в несжатой области и легко поддаётся изменению.
Исправляем громкость
Компонент аудиоусилителя телефона имеет 15 ступеней усиления, но для мультимедии прошивка телефона предусматривает всего 7 уровней громкости, с большими шагами между ними. Это неудобно: на «единице» телефон еле слышно, а на «двойке» он сразу ОРЁТ.
Попробуем исправить эту проблему. В заголовочных файлах быстро находится регистр CONFIG_REGS по базовому адресу 0x01A24000, структура которого описывается следующим образом:
Использование регистра происходит через сегмент KSEG1, в обход MMU и кешей. Полный адрес audio_spk_cfg, обращения к которому нужно искать в дисассемблере — 0xA1A24028.
После непродолжительного поиска обнаруживается функция, преобразующая уровень усиления (по всей видимости, в децибелах) в значение SPK_GAIN:
Изменив уровни с [0, 2, 4, 6, 8, 10, 12, 14] на [0, 1, 2, 3, 5, 6, 8, 10], мы получили более плавную регулировку ценой уменьшения максимальной громкости, которая всё равно только приводила к перегрузу маломощного динамика телефона.
Если при воспроизведении MP3-файлов положительный эффект очевиден, то громкость FM-радио всё ещё регулируется с недостаточной гранулярностью. Вероятно, это аппаратная проблема подключения FM-чипа.
Неожиданные трудности
Для MIPS существует два стандарта 16-битных инструкций: MIPS16e и microMIPS. Первый является дополнением (extension) к архитектуре MIPS32: код может использовать одновременно оба набора инструкций, процессор может переключаться между режимом выполнения MIPS32 и MIPS16e в любое время, прыжком на нечётный адрес инструкции. Не все инструкции и возможности MIPS можно выразить командами MIPS16e — иногда переключение в режим MIPS32 просто необходимо.
microMIPS же — полноценная архитектура с полным набором 16-битных команд. Вот что говорит официальная брошюра:
The benchmarks prove that the microMIPS architecture delivers similar memory savings as the MIPS16e ASE, but with much better performance. The question is how? The list of reasons includes new optimized 16- and 32-bit instructions, an optimized recoding of MIPS32 instructions, and optimized op code format and register utilization.
The earlier stated fact that microMIPS is a complete architecture – not an extension − is also key. Both MIPS16e, and for that matter the similarly-targeted ARM Thumb technologies, are extensions. Both microMIPS and these extensions rely on the concept of new 16-bit versions of regularly used instructions to minimize code size. And all deliver reductions in code size. But only microMIPS delivers 32-bit performance.
The microMIPS mode can handle all operations such as exception handling, and offers a superset of the MIPS32 ISA. With MIPS16e, the programmer had to swap modes to use ASEs such as MIPS DSP. The microMIPS mode can seamlessly access the ASEs. The need to run legacy binary code is really the only reason that would prompt a programmer to use the MIPS32 mode.
Проблема в том, что привычные утилиты инлайн-ассемблирования кода для патча программы, такие как rasm2 из состава Radare2 и kstool из KeyStone, не поддерживают режим MIPS16e. Они либо ассемблируют 32-битные команды, несмотря на то, что выбран 16-битный режим, либо выводят опкоды, явно не соответствующие MIPS16e.
К счастью, ассемблер gcc поддерживает режим MIPS16e, а работать с ним почти так же удобно, как с rasm2/kstool. Есть, разве что, одна особенность: он выравнивает блок nop’ами.
Вывод
Надеюсь, эта небольшая заметка поможет исследователям прошивок кнопочных телефонов на платформе RDA и подогреет желание к погружению в звонилки на платформах других производителей. Доступные в любом магазине, эти дешевые но полнофункциональные двухсимочные телефоны с доступом в интернет так и просятся в руки хакеров, чтобы их адаптировали не только под базовые потребности связи.
Как оказалось, нет ничего сложного в минимальном изменении функциональности подобных устройств. Автор не столкнулся с неразрешимыми проблемами, проделанный путь в целом совпадает с анализом прошивкок любого другого устройства, а доступные исходники, хоть и устаревшие, позволяют разобраться в архитектуре и, при желании, интегрировать новые функции, не обладая кодом самой прошивки.
Источник