Как создать патч для android

Патчим прошивку Android за 5 минут

Задача

Все началось с того, что я захотел установить на планшет Digma Optima 7.61 игру GTA San Andreas. К сожалению, виртуальная SD-карта планшета имеет объем менее 1 Гб, а кэш игры весит порядка 2-3 Гб. На планшете установлен Android 4.4.2 и возможность просто взять и сменить память по умолчанию в нем отсутствует. Так же в нем отсутствует файл /etc/vold.fstab (он есть на более старых версиях андроида, и изменив данный файл с root-правами, можно поменять местами виртуальную и реальную карты памяти).

Необходимые инструменты

1. Компьютер или ноутбук с ОС Linux.
2. Утилиты adb и fastboot (входят в состав Android SDK, так же, как заметил tmnhy, входят в репозитории как отдельные пакеты).
3. Набор утилит bootimg_tools (нашел здесь).

Решение

1. Извлекаем с устройства загрузочный образ

— Подключаем устройство к компьютеру через usb-кабель и заходим в shell устройства:

— Где-то в папке /dev/block на устройстве нужно найти файл с именем boot. У меня он находился по пути /dev/block/by-name/boot, но данный путь может различаться на разных устройствах.

— Извлекаем загрузочный образ:

— Выходим из shell’а (exit) и извлекаем образ:

2. Затем загрузочный образ нужно разобрать

— Скачиваем и распаковываем bootimg_tools.

— Добавляем bootimg_tools в PATH:

— Если все предыдущие шаги сделаны верно, то должна появиться папка boot-from-device. Внутри нее должны лежать файлы zImage и ramdisk.cpio.gz, а так же папка ramdisk. Как раз внутри последней лежит содержимое загрузочного образа, которое мы будем патчить.

3. Патчим

Для решения своей задачи я нашел строчку, которую нужно заменить, в файле init.sun8i.rc. Я просто заменил export EXTERNAL_STORAGE /mnt/sdcard на export EXTERNAL_STORAGE /mnt/extsd. Как я понимаю, это как раз и есть то значение, которое возвращает метод Environment.getExternalStorageDirectory() в Android API. В пользу этого предположения говорит тот факт, что после применения патча приложения начали использовать аппаратную карту памяти вместо виртуальной для хранения своих данных.

4. Заменяем загрузочный образ на устройстве

Я написал для этих целей небольшой скрипт:

Итоги

После проделанных манипуляций игра на планшете успешно заработала.

Источник

Как создать патч для android

Новые темы необходимо создавать только в корневом разделе! В дальнейшем они будут обработаны модераторами.

Если Вы выложили новую версию программы, пожалуйста, сообщите об этом модератору нажав на вашем сообщении кнопку «Жалоба».

Последнее обновление программы в шапке: 15.11.2019

Краткое описание:
Движок патчей для патчинга андроид приложений под PC

Описание:
Простой движок патчей, для которого вы можете написать свой патч. В программе присуствует справка по написанию патчей + примеры патчей. TruePatcher поддерживает ОТА обновления, по-этому обновление там будет раньше чем на пда:). Патчер делается чисто на энтузиазме и не имеет никакого платного контента, так что относитесь к любому труду с уважением.
При возникновении каких-либо ошибок или вопросов можете написать об этом в теме для решения проблемы.
Системные требования: Windows 7/8.1/10, .Net 4.7
Разрядность: x32, x64
Установка:
Скопировать папку TruePatcher в папку BatchApkTool\bin\plugins если хотите использовать как плагин для BatchApkTool. Так же можете использовать TruePatcher как standalone программу, непосредственно запустив TruePatcher.exe

Сообщение отредактировал Mr Ikso — 15.01.21, 13:44

— dot (.) не матчит символы перевода строк. Многострочный матчинг делать «[\\s\\S]+?»
— в json можно оставлять комментарии

Ну и первый патч, чтобы другие не делали тоже самое

Читайте также:  Android and ios app icon

Сообщение отредактировал cergor — 31.07.19, 17:59

Источник

