Android: исследование IPC Android и хукинг нативных библиотек - «Новости» » Самоучитель CSS
Меню
Наши новости
Учебник CSS

Невозможно отучить людей изучать самые ненужные предметы.

Введение в CSS
Преимущества стилей
Добавления стилей
Типы носителей
Базовый синтаксис
Значения стилевых свойств
Селекторы тегов
Классы
CSS3

Надо знать обо всем понемножку, но все о немногом.

Идентификаторы
Контекстные селекторы
Соседние селекторы
Дочерние селекторы
Селекторы атрибутов
Универсальный селектор
Псевдоклассы
Псевдоэлементы

Кто умеет, тот делает. Кто не умеет, тот учит. Кто не умеет учить - становится деканом. (Т. Мартин)

Группирование
Наследование
Каскадирование
Валидация
Идентификаторы и классы
Написание эффективного кода

Самоучитель CSS

Вёрстка
Изображения
Текст
Цвет
Линии и рамки
Углы
Списки
Ссылки
Дизайны сайтов
Формы
Таблицы
CSS3
HTML5

Новости

Блог для вебмастеров
Новости мира Интернет
Сайтостроение
Ремонт и советы
Все новости

Справочник CSS

Справочник от А до Я
HTML, CSS, JavaScript

Афоризмы

Афоризмы о учёбе
Статьи об афоризмах
Все Афоризмы

Видео Уроки


Видео уроки
Наш опрос



Наши новости

       
27-05-2020, 12:36
Android: исследование IPC Android и хукинг нативных библиотек - «Новости»
Рейтинг:
Категория: Новости

Сегодня в выпуске: исследование IPC-механизмов Android, хукинг нативных библиотек с помощью Frida, правильный способ завершения короутин в Kotlin, введение в Kotlin Flow и StateFlow, перегрузка операторов в Kotlin, оператор Elvis и основы функционального программирования. А также подборка инструментов пентестера и библиотек для разработчиков.

Почитать


Как устроена система сообщений в Android



Android IPC: Part 2 — Binder and Service Manager Perspective — статья о Binder, одной из ключевых технологий Android.



Вопреки расхожему мнению, Android с самых первых версий использовал песочницы для изоляции приложений. И реализованы они были весьма интересным способом. Каждое приложение запускалось от имени отдельного пользователя Linux и, таким образом, имело доступ только к своему каталогу внутри /data/data.



Друг с другом и с операционной системой приложения могли общаться только через IPC-механизм Binder, который требовал авторизации для выполнения того или иного действия. В Android Binder использовался и продолжает использоваться буквально для всего: от запуска приложений до вызова функций операционной системы.



Операционная система спроектирована так, что пользователи Рё даже программисты РЅРµ догадываются Рѕ существовании какого-то IPC-механизма. Если программист хочет скопировать текст РІ буфер обмена, РѕРЅ просто получает ссылку РЅР° объект-сервис Рё вызывает РѕРґРёРЅ РёР· его методов. РџРѕРґ капотом фреймворк преобразует этот вызов РІ сообщение Binder Рё отправляет его РІ СЏРґСЂРѕ через файл-устройство /dev/binder. Это сообщение перехватывает Service manager, который находит в своем каталоге сервис буфера обмена, проверяет полномочия приложения на отправку ему сообщений и, если оно имеет все необходимые права, передает сообщение сервису. После получения и обработки сообщения сервис буфера обмена отправляет ответ, используя тот же Binder.



Кроме полномочий, Service manager также проверяет, имеет ли приложение право на создание сервиса и может ли оно использовать ряд опасных сервисов. И первое, и второе — проверяя значение UID (идентификатор пользователя) вызывающего процесса. Если UID больше 10 000 — приложение не имеет права регистрировать новый сервис (все сторонние приложения в Android получают UID больше 10 000), а если UID находится в районе 99 000–99 999, приложение получает ограничение на использование «опасных» сервисов. Именно в эту группу попадают вкладки браузера Chrome.


Хукинг нативных библиотек с помощью Frida



How to hook Android Native methods with Frida (Noob Friendly) — статья о перехвате функций нативных библиотек с помощью Frida.



Для начала файл APK следует развернуть. Это обычный архив ZIP, поэтому можно использовать любой архиватор. Каталог lib содержит набор нативных библиотек для различных архитектур. Находим библиотеку для архитектуры своего смартфона (обычно это arm64-v8a или armeabi-v7a) Рё анализируем ее содержимое СЃ помощью утилиты nm (она доступна в Linux и macOS):



$ nm --demangle --dynamic libnative-lib.so 
00002000 A __bss_start
U __cxa_atexit
U __cxa_finalize
00002000 A _edata
00002000 A _end
00000630 T Java_com_erev0s_jniapp_MainActivity_Jniint
000005d0 T Jniint
U rand
U srand
U __stack_chk_fail
U time
[/code]

