как прошить java телефон
Как прошить java телефон
Приветствую всех неравнодушных к кнопочникам.
Если:
— есть информация о создании прошивок,
— хотите поучавствовать,
— хотите посоветовать
— хоите хоть как то проявить активность в этом направлении
— отговорить и сказать что все бесполезно
Напишите что думаете по этому поводу.
p.s.
Я сам программист и абсолютно не питаю иллюзий на тему сложности задачи
Ресурсы по платформам кнопочников (пост будет обновляться):
Лучше ан вордстате посомтреть сколько народа ищет кнопочник.
Пока что-то разочаровался в поисках документаций по созданию прошивок.
А идеальный с программной точки зрения телефон 2010х годов я так понял то Phillips X5500
Прошивку со своего тела пока не дампил.

Зато теперь я на сайте 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 отправил запрос на стартер кит и инфу об обучении. На Них больше всего возлагаю надежды ибо на этом нуклеусе точно делают мобильники.
Мелкая доработка прошивки кнопочного телефона на платформе RDA8826 (SC6533, MIPS): отключаем Funbox, взламываем игры
Введение

Купил я телефон 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 Мбит) флеша.
SoC RDA8826 содержит в себе центральный процессор RDA8809e2, Baseband-процессор CT8851C, Bluetooth и FM-модули rdabt_8809 и rdafm_8809. Достоверная информация о всех компонентах в интернете не представлена.
Получение прошивки
Чтобы модифицировать прошивку, нужно сначала завладеть ей. Самый простой вариант — поискать на веб-сайте производителя. Inoi выкладывает прошивки ко всем своим моделям, но они не всегда самые последние — оказалось, что в версии с сайта отсутствует набор Т9 и игра «Тетрис».
Что-ж, телефон уже прошит, придётся покупать второй и скачивать актуальную прошивку с него. Сделать это можно, в случае RDA, только сторонними программами, т.н. «боксами» — аппаратно-программными комплексами для прошивки и восстановления от сторонних разработчиков. Обычно необходимо купить сам «бокс» (устройство с набором кабелей) и подписку на ПО, но к счастью подходящее ПО уже есть взломанной версии, отвязанное и от бокса, и от подписки — Miracle Thunder 2.82 от Gsm_X_Team. Относитесь к этому ПО как к трояну — устанавливайте на отдельный компьютер, без интернета (в виртуалке не работает).