Как создавать патчи, основанные на доверчивой политике безопасности Android

Приветствую тебя, уважаемый читатель!

Offtop

В этом топике я хотел бы рассказать о том, как можно получать доступ к тому, что принадлежит нам, но косвенно.
Любой софт — это чья-то собственность: кто-то сидел и шевелил своими мозгами, чтобы произвести на свет очередное «чудо».
Но вне наших девайсов речи о софте не может и быть. Понятие «софт», в таком случае, будет означать не более чем «мягкость».
Это очевидно.
Именно поэтому мы имеем право вытворять с любым программным кодом, выполняющимся на нашем устройстве, все, что пожелает душа…

Intro

Думаю, начать стоит с самого начала. Все началось с моего обнаружения пользовательской зависимости окружающих к небезызвестной игре 2048. Мне, конечно же, стало интересно, чем эта игра так захватывает людей, поэтому я решил сам ее попробовать. Через несколько минут я понял ее суть и мне эта игра тоже стала интересна.
Должен признаться, более 5000 очков мне набирать не удавалось никак, а до 2048 было еще слишком долго…
Тем временем окружающие «игроки» с легкостью набивали по 10-16тыс очков, а некоторым удавалось даже достигать 2048 в клетке.
Что ж, спустя некоторое время у меня возникла идея тупо взломать эту игру, чтобы не «убивать» время на ее прохождение( она слишком долгая в прохождении, но от этого не менее затягивающая ). А еще спустя пару дней, об этом же меня попросили и мои знакомые.
Это означало одно: пора браться за дело…

Что было в начале?

Этот взлом не начался с чего-то необычного. Все было по шаблону: я вытащил APK-пакет приложения, произвел первичную декомпиляцию, с использованием apktool.jar, затем вторичную( для получения Java кода из Smali ), используя тулзу jd-gui. Ничего необычного. Далее я долгое долгое время бороздил по Java-классам в надежде отыскать хоть что-то полезное и интересное. Помимо «тонн» рекламных и гугловских библиотек я ничего не замечал. В конце концов удалось наткнуться на внутренности данного приложения, т.е то, где все интересное и происходит:

Но, как ты можешь видеть, рыться во всем этом, видимо, обфусцированном коде, мало кому захочется: оригинальные названия классов, методов и переменных представляют из себя лишь краткий набор букв. Исследование на данном этапе зашло в тупик…
Я решил бросить это дело и заняться чем-то более полезным. Но спустя несколько дней я решил вновь вернуться к данной теме.

Начало конца

Я вдруг решил просто покопаться в данных, хранимых приложением. Это могли быть данные обо всем, начиная с цвета клеток поля и заканчивая текущим количеством очков. Структура данных приложения такова:

Теперь по порядку:

  • Папка /cache пуста, а поэтому особого интереса не представляет
  • В /files, на первый взгляд, хранится мусор, но это только на первый взгляд
  • Папка /lib содержит графическую библиотеку Cocos2D, что, в общем-то, нам тоже не интересно.
  • Ну и /shared_prefs содержит текущие значения SharedPreferences приложения

Из этого мы делаем вывод, что интерес представляют только две папки: files и shared_prefs.
Что ж, смотрим, что там внутри них.

В первом случае нас интересует файл save.plist, а во втором — единственный файл Cocos2dxPrefsFile.xml.
Их названия говорят за себя. Дабы не растягивать текст, сразу предоставлю информацию об обоих файлах:

1) save.plist
Как несложно догадаться, этот файл отвечает за сохранение состояния игры перед выходом. В сохранение состояния входит: описание клеток игрового поля, количество Undo и текущий рейтинг игрока.

2) Cocos2dxPrefsFile.xml
Здесь приложение хранит данные о максимально достигнутом когда-либо количестве очков.

Одна из особенностей заключается в том, что эти файлы представлены в удобочитаемом формате XML:

Читайте также:  Rome total war android как убрать проверку лицензии

2) Файл save.plist
( каждый тег dict хранит данные об определенной клетке в определенный момент времени )

