2012-02-17 10 views
8

Trong Androiddev/binder cũng dành cho các lớp giao tiếp chịu trách nhiệm. Có thể nghe tin nhắn không? Tôi biết rằng họ phải được giải mã hơn, nhưng làm thế nào tôi có thể nhận được tin nhắn này. Ví dụ: nếu ứng dụng gửi tin nhắn để trở thành Vị trí địa lý. Tôi cũng đã root trên thiết bị Android của mình.Làm thế nào để nghe dev/binder?

Trả lời

5

Ngắn: Không, không thể thực hiện được, ngay cả với thư mục gốc.

Không có nhiều thông tin về Binder chi tiết trên mạng nhưng có một số, đặc biệt là về bảo mật. Tham khảo this hoặc to point 3.8 here. Bạn cũng có thể đọc nguồn của trình điều khiển nhân và nguồn của openbinder.

+1

Cảm ơn. Điều này khá thú vị. Nhưng bạn có thể cho tôi biết lý do của nó là gì không. Tôi chỉ muốn lắng nghe những gì một ứng dụng gửi đến chất kết dính (trong bytecode) .Mayby với strace hoặc một cái gì đó như thế. – Aprel

+1

Về cơ bản, nó hoạt động giống như mọi api linux khác được "cá nhân hóa". Bạn sẽ chỉ thấy những gì bạn được phép xem, dựa trên userid/groupid ở đây. Nó chỉ có kiểm soát truy cập tốt để đảm bảo tất cả mọi thứ là tốt =) – Luminger

+0

ok tôi hiểu. Và một chút câu hỏi khác: để tìm cách ứng dụng và hạt nhân Linux giao tiếp với nhau (còn nếu tôi chỉ thấy một phần nhỏ của giao tiếp này). Tôi có thể sử dụng công cụ nào để làm điều đó? – Aprel

3

Bạn có thể giải mã hầu hết các giao dịch Binder rằng đi qua sử dụng phiên bản này của strace: https://github.com/adetaylor/strace-android/tree/android

Nó có cải tiến để giải mã các cuộc gọi ioctl đó là cách các quy trình thực hiện yêu cầu người lái xe kernel Binder. Đảm bảo bạn sử dụng chi nhánh android hoặc bạn sẽ không nhận được lợi ích của những thay đổi đó.

Bạn sẽ có thể tạo điều này bằng cách sử dụng chuỗi công cụ độc lập NDK. Xem docs/STANDALONE-TOOLCHAIN.html trong tài liệu NDK của Android.

+0

Tuyệt vời, nhưng tiếc là tôi đã không thể biên dịch nó với NDK, sau khi sửa chữa một loạt lỗi trình biên dịch (không phù hợp tiêu đề, v.v.), tôi bị bỏ sót với lỗi liên kết, tại thời điểm này tôi có. Bạn có một nhị phân tĩnh dựng sẵn ở đâu đó? – domen

+0

Làm điều đó với toolchain codesourcery được dễ dàng hơn nhiều, không có sửa chữa tiêu đề vv Tôi chủ yếu theo hướng dẫn từ: http: // muzso.hu/2012/04/21/cách-để-biên dịch-strace-cho-sử dụng-on-an-android-điện thoại-chạy-một-cánh tay-cpu Lưu ý rằng make-dist là nơi để thiết lập các biến, thêm '- -host', và nếu có bất cứ điều gì sai bình luận ra khỏi 'bẫy' để gỡ lỗi nó một cách dễ dàng. – domen

2

Nếu bạn đang lên cho lắp đặt một hạt nhân riêng, mã tài xế binder (drivers/staging/android/binder.c) có nhiều tính năng gỡ lỗi khá tốt, bao gồm thư có điều kiện và chức năng mà có thể in binder giao dịch vv

Cụ thể, bạn sẽ có được các loại thông điệp debug trong nhật ký hạt nhân bằng cách thiết lập binder_debug_mask sử dụng sự kết hợp thích hợp của điều tra viên sau đây:

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 

