
Binder Trace is a tool for intercepting and parsing Android Binder messages. Think of it as "Wireshark for Binder".
Binder Trace هي أداة لاعتراض وتحليل رسائل Binder في أندرويد. يمكنك اعتبارها "Wireshark لـ Binder".

إصدار python >= 3.9
ستحتاج إلى جهاز أندرويد متجذّر (rooted) أو محاكٍ.
(لينكس فقط) - ثبّت xclip أو xsel لدعم وظيفة "نسخ إلى الحافظة"
sudo apt-get install xclip
sudo apt-get install xsel
التثبيت من PyPi
pip install binder-trace
تحقق من إصدار frida المثبّت (تأكد من أنك ثبّت المتطلبات باستخدام pip)
pip list | grep frida
نزّل الإصدار المطابق من frida-server من صفحة إصدارات frida
تأكد من تشغيل adb كصلاحيات جذر (root)، وادفع frida-server إلى جهازك ثم شغّله
adb root
adb push frida-server /data/local/tmp
adb shell
chmod u+x /data/local/tmp/frida-server
/data/local/tmp/frida-server
لبدء binder trace نحتاج إلى اختيار جهاز وعملية للاتصال بها. في المثال التالي نستخدم adb و frida-ps لتحديد عملية للاتصال بها على محاكٍ محلي. وبما أنه محاكٍ بنظام Android 11، نختار مجلد بنى Android 11. اختر مجلد البنى الأقرب إلى إصدار أندرويد لديك. إذا كنت ترغب في بنى لإصدار مختلف من أندرويد، فأخبرنا من فضلك. بمجرد تشغيله، ابدأ باستخدام التطبيق الهدف لتوليد بعض معاملات Binder.
> adb devices
List of devices attached
emulator-5554 device
> frida-ps -Ua
PID Name Identifier
---- ------------- ----------------------------
8334 Messaging com.android.messaging
7941 Phone com.android.dialer
9607 Settings com.android.settings
> cd binder_trace
> binder-trace -d emulator-5554 -n Messaging -a 11
لتحديد التصفية، عرّف أيًا من خيارات interface و method و type و inclusive أو جميعها. لعدم استخدام خيار، اتركه فارغًا ""
> binder-trace -d emulator-5554 -n Contacts -a 13

{
"filters": [
{
"interface": "android.gui.IDisplayEventConnection",
"method": "requestNextVsync",
"type": "",
"inclusive": false
},
{
"interface": "android.content.IContentProvider",
"method": "",
"type": "call",
"inclusive": false
}
]
}
> binder-trace -d emulator-5554 -n Contacts -a 13 -c .\binder_trace\binder_trace\config.json
تمت تصفية android.gui.IDisplayEventConnection->requestNextVsync->"" و android.content.IContentProvider->"" ->call

يمكن أن تتغير واجهات Binder الداخلية بين الإصدارات الثانوية، وبما أنها تُترجَم معًا فعليًا دون أي معلومات عن الإصدار في وقت التشغيل، فمن الصعب توفير معلومات بنى دقيقة 100% لكل إصدار عبر النظام البيئي المجزأ لأندرويد.
يمكن العثور على مزيد من التفاصيل حول البنى في صفحة البنى.
| الوسيط | الوصف |
|---|
| -h | يعرض تعليمات الوسائط. |
| -d DEVICE | الجهاز الذي سيتم الاتصال به، مثل "emulator-5554". استخدم adb devices لعرض الأجهزة المتاحة. إذا لم يتم تحديده، فسيتم استخدام جهاز USB افتراضيًا. |
| -p PID | معرّف العملية (pid) للعملية على DEVICE التي سيتم الاتصال بها. |
| -n NAME | اسم العملية على DEVICE التي سيتم الاتصال بها، مثل "Messaging". |
| -a [9, 10, 11, 12, 13, 14] | إصدار أندرويد للجهاز الهدف. إذا لم يتم توفير مسار بنية، تُستخدم البنى الافتراضية. |
| -s STRUCTPATH | المسار إلى مجلد ملفات البنى. |
| -c CONFIG | المسار إلى ملف الإعدادات المستخدم للتصفية. |
| --spawn | تشغيل العملية قبل الاتصال. يجب أن يكون الخيار -n موجودًا وأن يحتوي على معرّف عملية صالح. |
| المفتاح | الإجراء |
|---|
up | تحريك لأعلى |
down | تحريك لأسفل |
shift + up | صفحة لأعلى |
shift + down | صفحة لأسفل |
home | الانتقال إلى الأعلى |
end | الانتقال إلى الأسفل |
tab | اللوحة التالية |
shift + tab | اللوحة السابقة |
ctrl + c | نسخ اللوحة إلى الحافظة |
space | إيقاف/استئناف تسجيل المعاملات |
c | مسح |
h | فتح المساعدة |
r | إعادة تحميل ملف الإعدادات |
q | خروج |
| المفتاح | الإجراء |
|---|
p | تبديل الترتيب تصاعديًا/تنازليًا |
w | الانتقال إلى الواجهة التالية |
s | الانتقال إلى الواجهة السابقة |
a | تبديل تشغيل جميع عوامل التصفية |
n | تبديل إيقاف جميع عوامل التصفية |
enter | تبديل عامل التصفية |