2012-02-17 4 views
8

Android есть dev/binder также для слоев сообщение ответственный. Можно ли слушать сообщения? Я знаю, что они должны быть декодированы, но, как я могу получить это сообщение. Например, если приложение отправит сообщение, оно станет Geolocation. У меня также есть root на моем устройстве Android.Как слушать dev/binder?

ответ

5

Короткие: Нет, это не должно быть возможно даже с помощью корня.

Существует не так много информации о Binder подробно в сети, но есть некоторые, особенно о безопасности. См. this или to point 3.8 here. Вы также можете прочитать источник драйвера ядра и источник openbinder.

+1

Спасибо. Это было довольно интересно. Но можете ли вы сказать мне, в чем причина этого. Я хочу просто послушать, что приложение отправляет связующему (в байт-коде). Может быть, с strace или что-то в этом роде. – Aprel

+1

В основном это работает как любой другой linux api, который «персонализирован». Вы просто увидите, что вам разрешено видеть, на основе userid/groupid. У него просто хороший контроль доступа, чтобы все было нормально =) – Luminger

+0

ОК я понял. И еще один вопрос: посмотреть, как приложения и linux-ядро взаимодействуют друг с другом (также, если я вижу только небольшую часть этого сообщения). Какой инструмент я могу использовать для этого? – Aprel

3

Вы можете декодировать большинство сделок Binder, которые идут мимо, используя эту версию Трассирования: https://github.com/adetaylor/strace-android/tree/android

имеют усовершенствование для декодирования ioctl вызовов, которые как процессы делают запросы в драйвер ядра Binder. Убедитесь, что вы используете ветку android, иначе вы не сможете воспользоваться этими изменениями.

Вы должны иметь возможность построить это, используя автономную инструментальную цепочку NDK. См. docs/STANDALONE-TOOLCHAIN.html в документации по Android NDK.

+0

Отлично, но, к сожалению, я не смог скомпилировать его с помощью NDK, после исправления кучи ошибок компилятора (несоответствий заголовков и т. Д.), Я остался с ошибкой компоновщика, после чего у меня возникла проблема. Есть ли у вас готовый статический бинарный файл? – domen

+0

Выполнение этого с помощью codeourcery toolchain было намного проще, без исправлений заголовков и т. Д. Я в основном следил за инструкциями от: http: // muzso.hu/2012/04/21/how-to-compile-strace-for-use-on-an-android-phone-running-a-arm-cpu Обратите внимание, что make-dist - это место для установки переменных, добавьте '- -host', и если что-то пошло не так, прокомментируйте 'trap', чтобы легко отладить его. – domen

2

Если вы для установки нового ядра, код драйвера связующего (drivers/staging/android/binder.c) имеет очень хорошие возможности отладки, в то числе условных сообщений и функций, которые могут печатать связующий сделок и т.д.

В частности, вы будете получить различные виды отладочных сообщений в журнале ядра, установив binder_debug_mask используя соответствующую комбинацию из следующих переписчиков:

BINDER_DEBUG_USER_ERROR 
BINDER_DEBUG_FAILED_TRANSACTION 
BINDER_DEBUG_DEAD_TRANSACTION 
BINDER_DEBUG_OPEN_CLOSE 
BINDER_DEBUG_DEAD_BINDER 
BINDER_DEBUG_DEATH_NOTIFICATION 
BINDER_DEBUG_READ_WRITE 
BINDER_DEBUG_USER_REFS 
BINDER_DEBUG_THREADS 
BINDER_DEBUG_TRANSACTION 
BINDER_DEBUG_TRANSACTION_COMPLETE 
BINDER_DEBUG_FREE_BUFFER 
BINDER_DEBUG_INTERNAL_REFS 
BINDER_DEBUG_BUFFER_ALLOC 
BINDER_DEBUG_PRIORITY_CAP 
BINDER_DEBUG_BUFFER_ALLOC_ASYNC 

Можно также посыпать несколько print_binder_* функций, которые включены в binder.c в Стра теги по всему коду. Например, print_binder_buffer() или print_binder_transaction(). Вероятно, вы захотите сделать это условным, основанным на определенном uid или pid, поскольку в противном случае будет много вещей, летающих в журнале.

1

@Adrian, некоторая хорошая работа w.r.t проблема была сделана другими разработчиками/исследователями, чтобы вы могли использовать их результаты.

Прежде всего, я бы рекомендовал смотреть на большой работы Джонатан Левин (ака Technologeeks), а именно его книги на Android внутренностей, которые недавно стали свободными и могут быть доступны на веб-сайте компаньона книги : newandroidbook.com. Оттуда вы получите ссылки, описание и примеры использования в

  • bindump

    , что является простой производной от команды service, которая получает дескриптор системы обслуживания выбора, а затем проверяет ИТС собственную запись в каталоге /sys/kernel/debug/binder/proc. Поскольку все данные отладки связующего являются читаемыми по всему миру, вы также можете запустить этот инструмент на невращающихся устройствах.

  • jtrace, увеличенная версия strace, чьи одним из преимуществ по сравнению с strace является

    связующего сообщением разбор (Автоматического определения).

Еще одна интересная работа, сделанная по OpersysKarim Ягмур), что, безусловно, стоит отметить, и, глядя на это

  • Binder Explorer

    Этот инструмент работает как приложение или вместе с HTML GUI, чтобы показать графическое представление соединений в режиме реального времени.

+0

Я посмотрел на jtrace, и, похоже, это именно то, что я хочу. Но как этот парень заглядывал в сообщения связующего, не меняя сам код связующего? – Adrian

+0

Я читал бесплатный PDF-файл парня, и ответ заключается в том, что он позволяет debugfs, который является тем же самым результатом, что и перекомпиляция libbinder: для обеспечения безопасности выводится «безопасный» поток связующего. Спасибо за ответ. Это просто усилило то, что слежение за связующим невозможно без модификации андроида. – Adrian

2

Почему снова и снова, не неправильные ответы получить одобрение, как правильно?

Jtrace - не следует путать с дампом корзины - не требуется никаких изменений в Android, что-то никогда. И он может отслеживать сообщения связующего - с ограничением на то, что вы должны быть одним из конечных пунктов.

Bindump использует debugfs, но это показывает только конечные точки. @Adrian - Боюсь, вы ошиблись.

Jtrace ловушки sys звонки входы и выходы - и затем разрешает связующие сообщения, проверяя память процесса (используя ptrace (2)). Если у вас есть ptrace (2) в вашем ядре (что вы делаете, потому что debugserver глупо нуждается в нем), а вы root, вы можете отслеживать сообщения. Опять же - вы должны быть на конечной точке.

И @Luminger - в то время как на предмете - только потому, что не может найти информацию, не означает, что информации нет. Существует много информации о Binder на NewAndroidBook.com - помимо книги, посмотрите ссылку на презентацию Binder.

Смежные вопросы