Теперь, зная это и имея на устройстве ROOT права, можно с легкостью подстроить игру под себя.
Но рут доступ есть далеко не у всех.
Именно поэтому следует создать патч для этого приложения, который был бы доступен широкой аудитории.

Создание патча

Для начала немного теории.
Все ANDROID-приложения обладают собственной песочницей, доступ к которой может быть получен только этим приложением( или рут-пользователем ). Песочница представляет из себя папку, находящуюся в сердце OS — /data/data/*. Вместо звездочки может стоять имя пакета приложения. Например, имя пакета игры 2048 — com.estoty.game2048, как ты мог уже догадаться из слайдов выше. Следовательно, доступ к папке /data/data/com.estoty.game2048 есть только у игры( и у рута ), а, следовательно, и доступ ко всем вкусностям, перечисленным выше.
Казалось бы, что нам остается?

Вероятно, тебе приходит на ум создание собственного приложения с одноименным пакетом. Но при компиляции и установке нашего приложения-фейка мы получим ошибку INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES , говорящую о том, что ключ, которым была подписана игра, не соответствует ключу, которым подписано наше приложение-фейк.

Значит, нам остается одно: пересобрать игру в APK и подписать его нашим ключом с помощью тулзы
JARSIGNER, а затем и наше приложение-фейк тем же ключом! Плюс, зная то, что при переустановке приложений Android не удаляет данные игры( т.е ее песочницу ), мы можем подменить данные игры на свои данные, опираясь на добрую и доверчивую политику безопасности OS Android, а затем запустить оригинальную игру, которая бы уже использовала наши фейковые данные.
Но а вдруг игра перезапишет данные при переустановке? Что ж, сейчас и это проверим!

Начнем с подписки игры нашим ключом( сертификатом ). Для этого ее нужно стандартно разобрать( декомпилировать, если угодно ), а затем собрать снова и уже после этого подписать своим ключом. Предполагается, что ты знаком с этим процессом. Если же нет, то он неплохо расписан, например, вот здесь.

jarsigner -keystore default.keystore -storepass *** -keypass *** 2048.apk default

Итак, имеем APK пакет приложения, подписанный нашим дефолтным ключом.

Далее мы создаем новое Android-приложение, с именем, названием пакета и сертификатом(ключом), идентичным игре 2048.
Теперь между нашим приложением-патчем и игрой 2048 нет каких-либо отличий на системном уровне ( то есть для Android, это два идентичных приложения, которые могут друг друга переустановить, заменять ),

Теперь нам следует подумать о том, как будет работать патч.
Разумеется, все можно сделать просто: писать статические данные в файлы Cocos2dxPrefsFile.xml и save.plist, которые, например, устанавливают большое количество очков и большие числа на игровом поле. Но это не круто. Я предлагаю сделать патч динамичным, т.е таким, чтобы он мог в любое время без перекомпиляции( пересборки ) устанавливать нужные нам значения рейтинга, клеток поля и т.д.

Если поплевать на дизайн и оформление, а сосредоточиться только лишь на функциональности патча, то получится примерно следующее:

В патч включены самые «полезные» фичи:
у пользователей будет возможность менять свой лучший рекорд, менять текущий и устанавливать цифры в каждой клетке игрового поля!
Это более чем достаточно.

Коддд

P.S Предполагается, что ты имеешь базовые представления об устройстве Android-приложений. Поэтому комментариев к коду практически нет.

Итак, с манифестом приложения мы ничего более делать не будем — имя пакета уже было установлено при создании нового проекта, а имя приложения, в общем-то, менять необязательно. Никаким особым функционалом патч обладать не будет, так что специфичные user-permissions нам тоже ни к чему.

По нажатию на единственную кнопку будет вызываться функция Patch :

Устанавливаем новый рекорд:

И формируем игровое поле, как возжелаем( как ты помнишь, тут все в формате XML. Прошу прошения за небрежность формата ниже. ):

Читайте также:  Как разрешить обновление андроид

Компилируем. Подписываем( сертифицируем ) тем же ключом, что и игру 2048.

Проверяем работоспособность

Супер, игра, подписанная неродным ключом, работает.

2) Устанавливаем патч( Android автоматически переустановит приложение, заменит его на патч, данные приложения, при этом, сохранятся ):
adb install -r patch.apk

и эксплуатируем его:

3) Переустанавливаем нашу игру:

Отлично. Патч полностью работоспособен!
В данный момент мы все действия проводили в консоли( для скорости ), но на деле же все куда проще: достаточно закинуть и игру, и патч на карту памяти своего девайса, например, далее установить игру, затем патч и затем снова игру. В таком случае система Android тебя каждый раз будет предупреждать, что приложение будет переустановлено. Вы, разумеется, соглашаетесь.

Вот так можно использовать политику безопасности Android, наложенную на пакеты приложений, для создания патчей.

Outro

На самом деле, подобная брешь не является виною только Android. Я думаю, тут также виноваты и разработчики приложений, которые не проверяют целостность данных, не шифруют их и используют их в своем приложении с полной доверенностью источнику…
Что ж, вот мы и рассмотрели еще один аспект безопасности, который следует учитывать при разработке своих приложений под OS Android.

Источник

Как создать патч для android

Последнее обновление программы в шапке: 28.12.2013

Краткое описание:
Создание update.zip через интерфейс, подпись, подпись для стоковых рекавери.

Описание:
Наверняка многие из Вас хотя-бы один раз устанавливали прошивку, модифицированный ресурс или устанавливали root на свой Android девайс. Многие часто создают или пытаются создать, какое не будь обновление, каждый раз создавая папки, кладут необходимые файлы, открывают архиватор архивируют. Пора упростить этот процесс! Встречайте мой проект Update Zip Creator!

Цели создания программы Update Zip Creator

1. Быстрая инсталляция на компьютер (2 клика)

2. Быстрый доступ к программе

3. Автоматизированный процесс в создание обновлений, патчей и ПРОШИВОК, модификаторов в виде update.zip

4. Проверка обновлений программы на наличие новых версий,

Обзор возможностей и принципы работы программы Update Zip Creator

Программа имеет англоязычный интерфейс (просьба не просить перевести на русский язык) и содержит такие пункты:

Create New Project? — создает новый проект в папке kitchen — директория system c поддиректориями и директория data c поддиректориями. Если в данной папке ( kitchen) были какие-то файлы и папки, то они будут уничтожены.

Fill Project — Переход в папку kitchen для наполнения файлами

Created update.zip — создание прошивки в виде архива для обновления, в процессе создание, все незаполненные папки будут удалены (например Вы положили в папку /system/etc файл hosts, то эта папка не будет тронута а /system/app будет удалена)

Fill ProjectCreated update.zip — автомат Fill Project и Created update.zip

Fill ProjectCreated update.zipSign Normal — автомат Fill Project и Created update.zip плюс подпись

Fill ProjectCreated update.zipSign Stock — автомат Fill Project и Created update.zip плюс подпись которая подоходит для Стоковых Recovery

Sign – подписи проектов, если у вас есть созданный проект

Check for Update new Program — проверка новых версий программы.

Опишу процесс как ее можно использовать на своем примере: у меня есть 1-ый проект называется ADB Run, который недавно научился делать ODEX прошивки, я запускаю программу Update Zip Creator и копирую odex-ированные файлы в папку Kitchen, нажимаю цифру 1 и 4 и у меня создан update.zip и прошиваю! Все очень легко!

Буду рад адекватным комментариям, предложениям и выявлению ошибок.

NEW отправка проекта на Sdcard
Создание Прошивок
Скрипты для автоматизации

Русский интерфейс: Нет

Разработчик: Шипилов Виталий aka Shipiloff69 aka Usernokiamen
Домашняя страница: androidp1.ru

Скачать: версия: 2.5.5
UpdateZip_Creator_v2.5.5.zip ( 14.91 МБ )

Сообщение отредактировал CyberBob — 14.05.14, 19:34

Источник

Оцените статью