Trong Android là dev/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
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.
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.
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
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
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ý.
@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ớistrace
là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.
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
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
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.
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
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
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