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. Ако кодът не работи или се появи грешка, тогава чрез несложни комбинации можете да върнете резервното копие.