Как видно, библиотека содержит в том числе функцию Java_com_erev0s_jniapp_MainActivity_Jniint. РЎСѓРґСЏ РїРѕ имени, РѕРЅР° должна быть доступна для вызова РёР· Java (РЅР° стороне Java РѕРЅР° будет иметь РёРјСЏ com.erev0s.jniapp.MainActivty.Jniint).



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



Есть два способа перехватить эту функцию:



На стороне Java, когда приложение только попытается вызвать нативную функцию.
На стороне нативного кода, когда управление уже будет передано библиотеке.

Предположим, мы уже установили Frida на ПК и frida-server на смартфон (как это сделать, можно прочитать здесь). Теперь напишем такой скрипт:



Java.perform(function () {
var Activity = Java.use('com.erev0s.jniapp.MainActivity')
Activity.Jniint.implementation = function () {
return 80085
}
})


Этот скрипт переписывает функцию Jniint класса com.erev0s.jniapp.MainActivity так, чтобы она всегда возвращала значение 80 085.



Сохраняем скрипт в файл myhook.js и запускаем приложение под управлением Frida:



$ frida -U -l myhook.js com.erev0s.jniapp
[/code]

Перехватить нативную функцию еще проще:



Interceptor.attach(Module.getExportByName('libnative-lib.so', 'Java_com_erev0s_jniapp_MainActivity_Jniint'), {
onEnter: function(args) {},
onLeave: function(retval) {
retval.replace(0)
}
})


Результат работы скрипта

Сегодня в выпуске: исследование IPC-механизмов Android, хукинг нативных библиотек с помощью Frida, правильный способ завершения короутин в Kotlin, введение в Kotlin Flow и StateFlow, перегрузка операторов в Kotlin, оператор Elvis и основы функционального программирования. А также подборка инструментов пентестера и библиотек для разработчиков. Почитать Как устроена система сообщений в Android Android IPC: Part 2 — Binder and Service Manager Perspective — статья о Binder, одной из ключевых технологий Android. Вопреки расхожему мнению, Android с самых первых версий использовал песочницы для изоляции приложений. И реализованы они были весьма интересным способом. Каждое приложение запускалось от имени отдельного пользователя Linux и, таким образом, имело доступ только к своему каталогу внутри /data/data. Друг СЃ РґСЂСѓРіРѕРј Рё СЃ операционной системой приложения могли общаться только через IPC-механизм Binder, который требовал авторизации для выполнения того или РёРЅРѕРіРѕ действия. Р’ Android Binder использовался Рё продолжает использоваться буквально для всего: РѕС‚ запуска приложений РґРѕ вызова функций операционной системы. Операционная система спроектирована так, что пользователи Рё даже программисты РЅРµ догадываются Рѕ существовании какого-то IPC-механизма. Если программист хочет скопировать текст РІ буфер обмена, РѕРЅ просто получает ссылку РЅР° объект-сервис Рё вызывает РѕРґРёРЅ РёР· его методов. РџРѕРґ капотом фреймворк преобразует этот вызов РІ сообщение Binder Рё отправляет его РІ СЏРґСЂРѕ через файл-устройство /dev/binder. Это сообщение перехватывает Service manager, который находит в своем каталоге сервис буфера обмена, проверяет полномочия приложения на отправку ему сообщений и, если оно имеет все необходимые права, передает сообщение сервису. После получения и обработки сообщения сервис буфера обмена отправляет ответ, используя тот же Binder. Кроме полномочий, Service manager также проверяет, имеет ли приложение право на создание сервиса и может ли оно использовать ряд опасных сервисов. И первое, и второе — проверяя значение UID (идентификатор пользователя) вызывающего процесса. Если UID больше 10 000 — приложение не имеет права регистрировать новый сервис (все сторонние приложения в Android получают UID больше 10 000), а если UID находится в районе 99 000–99 999, приложение получает ограничение на использование «опасных» сервисов. Именно в эту группу попадают вкладки браузера Chrome. Хукинг нативных библиотек с помощью Frida How to hook Android Native methods with Frida (Noob Friendly) — статья о перехвате функций нативных библиотек с помощью Frida. Для начала файл APK следует развернуть. Это обычный архив ZIP, поэтому можно использовать любой архиватор. Каталог lib содержит набор нативных библиотек для различных архитектур. Находим библиотеку для архитектуры своего смартфона (обычно это arm64-v8a или armeabi-v7a) Рё анализируем ее содержимое СЃ помощью утилиты nm (она доступна в Linux и macOS): $ nm --demangle --dynamic libnative-lib.so 00002000 A __bss_start U __cxa_atexit U __cxa_finalize 00002000 A _edata 00002000 A _end 00000630 T Java_com_erev0s_jniapp_MainActivity_Jniint 000005d0 T Jniint U rand U srand U __stack_chk_fail U time _

Теги: CSS

Просмотров: 421
Комментариев: 0:   27-05-2020, 12:36
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь. Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

 
Еще новости по теме:



Другие новости по теме:
Комментарии для сайта Cackle