Любой читатель нашего журнала как минимум что-то слышал о возможности перехвата вызовов в различных операционных системах. А скорее всего, активно этим пользовался — по крайней мере в винде. Если вкратце, ты можешь перехватить вызов какой-то функции и как-нибудь этим распорядиться: использовать параметры по своему усмотрению, выполнить свой код вместо того, который должен был выполниться. Сегодня мы будем делать это в ОС Android!

 

Немного теории


Достаточно каноничным примером использования хуков являются так называемые соксификаторы — фактически они перехватывают функцию подключения к серверу, подсоединяются в этот момент к SOCKS-прокси и вместо оригинального дескриптора сокета возвращают тот дескриптор, который подключен к SOCKS-серверу.

Несколько лет назад появилась прекрасная вещь — Xposed Framework для Android. Что это такое? Это фреймворк, позволяющий перехватывать вызовы Java-методов в Android-приложениях. Он дает большой простор для модификации поведения приложений, установленных на устройство, — от простого калькулятора до SystemUI, отвечающего (да-да, Кэп) за работу системного интерфейса.
Для начала давай посмотрим, как оно работает.

 

Внутреннее устройство Xposed Framework

В Android есть процесс под названием Zygote, он отвечает за формирование среды исполнения для каждого Android-приложения (путем форка самого себя). За его запуск отвечает бинарник app_process, который стартует в момент инициализации Android.

Xposed при установке заменяет app_process своим модифицированным, а также добавляет файл XposedBridge.jar. Модифицированный app_process загружает XposedBridge, который и перехватывает вызовы заданных методов, заменяя их своими.

Как он понимает, что чем заменять? Xposed — вещь модульная. Сам по себе он почти ничего не заменяет. При инициализации он загружает установленные модули и уже из них берет информацию о том, что перехватывать и куда передавать управление. Сами по себе модули — это, по большому счету, обычные APK, только немного дополненные специфичной для Xposed информацией.

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

Ладно, хватит теории, переходим к практике! Установи Xposed на свой девайс (думаю, с этим ты разберешься сам), и поехали.

 

Hello, world!

Давай начнем с того, что напишем своеобразный «Hello, world» с использованием Xposed Framework.

По сути, модуль Xposed — это обычный Android-проект с дополнительными файлами. Создадим новый проект в Android Studio. Графического интерфейса у нас не будет, поэтому Activity создавать не надо. Первым делом добавим в манифест (внутрь тега <application>) параметры, которые нужны для отображения информации о нашем модуле, а также минимально требуемую версию фреймворка.

Продолжение доступно только подписчикам

Вариант 1. Оформи подписку на «Хакер», чтобы читать все материалы на сайте

Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке

Вариант 2. Купи один материал

Заинтересовала информация, но нет возможности оплатить подписку? Тогда этот вариант для тебя! Обрати внимание: этот способ покупки доступен только для материалов, опубликованных более двух месяцев назад.


Иван Смирнов

ведущий разработчик Labster.PRO

Оставить мнение

Check Also

Из Google Play удалили шесть поддельных финансовых приложений

Специалист компании ESET обнаружил в каталоге приложений Google Play шесть фальшивых прило…