Что можно сделать из файла
Иногда некоторые приложения на Android чем-то не устраивают пользователя. В качестве примера можно привести назойливую рекламу. А то бывает и так — всем хороша программа, да только перевод в ней или кривой, или вовсе отсутствует. Или, например, программа триальная, а получить полную версию возможности нет. Как же изменить ситуацию?
Внедряем в прошивку Google Apps
Почти всегда кастомные прошивки поставляются без сервисов Google и магазина приложений. Разработчики предлагают нам установить их отдельно с помощью пакета GApps. Однако его можно интегрировать прямо в прошивку.
Для начала необходимо скачать пакет GApps. Я рекомендую брать архивы Open GApps. Выбираешь версию Android, архитектуру процессора и вариант комплектации (Pico, Nano, Stock. ), который определяет, сколько различных приложений Google содержит архив. Я рекомендую скачать версию Pico. Она содержит только Play Store и набор необходимых для его работы библиотек.
Интеграция GApps в прошивку выполняется так:
- Распаковываем ZIP-архив GApps с помощью любого архиватора.
- Переходим в папку Core.
- Видим множество архивов с расширением .tar.lz . Извлекаем с помощью lzip.
- После распаковки копируем файлы из папок в соответствующие папки в system. Что куда кидать, нетрудно догадаться по структуре каталогов в архиве. Например, configupdater (со скриншота) нужно кидать в папку priv-app .
- Переходим в папку GApps (находится рядом с Core) и проделываем пункты 3 и 4 для файлов в ней.
- Все, мы интегрировали GApps в нашу прошивку!
Глава 3 Проводник Windows Vista. Работа с файлами и папками
Глава 3 Проводник Windows Vista. Работа с файлами и папками • Интерфейс Проводника Windows Vista• Навигация по папкам• Представление значков в Проводнике• Поиск• Настройка внешнего вида и параметров Проводника• Операции с файлами и папками• Работа со сменными
3. PeaZip
Ещё один архиватор с открытым исходным кодом, который поддерживает более 200 форматов сжатия, в том числе и самые экзотические. В PeaZip встроен полноценный менеджер файлов для поиска, просмотра и редактирования контента.
Приложение умеет защищать архивы не только паролем — есть двухфакторная аутентификация с помощью ключа. Помимо этого, поддерживается безопасное удаление данных, восстановление повреждённых архивов и конвертация из одного формата в другой.
Свободное место
Необходимо понимать, что место для установки прошивок ограниченно. Нельзя установить прошивку, размер которой перевешивает размер раздела system устройства. Посмотреть его значение можно, используя ADB:
Инфа о разделе system
Второй вариант: поставить на устройство терминал и набрать команду
Размер раздела в байтах можно узнать, установив на смартфон BusyBox и выполнив в терминале команду
Или то же самое с помощью ADB:
Место, занимаемое прошивкой, будет приблизительно равно размеру system в распакованном виде. Вообще, при создании прошивки необходимо учитывать, что юзер также может прошить поверх нее различные модификации (SuperSU, Xposed) или перенести приложения в раздел system. Например, минимальный пакет приложений Google (Pico) требует минимум 150 Мбайт дополнительного пространства для установки.
При необходимости размер файла прошивки можно уменьшить, удалив не только ненужные программы из /system/app ( /system/priv-app ) и звуки вызова из system/media/audio и bootanimation.zip , но и:
- /system/tts/lang_pico — языки примитивного голосового движка Pico TTS, голосовой движок Google это не затронет;
- /system/usr/srec/config/ — офлайн-языки. Можно будет скачать потом онлайн, если понадобится.
Препарирование. Отключаем рекламу
Теория — это, конечно, хорошо, но зачем она нужна, если мы не знаем, что делать с распакованным пакетом? Попробуем применить теорию с пользой для себя, а именно модифицируем какую-нибудь софтину так, чтобы она не показывала нам рекламу. Для примера пусть это будет Virtual Torch — виртуальный факел. Для нас эта софтина подойдет идеально, потому что она под завязку набита раздражающей рекламой и к тому же достаточно проста, чтобы не потеряться в дебрях кода.
Поиск кода рекламы в jd-gui
Итак, с помощью одного из приведенных способов скачай приложение из маркета. Если ты решил использовать Virtuous Ten Studio, просто открой APK-файл в приложении и распакуй его, для чего создай проект (File -> New project), затем в контекстном меню проекта выбери Import File. Если же твой выбор пал на apktool, то достаточно выполнить одну команду:
После этого в каталоге com.kauf.particle.virtualtorch появится файловое дерево, похожее на описанное в предыдущем разделе, но с дополнительным каталогом smali вместо dex-файлов и файлом apktool.yml. Первый содержит дизассемблированный код исполняемого dex-файла приложения, второй — служебную информацию, необходимую apktool для сборки пакета обратно.
Первое место, куда мы должны заглянуть, — это, конечно же, AndroidManifest.xml. И здесь мы сразу встречаем следующую строку:
Нетрудно догадаться, что она отвечает за предоставление приложению полномочий на использование интернет-соединения. По сути, если мы хотим просто избавиться от рекламы, нам, скорее всего, достаточно будет запретить приложению интернет. Попытаемся это сделать. Удаляем указанную строку и пробуем собрать софтину с помощью apktool:
В каталоге com.kauf.particle.virtualtorch/build/ появится результирующий APK-файл. Однако установить его не получится, так как он не имеет цифровой подписи и контрольных сумм файлов (в нем просто нет каталога META-INF/). Мы должны подписать пакет с помощью утилиты apk-signer. Запустили. Интерфейс состоит из двух вкладок — на первой (Key Generator) создаем ключи, на второй (APK Signer) подписываем. Чтобы создать наш приватный ключ, заполняем следующие поля:
- Target File — выходной файл хранилища ключей; в нем обычно хранится одна пара ключей;
- Password и Confirm — пароль для хранилища;
- Alias — имя ключа в хранилище;
- Alias password и Confirm — пароль секретного ключа;
- Validity — срок действия (в годах). Значение по умолчанию оптимально.
Остальные поля, в общем-то, необязательны — но необходимо заполнить хотя бы одно.
Создание ключа в apk-signer
Работа с файлами и папками
Работа с файлами и папками Количество операций, выполняемых с файлами, способно повергнуть в шок начинающего пользователя. Копирование и переименование, поиск, резервное копирование и шифрование, при неудачном резервировании — восстановление, упорядочение данных, а
Что можно делать с окнами
Что можно делать с окнами Рабочий стол, значки, окна и диалоги — основа Windows. Большинство запущенных вами программ выводят на Рабочий стол свои окна. Вы можете перемещать их по экрану, изменять размер, развертывать на весь экран или сворачивать в значок на Панели задач. С
Изменяем звуковое оформление
Фактически все звуки, которые воспроизводит система, хранятся в папке /system/media/audio . Внутри нее ты найдешь следующие папки:
- alarms — мелодии будильника;
- notifications — звуки уведомлений;
- ringtones — мелодии звонка;
- ui — системные звуки, например низкий заряд батареи, фокусировка камеры, выбор элементов интерфейса.
В alarms, notifications, ringtones можно накидать сколько угодно любых мелодий. Взять их можно, например, здесь:
И маленький лайфхак: удаление файлов из папки ui приведет не к сбоям и ошибкам, а к исчезновению системных звуков. Поэтому ты можешь легко отключить звук создания снимка с камеры, снятия скриншота, просто потерев содержащие эти звуки файлы (их имена интуитивно понятны).
Меняем системные настройки (build.prop)
В образе system есть интересный файлик build.prop , содержащий множество полезной информации о железе устройства и настройках, устанавливаемых по умолчанию, для различных стоковых приложений. Справедливости ради замечу, что это не всегда так. Например, в Gigaset ME и ME Pro build.prop разделен на две части. В одной части содержатся настройки для Gigaset ME, а для ME Pro некоторые строки продублированы, но ключи (название смартфона и так далее) в них другие. Это было сделано, чтобы обеспечить более-менее корректную работоспособность одной и той же прошивки на разных аппаратах.
Дополнительный файл для Gigaset ME и ME Pro
Build.prop содержит (или может содержать) огромное количество настроек. Некоторые из них ничего не меняют, некоторые улучшают одно за счет ухудшения другого, но есть те, которые действительно полезны:
- ro.product.model и ro.product.manufacturer — модель смартфона и имя производителя. С помощью замены этих строк можно заставить Play Store думать, будто у тебя другой смартфон, что откроет доступ к большему количеству софта. Для всяких малоизвестных китайских смартфонов эти строчки могут стать спасительными;
- hw.qemu.mainkeys — принимает только два значения: 0 — показать наэкранные клавиши навигации, 1 — не показывать кнопки. Отсутствие строки соответствует 0;
- debug.sf.nobootanimation — значение 1 отключает анимацию загрузки, что немного поднимает ее скорость. Установка 0 или удаление строки возвращает анимацию на место;
- ro.telephony.default_network — говорит системе, в какой режим должна быть переключена мобильная сеть при загрузке;
- ro.sf.lcd_density — DPI дисплея, наиболее точное значение для дисплея можно посчитать через удобный сайт. Но никто не запрещает поставить и большее или меньшее значение по своему вкусу: более высокие значения делают элементы интерфейса крупнее, низкие — меньше;
- ro.config.vc_call_vol_steps — количество шагов громкости во время разговора (по умолчанию 8);
- ro.config.media_vol_steps — количество шагов громкости мультимедиа (по умолчанию 15).
Установка
Для установки кастомной прошивки необходим кастомный рекавери TWRP, позволяющий устанавливать неподписанные или подписанные тестовым ключом прошивки (именно такую мы создали). В журнале мы неоднократно описывали процесс его установки, да и в ветках форума, посвященных твоему устройству, обычно есть достаточно информации для того, чтобы это сделать.
3 Работа с папками и файлами
3 Работа с папками и файлами В этой главе пойдет речь об особенностях выполнения в Windows Vista различных повседневных задач, таких как просмотр содержимого папок, навигация, поиск документов, операции с файлами и папками.Обзор папокНовый интерфейс Проводника Windows Для
Выводы
Эта статья описывает лишь верхушку огромного айсберга под названием «модификация прошивок». «Серьезные» прошивки не только дополняют ядро и саму прошивку со стоковыми приложениями множеством функций (которые зачастую вырваны из других ядер и прошивок), организовывая или даже меняя принципы их взаимодействия, но и вполне могут кардинально менять принципы работы ОС. Правда, такая поделка — это уже не Android, а отдельная ОС, даже если Play-сервисы получится туда поставить (кстати, такие действия, мягко говоря, не поощряются Google). Ну и не забываем: все оболочки от производителей — TouchWiz, ZenUI, HTC Sense и так далее — всего лишь обычные кастомы, максимально привязанные к железу устройства и друг к другу.
Самый популярный архиватор, которым пользуются миллионы людей по всему миру. WinRAR поддерживает все форматы файлов, включая малораспространённые, и позволяет как упаковывать, так и извлекать их. Встроенные алгоритмы распознают тип контента и автоматически выбирают наиболее эффективное сжатие. Можно разделять архивы на части для удобной передачи, а также надёжно защищать их с помощью 256‑битного шифрования и электронной подписи.
Операции с файлами и папками
Операции с файлами и папками Наличие двух панелей позволяет легко и наглядно копировать или перемещать файлы.Последовательность действий при копировании или перемещении будет следующей.1. Откройте на одной из панелей папку, в которую нужно скопировать объект.2.
Если в мире Windows исполняемые файлы представлены в формате Portable Executable (PE), то в Linux эта роль отведена файлам в формате Executable and Linkable Format (ELF). Сегодня мы заглянем внутрь таких файлов, немного поисследуем их структуру и узнаем, как они устроены.
Сразу отмечу, что в отличие от Windows в Linux от расширения файла не зависит практически ничего (за совсем небольшим исключением). Тип и формат файла определяется его внутренним содержимым и наличием тех или иных атрибутов, поэтому файлы в формате Executable and Linkable Format могут иметь любое расширение.
Устройство APK-пакетов и их получение
Пакет приложения Android, по сути, является обычным ZIP-файлом, для просмотра содержимого и распаковки которого никаких специальных инструментов не требуется. Достаточно иметь архиватор — 7zip для Windows или консольный unzip в Linux. Но это что касается обертки. А что внутри? Внутри же у нас в общем случае такая структура:
- META-INF/ — содержит цифровой сертификат приложения, удостоверяющий его создателя, и контрольные суммы файлов пакета;
- res/ — различные ресурсы, которые приложение использует в своей работе, например изображения, декларативное описание интерфейса, а также другие данные;
- AndroidManifest.xml — описание приложения. Сюда входит, например, список требуемых разрешений, требуемая версия Android и необходимое разрешение экрана;
- classes.dex — компилированный байт-код приложения для виртуальной машины Dalvik;
- resources.arsc — тоже ресурсы, но другого рода — в частности, строки (да-да, этот файл можно использовать для русификации!).
Перечисленные файлы и каталоги есть если не во всех, то, пожалуй, в абсолютном большинстве APK. Однако стоит упомянуть еще несколько не столь распространенных файлов/каталогов:
- assets — аналог ресурсов. Основное отличие — для доступа к ресурсу необходимо знать его идентификатор, список asset’ов же можно получать динамически, используя метод AssetManager.list() в коде приложения;
- lib — нативные Linux-библиотеки, написанные с помощью NDK (Native Development Kit).
Этот каталог используют производители игр, помещая туда движок игры, написанный на C/C++, а также создатели высокопроизводительных приложений (например, Google Chrome). С устройством разобрались. Но как же получить сам файл пакета интересующего приложения? Поскольку без рута с устройства забрать файлы APK не представляется возможным (они лежат в каталоге /data/app), а рутить не всегда целесообразно, имеется как минимум три способа получить файл приложения на компьютер:
- расширение APK Downloader для Chrome;
- приложение Real APK Leecher;
- различные файлообменники и варезники.
Какой из них использовать — дело вкуса; мы предпочитаем использовать отдельные приложения, поэтому опишем использование Real APK Leecher, тем более что написан он на Java и, соответственно, работать будет хоть в винде, хоть в никсах.
Настройка Real APK Leecher
Другие статьи в выпуске:
Скрипт
Самые ленивые могут разобрать прошивку с помощью скрипта System_Extractor-Linux.
- Распаковываем архив с прошивкой в любую папку.
- Качаем скрипт по ссылке и разархивируем в любую папку.
- Запускаем файл ext (если будет ругаться на отсутствие Java, просто пропусти, нажав y ; Java нужна только для запаковки).
- Теперь выбираем распаковку, нажав кнопку 1, а затем Enter.
- Новая папка с именем extract_* появится рядом с файлом ext и папкой tools . Копируем в нее файлы system.new.dat и system.transfer.list .
- После копирования файлов нажимаем Enter и ждем. Через некоторое время нужно будет опять нажать Enter, ввести пароль администратора и еще раз тапнуть Enter.
- Готово. Содержимое system в папке extract_*/output .
Глава 11 Работа с файлами и папками
Глава 11 Работа с файлами и папками • Навигация по файлам и папкам• Операции с файлами и папкамиФайлы – это логическое представление информации, хранящейся в вашем компьютере, а также на всех внешних носителях (дискетах, компакт-дисках, flash-картах и т. д.). Физически все
7.14. Как отучить XP работать с ZIP файлами как с папками?
7.14. Как отучить XP работать с ZIP файлами как с папками? Для этого необходимо в командной строке набрать regsvr32 /u zipfldr.dll. Для того чтобы вернуть всё обратно, наберите regsvr32 zipfldr.dll.
Структура каталогов Android
После распаковки system появится следующая каталоговая структура:
- app — предустановленные приложения со стандартными привилегиями;
- priv-app — предустановленные приложения с повышенными привилегиями, в том числе некоторые компоненты системы;
- bin — бинарные файлы формата ELF, аналог каталогов /bin и /usr/bin в Linux. Содержит различные системные компоненты, используемые более высокоуровневыми компонентами системы;
- etc — файлы настроек. Полный аналог /etc в Linux, используемый, однако, только теми самыми системными компонентами. Приложения Android хранят индивидуальные настройки в каталогах /data/data/ ;
- fonts — шрифты. По умолчанию содержит только фирменные шрифты Roboto;
- framework — библиотеки Java-классов, используемых системой и приложениями. Тут же лежит файл framework-res.apk , содержащий полное описание интерфейса операционной системы, включая все графические файлы;
- lib и lib64 — Linux-библиотеки, используемые низкоуровневыми компонентами системы. Аналог каталогов /lib и /usr/lib в Linux, включая такие стандартные библиотеки, как libc, libz, libssl. На устройствах с архитектурой ARMv7 и ниже каталог lib64 будет отсутствовать;
- media — медиафайлы: рингтоны, звуки уведомлений, звуки интерфейса и анимация загрузки ОС;
- tts — файлы, необходимые синтезатору речи;
- usr — каталог, который обычно содержит файлы, необходимые для работы приложений из каталога bin. По сути, аналог /usr/share ;
- vendor — файлы, поставляемые производителем устройства. Обычно содержит бинарный firmware для различных железных компонентов, например модуля Wi-Fi;
- xbin — необязательный каталог; кастомные прошивки используют его для хранения таких вещей, как интерпретатор bash, SSH, PowerTOP, BusyBox, и других полезных инструментов;
- build.prop — файл, содержащий информацию о сборке, а также различные низкоуровневые настройки;
- addon.d — содержит скрипты, запускаемые после установки прошивки. Сюда же GApps прописывают свой скрипт, благодаря которому возрождаются после переустановки прошивки.
Ознакомившись с базовой структурой Android, начнем вносить изменения.
Введение
В этой статье мы поговорим о том, как разобрать пакет APK с приложением, рассмотрим его внутреннюю структуру, дизассемблируем и декомпилируем байт-код, а также попробуем внести в приложения несколько изменений, которые могут принести нам ту или иную выгоду.
Чтобы сделать все это самостоятельно, потребуются хотя бы начальные знания языка Java, на котором пишутся приложения для Android, и языка XML, который используется в Android повсеместно — от описания самого приложения и его прав доступа до хранения строк, которые будут выведены на экран. Также понадобится умение обращаться со специализированным консольным софтом.
Итак, что же представляет собой пакет APK, в котором распространяется абсолютно весь софт для Android?
Распаковываем system.new.dat
Файлы system.new.dat и system.transfer.list представляют для нас наибольший интерес. Точнее, не они, а содержащаяся в них система. Но добраться до нее не так просто.
7.6. Основные операции с файлами и папками
7.6. Основные операции с файлами и папками 7.6.1. Просмотр содержимого каталога Итак, начнем обзор нашей файловой системы. Откройте окно Мой компьютер (рис. 51) — вы увидите список дисков. Если щелкнуть на произвольном диске один раз, то слева вы увидите сводную информацию о
Ручной способ
Распаковываем архив с прошивкой в любую папку (например, в rom ):
Скачиваем нужные нам инструменты в эту папку:
Он преобразует файл system.new.dat в raw-образ с именем system.img . Монтируем образ к подпапке mnt :
Содержимое образа system
Просмотр и модификация
Допустим, ты нашел интересующий тебя пакет, скачал, распаковал… и при попытке просмотра какого-нибудь XML-файла с удивлением обнаружил, что файл не текстовый. Чем же его декомпилировать и как вообще работать с пакетами? Неужели необходимо ставить SDK? Нет, SDK ставить вовсе не обязательно. На самом деле для всех шагов по распаковке, модификации и упаковке пакетов APK нужны следующие инструменты:
Использовать все эти инструменты можно и по отдельности, но это неудобно, поэтому лучше воспользоваться более высокоуровневым софтом, построенным на их основе. Если ты работаешь в Linux или Mac OS X, то тут есть инструмент под названием apktool. Он позволяет распаковывать ресурсы в оригинальный вид (в том числе бинарные XML- и arsc-файлы), пересобирать пакет с измененными ресурсами, но не умеет подписывать пакеты, так что запускать утилиту signer придется вручную. Несмотря на то что утилита написана на Java, ее установка достаточно нестандартна. Сначала следует получить сам jar-файл:
Далее нам понадобится скрипт-обвязка для запуска apktool (он, кстати, доступен и для Windows), включающий в себя еще и утилиту aapt, которая понадобится для запаковки пакета:
Далее просто сваливаем содержимое обоих архивов в каталог ~/bin и добавляем его в $PATH:
Если же ты работаешь в Windows, то для нее есть превосходный инструмент под названиемVirtuous Ten Studio, который также аккумулирует в себе все эти инструменты (включая сам apktool), но вместо CLI-интерфейса предоставляет пользователю интуитивно понятный графический интерфейс, с помощью которого можно выполнять операции по распаковке, дизассемблированию и декомпиляции в несколько кликов. Инструмент этот Donation-ware, то есть иногда появляются окошки с предложением получить лицензию, но это, в конце концов, можно и потерпеть. Описывать его не имеет никакого смысла, потому что разобраться в интерфейсе можно за несколько минут. А вот apktool, вследствие его консольной природы, следует обсудить подробнее.
Импорт APK в Virtuous Ten Studio
Рассмотрим опции apktool. Если вкратце, то имеются три основные команды: d (decode), b (build) и if (install framework). Если с первыми двумя командами все понятно, то что делает третья, условный оператор? Она распаковывает указанный UI-фреймворк, который необходим в тех случаях, когда ты препарируешь какой-либо системный пакет.
Рассмотрим наиболее интересные опции первой команды:
- -s — не дизассемблировать файлы dex;
- -r — не распаковывать ресурсы;
- -b — не вставлять отладочную информацию в результаты дизассемблирования файла dex;
- --frame-path — использовать указанный UI-фреймворк вместо встроенного в apktool. Теперь рассмотрим пару опций для команды b:
- -f — форсированная сборка без проверки изменений;
- -a — указываем путь к aapt (средство для сборки APK-архива), если ты по какой-то причине хочешь использовать его из другого источника.
Пользоваться apktool очень просто, для этого достаточно указать одну из команд и путь до APK, например:
После этого в каталоге mail появятся все извлеченные и дизассемблированные файлы пакета.
Операции с файлами и папками
Операции с файлами и папками Одно из главных достоинств графического интерфейса – поддержка технологии Drag and Drop (дословно «перетащил и кинул»). Суть идеи заключается в том, что, выделив какой-либо объект в окне (или на Рабочем столе), а затем щелкнув на нем левой или правой
4. Keka
Простая, но в то же время мощная программа для создания и распаковки архивов на Mac. Keka удобно интегрируется в Finder, а для обработки файлов и папок достаточно перетащить их на иконку приложения в доке. Поддерживается 256‑битное AES‑шифрование и разделение архивов на части. При этом можно тонко настроить поведение программы отдельно для каждого из форматов.
Keka распространяется на полностью бесплатной основе, но при желании можно поддержать разработчика, купив приложение в Mac App Store. Версия из магазина ничем не отличается от бесплатной с сайта.
Операции с файлами и папками
Операции с файлами и папками В данном разделе мы рассмотрим важнейшие операции, которые можно выполнять с файлами и папками, хранящимися на компьютере, а также поговорим о том, как создавать новые объекты, записывать файлы на компакт-диск, flash-память и
5. Zip Archiver
Быстрый архиватор с приятным, интуитивным дизайном и интересными дополнительными возможностями. Zip Archiver позволяет открывать множество различных форматов, но создаёт архивы только в ZIP и 7z. Программа отличается высокой степенью сжатия и встроенным просмотрщиком.
Реализована интеграция с Dropbox, Google Drive и другими облачными сервисами — в один клик можно создавать резервные копии важных файлов и делиться прямыми ссылками на них.
6. The Unarchiver
Минималистичный архиватор для macOS, возможностей которого с головой хватит большинству пользователей. The Unarchiver не может создавать архивы, зато прекрасно справляется с их распаковкой.
Приложение умеет работать практически с любыми из существующих форматов и позволяет выбрать оптимальные настройки открытия архивов. Например, можно задать опции создания папок и удаления файлов после распаковки.
2. 7‑Zip
Не менее известный инструмент для работы с архивами, который имеет открытый исходный код. Он полностью бесплатен для любого использования, включая коммерческое. 7‑Zip очень легковесный (1 МБ), совсем не требователен к ресурсам и запросто справляется с любыми архивами.
Приложение умеет создавать самоизвлекаемые архивные файлы, устанавливать пароли на их открытие, а также может похвастаться наиболее высоким уровнем сжатия среди конкурентов.
Делаем исполняемые файлы
Не будем выдумывать что‑то сверхоригинальное, а остановимся на классическом хелловорлде на С:
Компилировать это дело мы будем с помощью GCC. Современные версии Linux, как правило, 64-разрядные, и входящие в их состав по умолчанию средства разработки (в том числе и компилятор GCC) генерируют 64-разрядные приложения. Мы в своих исследованиях не будем отдельно вникать в 32-разрядные ELF-файлы (по большому счету отличий от 64-разрядных ELF-файлов в них не очень много) и основные усилия сосредоточим именно на 64-разрядных версиях программ. Если у тебя возникнет желание поэкспериментировать с 32-разрядными файлами, то при компиляции в GCC нужно добавить опцию -m32 , при этом, возможно, потребуется установить библиотеку gcc-multilib. Сделать это можно примерно вот так:
Итак, назовем наш хелловорлд example. c (кстати, здесь как раз один из немногих случаев, когда в Linux расширение имеет значение) и начнем с исполняемого позиционно зависимого кода:
Как ты уже догадался, опция -no-pie как раз и говорит компилятору собрать не позиционно независимый код.
Вообще, если говорить правильно, то GCC — это не совсем компилятор. Это комплексная утилита, которая в зависимости от расширения входного файла и опций вызывает нужный компилятор или компоновщик с соответствующими входными данными. Причем из С или другого высокоуровневого языка сначала исходник транслируется в ассемблерный код, а уже затем все это окончательно преобразуется в объектный код и собирается в нужный нам ELF-файл.
В целом можно выделить четыре этапа работы GCC:
- препроцессирование;
- трансляция в ассемблерный код;
- преобразование ассемблерного кода в объектный;
- компоновка объектного кода.
Чтобы посмотреть на промежуточный результат, к примеру в виде ассемблерного кода, используй в GCC опцию -S :
Обрати внимание на два момента. Первый — мы в данном случае не задаем имя выходного файла с помощью опции -o (GCC сам определит его из исходного, добавив расширение *. s , что и означает присутствие в файле ассемблерного кода). Второй момент — опция -masm=intel , которая говорит о том, что ассемблерный код в выходном файле необходимо генерировать с использованием синтаксиса Intel (по умолчанию будет синтаксис AT&T, мне же, как и, наверное, большинству, синтаксис Intel ближе). Также в этом случае опция -no-pie не имеет смысла, поскольку ассемблерный код в любом случае будет одинаковый, а переносимость обеспечивается на этапе получения объектного файла и сборки программы.
На выходе получим файл example. s с таким вот содержимым (полностью весь файл показывать не будем, чтобы не занимать много места):
Наверняка у тебя как у пользователя Android возникало желание сделать операционную систему лучше, добавить полезное, убрать лишнее и поделиться своим творением с обществом. Сборка собственной прошивки из исходников — сложный процесс, требующий глубоких знаний предмета, однако никто не запрещает взять стандартную прошивку смартфона и адаптировать ее под свои нужды. Это не так уж и сложно сделать.
Начнем с того, что тебе нужен Linux. В Windows ты сможешь только разобрать прошивку, но собрать обратно уже не получится по чисто техническим причинам. Теперь о прошивке. Обычно они распространяются в виде ZIP-архивов, прошиваемых через кастомные рекавери. Именно один из них нам и понадобится для опытов. Начинать путь ромодела я рекомендую с какой-нибудь максимально приближенной к AOSP кастомной прошивки, потому что в ней зачастую проще разобраться, чем в стоке.
Нужный ZIP можно найти на XDA Developers или 4PDA. Но имей в виду, что нужна прошивка конкретно для твоей модели аппарата, — у того же Galaxy S7 есть несколько модификаций для разных рынков, не всегда совместимых между собой.
Декомпиляция приложений
В статье мы работали только с дизассемблированным кодом приложения, однако если в большие приложения вносить более серьезные изменения, разобраться в коде smali будет гораздо сложнее. К счастью, мы можем декомпилировать код dex в Java-код, который будет хоть и не оригинальным и не компилируемым обратно, но гораздо более легким для чтения и понимания логики работы приложения. Чтобы сделать это, нам понадобятся два инструмента:
Использовать их следует так. Сначала запускаем dex2jar, указывая в качестве аргумента путь до apk-пакета:
В результате в текущем каталоге появится Java-пакет mail.jar, который уже можно открыть в jd-gui для просмотра Java-кода.
Глава 4 Трюки с файлами и папками
Глава 4 Трюки с файлами и папками • Особенности работы с программой Проводник• Тонкости использования встроенной системы поиска• Настройка контекстного меню• Хитрости выполнения файловых операций• Как восстанавливать удаленные файлы• Дополнительные свойства
Меняем анимацию загрузки
Анимация хранится в виде PNG-картинок, упакованных в архив /system/media/bootanimation.zip без сжатия. Внутри архива находятся:
- desc.txt — файл, описывающий анимацию;
- part0 — папка с файлами анимаций, которые воспроизводятся первыми;
- part1 — папка с файлами анимаций, которые воспроизводятся вторыми;
- .
- part? — крайняя папка, изображения с которой воспроизводятся в конце.
Файл desc.txt может содержать нечто вроде
Назначение этих строк интуитивно понятно: 1920 × 1080 — разрешение картинки, 60 — число кадров в секунду. Part0 и part1 указывают на папки, из которых будет воспроизводиться анимация, и последовательность воспроизведения. Вообще, может быть как одна часть, так и несколько (три и больше).
Изображения, находящиеся в папках part, пронумерованы пятью цифрами в порядке воспроизведения: 00000.jpg , 00001.jpg , 00002.jpg . Эти изображения можно поменять на свои, тем самым создав оригинальную анимацию. А можно просто удалить файл bootanimation.zip . Тогда девайс будет показывать анимацию из стандартного Android. Или воспользоваться уже готовой коллекцией анимаций на 4PDA.
Четыре части в bootanimation.zip для LineageOS
Что нам понадобится
Вообще, можно позавидовать людям, обитающим в мире Linux, — как правило, в системе «из коробки» идет большое число утилит и программ, которые в Windows необходимо где‑то искать и устанавливать дополнительно, да еще и не всегда бесплатно. В нашем случае для анализа ELF-файлов в Linux присутствует вполне состоятельный арсенал встроенных средств и утилит:
- readelf — с помощью этой утилиты можно практически полностью просматривать все потаенные места ELF-файлов в удобочитаемом виде;
- hexdump — простой просмотрщик файлов в шестнадцатеричном представлении (конечно, до hiew из мира Windows ему далеко, но, во‑первых, он присутствует в системе по умолчанию, а во‑вторых, делает это совершенно бесплатно);
- strings — с помощью этой известной утилиты можно увидеть имена всех импортируемых (или экспортируемых) функций, а также библиотек, из которых эти функции импортированы, названия секций и еще много чего интересного;
- ldd — позволяет выводить имена разделяемых библиотек, из которых импортируются те или иные функции, используемые исследуемой программой;
- nm — может показывать таблицу имен из состава отладочной информации, которая добавляется в ELF-файлы при их компиляции (эта отладочная информация с помощью команды strip может быть удалена из файла, и в этом случае утилита nm ничем не поможет);
- objdump — способна вывести информацию и содержимое всех элементов исследуемого файла, в том числе и в дизассемблированном виде.
Часть перечисленного (кроме hexdump и ldd) входит в состав пакета GNU Binutils. Если этого пакета в твоей системе нет, его легко установить. К примеру, в Ubuntu это выглядит следующим образом:
В принципе, имея все перечисленное, можно уже приступать к анализу и исследованию ELF-файлов без привлечения дополнительных средств. Для большего удобства и наглядности можно добавить к нашему инструментарию известный в кругах реверс‑инженеров дизассемблер IDA в версии Freeware (этой версии для наших целей будет более чем достаточно, хотя никто не запрещает воспользоваться версиями Home или Pro, если есть возможность за них заплатить).
Анализ заголовка ELF-файла в IDA Freeware
Также неплохо было бы использовать вместо hexdump что‑то поудобнее, например 010 Editor или wxHex Editor. Первый hex-редактор — достойная альтернатива Hiew для Linux (в том числе и благодаря возможности использовать в нем большое количество шаблонов для различных типов файлов, среди них и шаблон для парсинга ELF-файлов). Однако он небесплатный (стоимость лицензии начинается с 49,95 доллара, при этом есть 30-дневный триальный период).
Анализ заголовка ELF-файла в 010 Editor
Урок 2.6. Операции с файлами и папками
Урок 2.6. Операции с файлами и папками Просмотр свойств объектов Для получения основных сведений о файле или папке достаточно щелкнуть на нем в окне папки кнопкой мыши – и основная информация появится на панели подробностей, которая расположена в нижней части окна. Для
Итоги
Эта статья лишь краткое введение в методы вскрытия и модификации Android-приложений. За кадром остались многие вопросы, такие как снятие защиты, разбор обфусцированного кода, перевод и замена ресурсов приложения, а также модификация приложений, написанных с использованием Android NDK. Однако, имея базовые знания, разобраться во всем этом — лишь вопрос времени.
Файлы и папки можно копировать и перемещать из одной папки в другую, с диска на диск. Их можно переименовывать. Можно создавать новые пустые папки. Наконец, ненужные файлы и папки можно удалять.
Копировать и перемещать объекты (файлы или папки) проще всего, перетаскивая их мышью.
Откройте Проводник и перейдите к папке, в которой находится нужный объект.
Откройте еще одно окно Проводника и перейдите в нем к папке, в которую вы хотите скопировать или переместить этот объект.
Перетащите файл или папку из одного окна в другое.
Щелкните кнопкой мыши на папке или файле, которые нужно скопировать или переместить. Объект выделен.
Нажмите сочетание клавиш Ctrl+C, чтобы скопировать его, или Ctrl+X, чтобы вырезать.
С помощью области переходов откройте в том же окне папку, куда вы хотите вставить объект.
Щелкните правой кнопкой мыши в правой части окна и нажмите сочетание клавиш Ctrl+C. Объект вставлен!
Можно скопировать или переместить несколько файлов или папок сразу. Для этого сначала выделите их в окне Проводника или на Рабочем столе.
Чтобы выделить несколько объектов с помощью мыши, нажмите левую кнопку и, удерживая ее, перемещайте мышь (1).
Появляется полупрозрачный прямоугольник выделения.
Когда в него попадут все нужные вам объекты, отпустите кнопку. Объекты выделены (2).
Теперь выделенные объекты вы можете переместить или скопировать, перетаскивая их мышью или нажимая сочетания клавиш.
Чтобы выделить несколько файлов подряд, щелкните мышью на первом из них. Затем нажмите клавишу Shift и, удерживая ее, щелкните на последнем файле. Файлы или папки выделены.
Чтобы выделить несколько файлов в произвольном порядке, щелкайте на них при нажатой клавише Ctrl.
Для создания новой папки щелкните правой кнопкой мыши на свободном месте в окне Проводника или на Рабочем столе там, где вы хотите ее создать.
Откроется контекстное меню. Выберите команду Создать|Папку.
В указанном месте создается пустая папка. По умолчанию для нее предлагается имя Новая папка.
Сразу же ведите с клавиатуры имя для созданной папки.
Щелкните кнопкой мыши в любом месте. Введенное имя присвоено новой папке.
Чтобы переименовать файл или папку, щелкните на их значке.
Нажмите клавишу F2 — имя файла или папки будет выделено.
Введите новое имя с клавиатуры.
Щелкните кнопкой мыши в любом месте. Файл или папка переименованы.
Данный текст является ознакомительным фрагментом.
Продолжение на ЛитРес
Сборка
После внесения изменений нужно собрать все обратно. Сначала запакуем раздел system в system.new.dat . Скачиваем нужные нам инструменты:
Преобразовываем нашу папку обратно в RAW-образ. Назовем его system_new.img :
1073741824 меняем на размер раздела system в байтах. Желательно даже сделать его чуть меньше. Делаем из RAW-образа sparse-образ:
Преобразуем наш образ в system.transfer.list и system.new.dat , которые и нужно кидать в архив с прошивкой, но сначала удалим старые файлы:
Отделим файлы прошивки от лишней шелухи (файлов, которые мы загружали для работы. Для этого удобно пользоваться архивом с прошивкой). Удалили? Теперь нужно запаковать прошивку в ZIP-архив (любым архиватором).
Осталось подписать архив. Сделать это можно как на самом Android с помощью ZipSigner, так и на ПК (потребуется установленная Java):
Подопытные экземпляры
В Linux (да и во многих других современных UNIX-подобных операционных системах) формат ELF используется в нескольких типах файлов.
- Исполняемый файл — содержит все необходимое для создания системой образа процесса и запуска этого процесса. В общем случае это инструкции и данные. Также в файле может присутствовать описание необходимых разделяемых объектных файлов, а также символьная и отладочная информация. Исполняемый файл может быть позиционно зависимым (в этом случае он грузится всегда по одному и тому же адресу, для 32-разрядных программ обычно это 0x8048000 , для 64-разрядных — 0x400000 ) и позиционно независимым исполняемым файлом (PIE — Position Independent Execution или PIC — Position Independent Code). В этом случае адрес загрузки файла может меняться при каждой загрузке. При построении позиционно независимого исполняемого файла используются такие же принципы, как и при построении разделяемых объектных файлов.
- Перемещаемый файл — содержит инструкции и данные, при этом они могут быть статически связаны с другими объектными файлами, в результате чего получается разделяемый объектный или исполняемый файл. К этому типу относятся объектные файлы статических библиотек (как правило, для статических библиотек имя начинается с lib и применяется расширение *. a ), однако, как мы уже говорили, расширение в Linux практически ничего не определяет. В случае статических библиотек это просто дань традиции, а работоспособность библиотеки будет обеспечена с любым именем и любым расширением.
- Разделяемый объектный файл — содержит инструкции и данные, может быть связан с другими перемещаемыми файлами или разделяемыми объектными файлами, в результате чего будет создан новый объектный файл. Такие файлы могут выполнять функции разделяемых библиотек (по аналогии с DLL-библиотеками Windows). При этом в момент запуска программы на выполнение операционная система динамически связывает эту разделяемую библиотеку с исполняемым файлом программы, и создается исполняемый образ приложения. Опять же традиционно разделяемые библиотеки имеют расширение *. so (от английского Shared Object).
- Файл дампа памяти — файл, который содержит образ памяти того или иного процесса на момент его завершения. В определенных ситуациях ядро может создавать файл с образом памяти аварийно завершившегося процесса. Этот файл также создается в формате ELF, однако мы о такого рода файлах говорить не будем, поскольку задача исследования дампов и содержимого памяти достаточно объемна и требует отдельной статьи.
Для наших изысканий нам желательно иметь все возможные варианты исполняемых файлов из перечисленных выше, чем мы сейчас и займемся.
Структура ZIP-файла с прошивкой
После загрузки распакуем архив с помощью любого архиватора. Внутри будет следующий набор файлов и папок:
- META-INF — папка с метаинформацией о прошивке (сертификат автора, манифест со списком файлов, их контрольными суммами), скриптом обновления (updater-script) и инсталлятором (update-binary), который выполняет команды скрипта по монтированию разделов, копированию файлов и другим действиям с NAND-памятью;
- boot.img — образ с ядром и RAM-диском (он прошивается в раздел boot);
- system.new.dat — это, грубо говоря, и есть сама прошивка, а точнее образ раздела system, содержащий операционную систему Android за вычетом ядра;
- system.transfer.list — содержит список команд, которые необходимо выполнить, чтобы поблочно скопировать содержимое system.new.dat в раздел system при установке прошивки;
- system.patch.dat — используется для OTA-обновлений, то есть выборочного внесения изменений в прошивку; если прошивка «полная», он имеет нулевой размер.
Рекомендуем почитать:
Добавляем шрифты
Шрифты хранятся в fonts . Найти архивы с файлами шрифтов можно на 4PDA и XDA. Для установки достаточно скопировать с заменой ttf-файлы из архива в папку fonts .
Подводные камни
Во время сборки system.new.dat ты можешь столкнуться с несколькими проблемами, вызванными постоянными изменениями в механизмах формирования прошивок Android. Описанный выше способ должен хорошо сработать в случае основанной на Android 5.1 прошивки, в более новых могут возникнуть сложности, так что потребуется использовать другие версии инструментов сборки. К сожалению, мы не можем описать все нюансы сборки, поэтому, возможно, придется погуглить.
2.2. Работаем с папками и файлами
2.2. Работаем с папками и файлами Для выполнения задания нам понадобится материал разд. 1.6.1. В папке Документы (Documents), расположенной в вашем домашнем каталоге, создать папку Книга_1, в ней — папку Книга_2.2. Создать текстовый файл, для этого выполнить следующие
7. Archives
Удаляем и добавляем приложения
Все предустановленные программы можно найти в двух папках:
Друг от друга они отличаются привилегиями доступа. Если программы из app имеют такие же полномочия, как сторонние программы (например, установленные из Play Store), то приложения из priv-app могут использовать привилегированные API (права privileged). Подробнее об этом можно узнать из нашей статьи.
Для предустановки приложения в прошивку просто кинь ее APK-файл в /system/app/ . Можно, конечно, создать отдельную папку, но в нашем случае в этом нет смысла, потому что папка служит для хранения библиотек и odex-файлов, которых у нас попросту нет. Для удаления просто удали папку с ним.
Можно пойти дальше и поменять стоковые приложения на аналоги. К примеру, для замены календаря удаляем папку Calendar и копируем в /system/app наш любимый com.rpagyc.simplecalendar.apk . А можно и не копировать. Тогда прошивка будет без календаря.
Главное, помни: стоковые программы могут быть связаны между собой. Поэтому удаление одной проги вполне может привести к полной неработоспособности другой (к примеру, CalendarProvider и Calendar: удалив первый, ты сделаешь неработоспособным не только стоковый, но и любой другой календарь). К счастью, в чистых AOSP-прошивках взаимосвязей не так много.
Рабочий стол. Операции с файлами и папками
Рабочий стол. Операции с файлами и папками Итак, вы включили ноутбук. Некоторое время будет загружаться операционная система (ОС). Это система программ и устройств, которые позволяют пользоваться компьютером. Без ОС ваш компьютер, грубо говоря, просто груда
WARNING
Чтобы подписать приложение с помощью apk-signer, ты должен установить Android SDK и указать полный путь до него в настройках приложения.
Вся информация предоставлена исключительно в ознакомительных целях. Ни редакция, ни автор не несут ответственности за любой возможный вред, причиненный материалами данной статьи.
Теперь этим ключом можно подписать APK. На вкладке APK Signer выбираем только что сгенерированный файл, вводим пароль, алиас ключа и пароль к нему, затем находим файл APK и смело жмем кнопку «Sign». Если все пройдет нормально, пакет будет подписан.
Так как мы подписали пакет нашим собственным ключом, он будет конфликтовать с оригинальным приложением, а это значит, что при попытке обновить софтину через маркет мы получим ошибку.
Цифровая подпись необходима только стороннему софту, поэтому если ты занимаешься модификацией системных приложений, которые устанавливаются копированием в каталог /system/app/, то подписывать их не нужно.
Обычно авторы приложений создают специальные классы для вывода рекламы и вызывают методы этих классов во время запуска приложения или одной из его «активностей» (упрощенно говоря, экранов приложения). Попробуем найти эти классы. Идем в каталог smali, далее com (в org лежит только открытая графическая библиотека cocos2d), далее kauf (именно туда, потому что это имя разработчика и там лежит весь его код) — и вот он, каталог marketing. Внутри находим кучу файлов с расширением smali. Это классы, и наиболее примечателен из них класс Ad.smali, по названию которого нетрудно догадаться, что именно он выводит рекламу.
Мы могли бы изменить логику его работы, но гораздо проще будет тупо убрать вызовы любых его методов из самого приложения. Поэтому выходим из каталога marketing и идем в соседний каталог particle, а затем в virtualtorch. Особого внимания здесь заслуживает файл MainActivity.smali. Это стандартный для Android класс, который создается Android SDK и устанавливается в качестве точки входа в приложение (аналог функции main в Си). Открываем файл на редактирование.
Внутри находится код smali (местный ассемблер). Он довольно запутанный и трудный для чтения в силу своей низкоуровневой природы, поэтому мы не будем его изучать, а просто найдем все упоминания класса Ad в коде и закомментируем их. Вбиваем строку «Ad» в поиске и попадаем на строку 25:
Здесь происходит создание объекта. Комментируем. Продолжаем поиск и находим в строках 433, 435, 466, 468, 738, 740, 800 и 802 обращения к методам класса Ad. Комментируем. Вроде все. Сохраняем. Теперь пакет необходимо собрать обратно и проверить его работоспособность и наличие рекламы. Для чистоты эксперимента возвращаем удаленную из AndroidManifest.xml строку, собираем пакет, подписываем и устанавливаем.
Наш подопытный кролик. Видна реклама Он же, но уже без рекламы
Оп-па! Реклама пропала только во время работы приложения, но осталась в главном меню, которое мы видим, когда запускаем софтину. Так, подождите, но ведь точка входа — это класс MainActivity, а реклама пропала во время работы приложения, но осталась в главном меню, значит, точка входа другая? Чтобы выявить истинную точку входа, вновь открываем файл AndroidManifest.xml. И да, в нем есть следующие строки:
Они говорят нам (и, что важнее, андроиду) о том, что активность с именем Start должна быть запущена в ответ на генерацию интента (события) android.intent.action.MAIN из категории android.intent.category.LAUNCHER. Это событие генерируется при тапе на иконку приложения в ланчере, поэтому оно и определяет точку входа, а именно класс Start. Скорее всего, программист сначала написал приложение без главного меню, точкой входа в которое был стандартный класс MainActivity, а затем добавил новое окно (активность), содержащее меню и описанное в классе Start, и вручную сделал его точкой входа.
Открываем файл Start.smali и вновь ищем строку «Ad», находим в строках 153 и 155 упоминание класса FirstAd. Он тоже есть в исходниках и, судя по названию, как раз и отвечает за показ объявлений на главном экране. Смотрим дальше, идет создание экземпляра класса FirstAd и интента, по контексту имеющего отношение к этому экземпляру, а дальше метка cond_10, условный переход на которую осуществляется аккурат перед созданием экземпляра класса:
Скорее всего, программа каким-то случайном образом вычисляет, нужно ли показывать рекламу на главном экране, и, если нет, перескакивает сразу на cond_10. Ок, упростим ей задачу и заменим условный переход на безусловный:
Больше упоминаний FirstAd в коде нет, поэтому закрываем файл и вновь собираем наш виртуальный факел с помощью apktool. Копируем на смартфон, устанавливаем, запускаем. Вуаля, вся реклама исчезла, с чем нас всех и поздравляем.
- Перевод приложений Android;
- пример снятия триала с приложения.
Операции с файлами и папками. Проводник
Операции с файлами и папками. Проводник Что ж, если мы уже вошли в мир файлов и папок, давайте посмотрим на содержимое нашего компьютера… На логическую структуру жесткого диска. Вся информация хранится в файлах, файлы – в папках, папки – на жестких дисках. Все вроде
Читайте также: