Как слушать dev / binder? - PullRequest
       34

Как слушать dev / binder?

9 голосов
/ 17 февраля 2012

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

Ответы [ 5 ]

4 голосов
/ 17 февраля 2012

Short: Нет, это не должно быть возможно, даже с root.

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

3 голосов
/ 02 августа 2017

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

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

Bindump использует debugfs, но это показывает только конечные точки. @ Адриан - Боюсь, ты сделал неверный вывод.

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

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

3 голосов
/ 06 февраля 2013

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

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

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

2 голосов
/ 06 июня 2017

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

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

  • bindump

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

  • jtrace , расширенная версия strace, одно из преимуществ которой перед strace

    синтаксический анализ сообщения подшивки (автоопределение).

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

  • Binder Explorer

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

2 голосов
/ 20 августа 2014

Если вы готовы установить собственное ядро, код драйвера связывателя (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(). Возможно, вы захотите сделать их условными, основываясь на определенном идентификаторе или идентификаторе, поскольку в противном случае будет много ПО, летящего по журналу.

...