Bạn cũng có thể rắc một vài trong số các print_binder_* chức năng được bao gồm trong binder.c tại Stra vị trí tegic trong suốt mã. Ví dụ: print_binder_buffer() hoặc print_binder_transaction(). Bạn có thể muốn thực hiện những điều kiện dựa trên một uid hoặc pid cụ thể, vì nếu không sẽ có rất nhiều thứ bay theo nhật ký.

1

@Adrian, một số công việc tuyệt vời. Vấn đề đã được thực hiện bởi các nhà phát triển/nhà nghiên cứu khác, vì vậy bạn có thể tận dụng kết quả của họ.

Trước hết, tôi khuyên bạn nên nhìn vào công việc tuyệt vời của Jonathan Levin (aka Technologeeks), cụ thể là cuốn sách của ông về internals Android mà gần đây đã trở thành miễn phí và có thể được truy cập tại trang web đồng hành của cuốn sách : newandroidbook.com. Từ đó bạn sẽ nhận được các liên kết, mô tả và ví dụ sử dụng để

  • bindump

    đó là một dẫn xuất đơn giản của lệnh service, mà có được một xử lý để phục vụ hệ thống của sự lựa chọn, và sau đó kiểm tra của nó mục nhập riêng trong thư mục /sys/kernel/debug/binder/proc. Bởi vì tất cả dữ liệu gỡ lỗi của trình kết nối có thể đọc được trên thế giới, bạn có thể chạy công cụ này trên các thiết bị chưa được phát hành.

  • jtrace, một phiên bản tăng cường của strace, mà một trong những ưu điểm so với strace

    nhắn binder phân tích (tự động phát hiện).

Một công việc tuyệt vời, được thực hiện bởi Opersys (với Karim Yaghmour), mà chắc chắn là đáng chú ý và nhìn vào là

  • Binder Explorer

    Công cụ này hoạt động như một ứng dụng hoặc cùng với HTML GUI, để hiển thị chế độ xem đồ họa của các kết nối theo thời gian thực.

+0

Tôi nhìn vào jtrace và nó xuất hiện để được chính xác những gì tôi muốn. Nhưng làm thế nào anh chàng này snoop trên tin nhắn binder mà không thay đổi mã binder chính nó? – Adrian

+0

Tôi đọc tập tin PDF miễn phí của chàng và câu trả lời là anh ta cho phép debugfs có kết quả tương tự như biên dịch lại: lưu lượng kết nối "an toàn" là đầu ra cho mọi người xem. Cảm ơn câu trả lời. Nó chỉ phục vụ để củng cố rằng snooping trên chất kết dính là không thể mà không cần sửa đổi của android. – Adrian

2

Tại sao, thời gian và lần nữa, làm câu trả lời sai được chấp thuận đúng?

Jtrace - không bị nhầm lẫn với thùng rác - không yêu cầu phải sửa đổi Android gì hơn bao giờ hết. Và nó có thể snoop thông điệp binder - với sự hạn chế mà bạn phải jtrace'ing một trong những điểm kết thúc.

Bindump sử dụng debugfs, nhưng chỉ hiển thị điểm cuối. @ Adrian - Tôi e rằng bạn đã có kết luận sai.

Jtrace bẫy sys cuộc gọi đi vào và ra - và sau đó giải quyết các thông điệp binder bằng cách kiểm tra bộ nhớ quá trình (bằng cách sử dụng ptrace (2)). Nếu bạn có ptrace (2) trong hạt nhân của bạn (mà bạn làm, bởi vì debugserver ngu ngốc cần nó) và bạn là root, bạn có thể snoop tin nhắn. Một lần nữa - bạn phải ở điểm cuối.

Và @Luminger - trong khi về chủ đề này - chỉ vì người ta không thể tìm thấy thông tin, không có nghĩa là không có thông tin. Có rất nhiều thông tin về Binder trên NewAndroidBook.com - bên cạnh cuốn sách, hãy xem liên kết trình bày Binder.