Открываем дамп флеша или преобразованный файл прошивки в вашем любимом дисассемблере, начинаем анализировать, быстро разочаровываемся: строк мало, сегментация памяти непонятная, 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 и подогреет желание к погружению в звонилки на платформах других производителей. Доступные в любом магазине, эти дешевые но полнофункциональные двухсимочные телефоны с доступом в интернет так и просятся в руки хакеров, чтобы их адаптировали не только под базовые потребности связи.
Как оказалось, нет ничего сложного в минимальном изменении функциональности подобных устройств. Автор не столкнулся с неразрешимыми проблемами, проделанный путь в целом совпадает с анализом прошивкок любого другого устройства, а доступные исходники, хоть и устаревшие, позволяют разобраться в архитектуре и, при желании, интегрировать новые функции, не обладая кодом самой прошивки.
Модификация стоковых прошивок для Android. Часть 1
Несколько лет назад, когда я впервые познакомился с Android, я услышал от своего коллеги по работе, что Android предусматривает возможность установки модифицированных или самодельных прошивок. Признаться, тогда я был далек от этого. И даже пол года назад меня едва интересовали подобные вещи. Глубоко в душе, я был уверен: то, что делает производитель, уже предназначено для нормального использования.
Каково же было мое разочарование, когда я приобрел телефон из поднебесной, где заводскими настройками было запрещено использование Google, Skype, Facebook и других приложений. В принципе, на некоторые вещи можно было закрыть глаза, но когда мой телефон не подразумевал использование учетной записи Google — я взял с себя обещания обязательно разобраться во что бы мне это не стало.
Прошло пол года и мои кастомные прошивки с успехом используются по всему миру.
В данной серии статей пойдет речь о том, как делать reverse программирование для Android, реализовывать патчи, твики и моды.
Преамбула
И так! Давайте сперва определимся с понятиями, которые будут использоваться в данной статье. Ваше привычное понимание, при этом, может сильно отличаться.
Патч — изменение или замена существующего программного кода с целью модификации алгоритма программы.
Мод — как правило, добавление дополнительного функционала в существующий программный код без изменения алгоритма.
Твик — усовершенствование функционала программы с целью облегчения доступа к параметрам системы.
Также хочу заметить, что все примеры будет взяты для телефона HTC, но это не значит, что данная информация не может быть использована на других телефонах.
Обращаю ваше внимание, что я, как автор, не несу ответственности за возможную потерю данных на вашем телефоне в результате использования информации ниже.
Подготовка среды
Обойдусь без подробных инструкций как пользоваться тем или иным программным обеспечением. Если вам интересна данная статья и вы дочитали до этих строк, то я надеюсь, что вы уже опытный пользователь и имеете опыт использования, ну или хотя бы экспериментирования в данной области. Инструкций, статей и результатов тестирования полно в открытом доступе, впрочем, как и на Хабре. Также обойдусь без описания некоторых терминов, иначе статья получится очень большой и нудной. Будем писать только по делу. Уверен, что среда у вас уже давно стоит. Если нет, то предлагаю скачать и установить.
1. Android SDK. Это среда разработки приложений для Андроид. Для того чтобы делать модификации, нам обязательно придется проверять наш программный код. Среда разработки самое лучшее, что мы можем использовать.
2. Android Kitchen. Данная утилита позволит вам работать с образами системных партиций официальной ну или неофициальной прошивки.
3. JD-GUI. Декомпилятор программного кода языка Java. Сразу отмечу, что это самый лучший декомпилятор в плане удобства использования.
4. DJ Java Decompiler. Еще один декомпилятор, или дизассемблер, как некоторые любят называть, программного кода языка Java. Не удобен в плане использования, но разбирает код, который иногда не понимает JD-GUI.
5. smali. Еще один дизассемблер, но уже dalvik кода. smali нужен для дизассемблирования, а backsmali ассемблирования кода.
6. dex2jar. Утилита для конвертации исполняемых файлов Dalvik кода.
Преобразование прошивки
Разумеется, прошивка, которая стоит у вас на телефон от производителя оптимизирована с целью сокращения энергопотребления. Для того чтобы прошивку можно было изменять, ее необходимо преобразовать в формат, позволяющий изменять код. Для этого используется Android Kitchen. Можно конечно и руками, как я и делал раньше, пока не нашел эту самую «кухню». Как вытаскивать системную область из телефона, устанавливать среду, делать DEODEX прошивки, вы можете прочитать в интернете. Если вам уже ничего не понятно, я думаю стоит повременить со статьей, пока вы не наберете достаточно опыта.
После того, как прошивка из оптимизированного вида (ODEX — оптимизированный dalvik исполняемый код, если мне не изменяет память) стала DEODEX (то бишь НЕ оптимизированной), все исполняемые файлы готовы к модификации.
Непосредственно модификации
Создание патчей
Как я уже и рассказывал, мой телефон изначально имел запрет на использование Google. Ну хоть ты тресни, на Playstore не зайти, учетную запись не настроить, телефонная книга толком не синхронизируется. Зачем нужен такой Android? Долго копаясь в логах (logcat) самого устройства, я нашел записи, которые говорили о том, что использование Google запрещено. Самое не удобное в Android, вы видите лог, но не знаете какое системное приложение его производит. Чтобы отыскать от куда ноги растут, мне пришлось распотрошить все системные приложения до дизассемблированного Java кода. Это заняло достаточно времени, но я до сих пор пользуюсь проделанной работой при анализе и поиске нужного кода. Этапы получения подобного инструментария следующие:
1. Сделать DEODEX всей прошивки
2. Вашу новую DEODEX прошивку надо будет собрать и прошить на телефон. Как это делается — тема другой статьи.
3. Из каждого файла, находящегося в /system/framework вытащить файл classes.dex и переконвертировать в JAR посредством dex2jar.
4. Каждый полученный JAR открыть в JD-GUI и пере-сохранить в исходный код
5. Распаковать исходный код из архива.
В итоге у меня получилось столько папок, сколько было JAR файлов в /system/framework, и каждая папка имела структуру исходных кодов Java.
Путем несложных манипуляций, я быстро отыскал то место, которое генерировало записи в logcat.
Не будем рассматривать всю логику запрета, так как для каждого случая это отдельная история. Мне пришлось потратить пару часов, прежде чем я нашел где производятся проверки, построить в голове блок схему алгоритма и понять куда надо лезть, чтобы алгоритм чуть чуть «попортить».
Оказалось все просто. Есть подпрограмма, которая на основе заранее установленных констант, при обращении отвечала, относится ли телефон к Китаю или же нет.
Код находился в файле HTCExtension.jar, а класс, который содержал данную подпрограмму находился в \com\htc\util\contacts\BuildUtils$Customization.java
Распаковка и анализ оригинального файла
1. Сперва нам надо взять оригинальный DEODEX JAR файл, который отвечает за нужную нам часть кода. В нашем случае HTCExtension.jar.
2. Открыть любым архиватором и вытащить от туда classes.dex
3. С помощью конвертера dex2jar преобразовать его в JAR файл. Команда: dex2jar.bat classes.dex
4. Открыть полученный classes_dex2jar.jar файл в JD-GUI.
5. Да, чаще всего JD-GUI декомпилирует код не так как он выглядит в оригинале, оно и понятно, но читать вполне можно. В исходнике мы видим, что подпрограмма проверяет параметры проекта и языковой флаг прошивки. В нашем прискорбном случае возвращается значение TRUE.
9. Страшно, не правда ли? Ничего же не понятно. Но, это дело поправимое. Создав несколько своих патчей и набив тем самым руку, вы легко сможете модифицировать код без сторонних средств. В нашем случае, в этом коде
происходит присваивание переменной v0 значение 1, то есть TRUE. Далее идут всякие проверки, и если телефон не китайский, то значение переменной изменяется:
12. А как нам получить Dalvik код данного исходного кода? Для новичков мы сделаем небольшой трюк.
Создание Dalvik кода
1. Открываем Android SDK.
2. Создаем новый проект, и в наш единственный тестовый класс пишем следующий код
3. Компилируем наш проект и затем берем собранное приложение из рабочей области.
4. Кладем собранное приложение в папку, где мы с вами потрошили JAR файл.
5. Даем команду
8. Все, код для патчинга готов.
Накатывание патча
1. Dalvik код замусорен маркерами, указывающими строку кода в оригинальном исходном файле. Это нужно при выводе ошибок, если таковые имеются в вашей программе. Без указаний строк код также прекрасно работает.
2. Удаляем строки с нумерацией строк, копируем и заменяем метод (подпрограмму) в нашем \com\htc\util\contacts\BuildUtils$Customization.java файле.
3. Сохраняем файл. Да, забыл сказать, редактор нужен нормальный, например Notepad++ или EditPlus. Кому какой нравится.
Компиляция и сборка патченного JAR файла
Замена оригинального файла на патченный
Обычно, для рядовых пользователей создаются специальные скрипты, которые через recovery заменяются. Но нам такое не интересно. Во-первых долго и нудно, во-вторых мы же опытные пользователи и можем себе позволить некоторые тонкости.
1. Заменить текущий рабочий файл можно следующими командами, если у вас уже стоит DEODEX прошивка и имеется root доступ:
1-ая команда закидывает патченный файл на флешку
2-ая команда открывает shell
3-ая команда дает root доступ
4-ая команда монтирует систему в режим чтения/записи
5-ая команда делает резервную копию файла
6-ая команда перезаписывает существующий файл новым патченным.
7-ая команда настраивает разрешения
8-ая команда удаляет кэш
9-ая команда делает перезагрузку устройства.
2. Спасибо что дочитали до этого пункта, осталось немного.
3. После перезагрузки ваш новый патченный код вступит в силу.
4. Если код не работает или выскакивает ошибка, то путем не хитрых комбинаций можно вернуть назад резервную копию.
Эпилог
Да, кому-то показалось данная статья слишком специфичной, кому-то мало-понятной, а кому-то бесполезной. Я специально обошелся без углубленной детализации и иллюстраций как это все выглядит в живую и на практике. Во-первых, данный труд будет неблагодарный и только породить еще больше вопросов. Во-вторых, не хочу видеть армию пользователей на форумах, которые жалуются, что убили свой телефон.
К следующей статье я расскажу как делать Твики. Будет пример использования автоматической записи телефонных звонков родными средствами телефона. Спасибо за ваше внимание.