Android модификация
Преди няколко години, когато за първи път се запознах с Android, чух от колега на работа, че Android предоставя възможност за инсталиране на модифициран или домашен фърмуер. Честно казано, тогава бях далеч от това. А и преди половин година почти не се интересувах от подобни неща. Дълбоко в сърцето си бях сигурен, че това, което производителят прави, вече е предназначено за нормална употреба.
Тази поредица от статии ще говори за това как да направите обратно програмиране за Android, да внедрите пачове, настройки и модификации.
Така! Нека първо дефинираме понятията, които ще бъдат използвани в тази статия. Вашето обичайно разбиране обаче може да се различава значително.
Кръпка- промяна или подмяна на съществуващия програмен код с цел модифициране на програмния алгоритъм.
Mod- като правило, добавяне на допълнителна функционалност към съществуващия програмен код без промяна на алгоритъма.
Tweak- подобряване на функционалността на програмата с цел улесняване на достъпа до системните параметри.
Подготовка на средата
1.Android SDK. Това е среда за разработка на приложения за Android. За да направим модификации, определено ще трябва да проверим нашия програмен код. Средата за разработка е най-доброто, което можем да използваме.
2.Android Kitchen. Тази помощна програма ще ви позволи да работите с изображения на системни дялове на официален или неофициален фърмуер.
3.JD-GUI. Декомпилатор на Java код. Веднага ще отбележа, че това е най-добрият декомпилатор по отношение на лекотата на използване.
4.DJ Java Decompiler. Друг декомпилатор или дизасемблер, както някои обичат да го наричат, на езиковия код на Java. Не е удобно за използване, ноанализира код, който JD-GUI понякога не разбира.
5.smali. Друг дизасемблер, но вече далвик код. smali е необходим за разглобяване, а backsmali за сглобяване на код.
6.dex2jar. Помощна програма за конвертиране на изпълними файлове с код Dalvik.
Преобразуване на фърмуера
След като фърмуерът от оптимизиран изглед (ODEX - оптимизиран изпълним код на dalvik, ако не ме лъже паметта) стане DEODEX (тоест НЕ е оптимизиран), всички изпълними файлове са готови за модификация.
Директни модификации
Създаване на пачове
1. Направете DEODEX целия фърмуер
3. Извлечете файла classes.dex от всеки файл, намиращ се в /system/framework, и го конвертирайте в JAR с помощта на dex2jar.
4. Всеки получен JAR се отваря в JD-GUI и се запазва отново в изходния код
5. Разопаковайте изходния код от архива.
В крайна сметка получих толкова папки, колкото имаше JAR файлове в /system/framework и всяка папка имаше структура на изходния код на Java.
Чрез прости манипулации бързо намерих мястото, което генерира записи в logcat.
Няма да разглеждаме цялата логика на забраната, тъй като за всеки случай това е отделна история. Трябваше да прекарам няколко часа, преди да намеря къде се правят проверките, да изградя блокова диаграма на алгоритъма в главата си и да разбера къде да отида, за да „разваля“ малко алгоритъма.
Кодът беше вHTCExtension.jarи класът, който съдържаше тази рутина, беше в\com\htc\util\contacts\BuildUtils$Customization.java
Разопаковане и анализ на оригиналния файл
1. Първо трябва да вземем оригиналния DEODEX JAR файл, който отговаря за частта от кода, от която се нуждаем. INв нашия случайHTCExtension.jar.
2. Отворете с произволен архиватор и извадете classes.dex от там
3. Използвайте конвертора dex2jar, за да го конвертирате в JAR файл. Команда: dex2jar.bat classes.dex
4. Отворете получения файл classes_dex2jar.jar в JD-GUI.
6. За да направим кръпка, трябва да разглобим самия код на Dalvik. За целта използваме баксмали. Най-удобният начин е да създадете отделна папка и да съберете три файла заедно:HTCExtension.jar,smali.jarиbaksmali.jar. Даваме командата java -Xmx512m -jar baksmali.jar -a -d -o HTCExtension -x HTCExtension.jar
е API за вашата версия на Android. За JB е 16
- папката, в която се намират всички рамки на фърмуера.
В моя случай беше командата
java -Xmx512m -jar baksmali.jar -a 16 -d S:\dev\Android\Android-Kitchen\WORKING_JB_15\system\framework -o HTCExtension -x HTCExtension.jar
7. В нашата новосъздадена папка се появи папката HTCExtension и в нея нашите файлове с код Dalvik.
8. Намираме файла по пътя\com\htc\util\contacts\BuildUtils$Customization.javaи разглеждаме кода:
9. Страшно, нали? Нищо не е ясно. Но това е поправимо. След като сте създали няколко собствени кръпки и по този начин сте напълнили ръката си, можете лесно да промените кода на Android без инструменти на трети страни. В нашия случай, в този код
10. Най-лесният начин да спасите бащата на българската демокрация е да промените кода на следния:
, тоест променете стойността на променливата от 1 на 0. Тоест, каквото и да се случи, стойността FALSE винаги ще бъде върната и в JD-GUI кодът ще изглежда така
11. Да, методът ще работи. Но ние не търсим лесни пътища – този път. Второ, не е много красиво. Искам нещо като код
12. И как да получим Dalvik кода на този изходен код? За начинаещи ще направим малък трик.
Създаване на Dalvik код
1. Отворете Android SDK.
2. Създаваме нов проект и в нашия единствен тестов клас пишем следния код
3. Компилираме нашия проект и след това вземаме сглобеното приложение от работното пространство.
4. Поставяме сглобеното приложение в папката, където изкормихме JAR файла.
5. Даваме командата java -Xmx512m -jar baksmali.jar -a -d -o test -x test .apk
6. Разглобихме новосъздаденото приложение в код на Dalvik.
7. Отворете нашия файл test.smali и вижте кода там
8. Всичко, кодът за корекция е готов.
Навиване на кръпка
1. Кодът на Dalvik е осеян с маркери, указващи ред от код в оригиналния изходен файл. Това е необходимо при показване на грешки, ако има такива, във вашата програма. Кодът също работи добре без низове.
2. Изтрийте редове с номера на редове, копирайте и заменете метода (подпрограма) в нашия файл\com\htc\util\contacts\BuildUtils$Customization.java.
Компилиране и изграждане на коригирания JAR файл
1. С помощта на backsmali изкормихме нашия JAR файл и сега трябва да го изградим обратно.
2. Даваме командата java -Xmx512m -jar smali.jar -a 16 HTCExtension -o classes.dex
3. Файлът classes.dex се появява в нашия татко
4. Отворете отново файлаHTCExtension.jarс архиватора и заменете съществуващияclasses.dexв него с новосъздадения.
5. Това е всичко, нашиятHTCExtension.jarсъдържа модифицирания програмен код.
Замяна на оригиналния файл с преработен
Обикновено за обикновени потребителисъздават се специални скриптове, които се заменят чрез възстановяване. Но ние не се интересуваме от това. Първо, това е дълго и досадно, и второ, ние сме опитни потребители и можем да си позволим някои тънкости за модифициране на фърмуера на Android.
1. Можете да замените текущия работен файл със следните команди, ако вече имате инсталиран фърмуер DEODEX и имате root достъп:
- Първата команда качва пакетирания файл на флаш устройството
- Втората команда отваря shell
- 3-та команда дава root достъп
- 4-та команда монтира системата в режим на четене/запис
- 5-та команда прави резервно копие на файла
- Шестата команда презаписва съществуващия файл с новия закърпен.
- 7-ма команда за конфигуриране на разрешения
- 8-ма команда изтриване на кеша
- 9-та команда прави рестартиране на устройството.
2. Благодаря ви, че прочетохте до тук, не остана много.
3. След рестартиране новият ви коригиран код ще влезе в сила.
4. Ако кодът не работи или се появи грешка, тогава чрез несложни комбинации можете да върнете резервното копие.