
r2frida v6.2.0
Radare2 وFrida أفضل معًا.
r2frida
الوصف
إضافة قائمة بذاتها لـ radare2 تحتوي على frida وتسمح بتجسير العمليات المحلية أو البعيدة باستخدام أوامر r2 بدلاً من (وليس حصرًا) نصوص Frida.
يوفر مشروع radare سلسلة أدوات كاملة لهندسة عكسية، وهو يُصان بنشاط ويوفر وظائف جيدة الصيانة ويمد ميزاته بلغات برمجة وأدوات أخرى.
Frida هي مجموعة أدوات تجسير ديناميكي تسهل فحص ومعالجة العمليات الجارية عن طريق حقن JavaScript الخاص بك، ويمكنك اختياريًا التواصل مع نصوصك.
الميزات
- تشغيل نصوص Frida دون تعديل (استخدم الأمر
:.) - تنفيذ مقاطع برمجية بلغة C أو JavaScript أو TypeScript في أي عملية
- يمكن الإرفاق أو الإنشاء (spawn) أو التشغيل في أنظمة محلية أو بعيدة
- سرد المقاطع، الرموز، التصديرات، البروتوكولات، الفئات، الطرق
- البحث عن قيم في الذاكرة داخل الوكيل أو من المضيف
- استبدال تطبيقات الطرق أو إنشاء خطافات بأوامر قصيرة
- تحميل المكتبات والأطر في العملية المستهدفة
- دعم واجهات Dalvik وJava وObjC وSwift وC
- التعامل مع واصفات الملفات والمتغيرات البيئية
- إرسال إشارات إلى العملية، الاستمرار، نقاط التوقف
- إضافة io في r2frida تعمل أيضًا كواجهة لنظام الملفات fs وخلفية debug
- أتمتة r2 وfrida باستخدام r2pipe
- قراءة/كتابة ذاكرة العملية
- استدعاء دوال واستدعاءات نظام ومقاطع برمجية خام
- الاتصال بـ frida-server عبر USB أو TCP/IP
- تعداد التطبيقات والعمليات
- تتبع السجلات والوسائط للدوال
- تم اختباره على x64 وarm32 وarm64 لأنظمة Linux وWindows وmacOS وiOS وAndroid
- لا يحتاج إلى تثبيت frida على المضيف (لا حاجة لأدوات frida-tools)
- توسعة أوامر r2frida باستخدام إضافات تعمل في الوكيل
- تغيير أذونات الصفحات، تصحيح الكود والبيانات
- حل الرموز بالاسم أو العنوان واستيرادها كعلامات (flags) في r2
- تشغيل أوامر r2 على المضيف من الوكيل
- استخدام واجهات برمجة r2 وتشغيل أوامر r2 داخل العملية البعيدة المستهدفة
- نقاط توقف أصلية باستخدام واجهة
:db - الوصول إلى أنظمة الملفات البعيدة باستخدام واجهة
r_fs
التثبيت
الطريقة الموصى بها لتثبيت r2frida هي عبر r2pm:
$ r2pm -ci r2frida
سيتم قريبًا دعم إصدارات ثنائية لا تحتاج إلى تجميع في r2pm و r2env. في هذه الأثناء، لا تتردد في تنزيل أحدث الإصدارات من صفحة الإصدارات.
التجميع
المتطلبات
- radare2
- pkg-config (غير مطلوب على Windows)
- curl أو wget
- make, gcc
- npm, nodejs (سيتم إزالته قريبًا)
في GNU/Debian ستحتاج إلى تثبيت الحزم التالية:
$ sudo apt install -y make gcc libzip-dev nodejs npm curl pkg-config git
التعليمات
$ git clone https://github.com/nowsecure/r2frida.git
$ cd r2frida
$ make
$ make user-install
Windows
- ثبّت meson و Visual Studio
- فك ضغط أحدث إصدار من radare2 (zip) في جذر دليل r2frida
- أعد تسميته إلى
radare2(بدلاً من radare2-x.y.z) - لجعل مترجم VS متاحًا في PATH (
preconfigure.bat) - شغّل
configure.batثمmake.bat
الاستخدام
للاختبار، استخدم r2 frida://0، لأن الإرفاق بالعملية pid0 في frida هو جلسة خاصة تعمل محليًا. يمكنك الآن تشغيل الأمر :? للحصول على قائمة الأوامر المتاحة.
$ r2 'frida://?'
r2 frida://[action]/[link]/[device]/[target]
* action = list | apps | attach | spawn | launch
* link = local | usb | remote host:port
* device = '' | host:port | device-id
* target = pid | appname | process-name | program-in-path | abspath
محلي:
* frida://? # عرض هذه المساعدة
* frida:// # سرد العمليات المحلية
* frida://0 # الإرفاق بـ frida-helper (لا حاجة إلى spawn)
* frida:///usr/local/bin/rax2 # المسار المطلق للتشغيل (spawn)
* frida://rax2 # نفس ما سبق، بافتراض أن local/bin في PATH
* frida://spawn/$(program) # تشغيل عملية جديدة في النظام الحالي
* frida://attach/(target) # الإرفاق بـ PID معين على المضيف الحالي
USB:
* frida://list/usb// # سرد العمليات في أول جهاز USB
* frida://apps/usb// # سرد التطبيقات في أول جهاز USB
* frida://attach/usb//12345 # الإرفاق بـ PID معين في أول جهاز USB
* frida://spawn/usb//appname # تشغيل تطبيق في أول جهاز USB تم التعرف عليه
* frida://launch/usb//appname # تشغيل + استئناف تطبيق في أول جهاز USB
عن بُعد:
* frida://attach/remote/10.0.0.3:9999/558 # الإرفاق بالعملية 558 عبر TCP على frida-server البعيد
متغيرات البيئة: (استخدم الأمر `%` لتغيير البيئة وقت التشغيل)
R2FRIDA_SAFE_IO=0|1 # حل مؤقت لخلل Frida على Android/thumb
R2FRIDA_DEBUG=0|1 # لتصحيح سلوك تحليل الوسائط
R2FRIDA_COMPILER_DISABLE=0|1 # تعطيل مترجم TypeScript الجديد لـ Frida (`:. foo.ts`)
R2FRIDA_AGENT_SCRIPT=[file] # مسار ملف وكيل r2frida
أمثلة
$ r2 frida://0 # نفس frida -p 0، يتصل بجلسة محلية
يمكنك الإرفاق أو التشغيل (spawn/launch) لأي برنامج بالاسم أو PID. السطر التالي سيرفق بأول عملية اسمها rax2 (شغّل rax2 - في طرفية أخرى لاختبار هذا السطر)
$ r2 frida://rax2 # الإرفاق بأول عملية اسمها `rax2`
$ r2 frida://1234 # الإرفاق بـ PID معين
استخدام المسار المطلق لثنائي لتشغيله سيبدأ العملية:
$ r2 frida:///bin/ls
[0x00000000]> :dc # متابعة تنفيذ البرنامج المستهدف
يعمل أيضًا مع الوسائط:
$ r2 frida://"/bin/ls -al"
لتصحيح تطبيقات iOS/Android عبر USB استخدم هذه الإجراءات. لاحظ أنه يمكن استبدال spawn بـ launch أو attach، ويمكن أن يكون اسم العملية هو bundleid أو PID.
$ r2 frida://spawn/usb/ # تعداد الأجهزة
$ r2 frida://spawn/usb// # تعداد التطبيقات في أول جهاز iOS
$ r2 frida://spawn/usb//Weather # تشغيل تطبيق الطقس
الأوامر
هذه هي الأوامر الأكثر شيوعًا، لذا يجب أن تتعلمها وتضيف ? للحصول على مساعدة الأوامر الفرعية.
:i # الحصول على معلومات الهدف (pid, name, home, arch, bits, ..)
.:i* # استيراد تفاصيل العملية المستهدفة إلى r2 المحلي
:? # عرض جميع الأوامر المتاحة
:dm # سرد الخرائط. استخدم ':dm|head' وانتقل إلى عنوان قاعدة البرنامج
:iE # سرد التصديرات للثنائي الحالي (seek)
:dt fread # تتبع دالة 'fread'
:dt-* # حذف جميع التتبعات
الإضافات (Plugins)
تعمل إضافات r2frida في جانب الوكيل ويتم تسجيلها باستخدام واجهة r2frida.pluginRegister.
راجع دليل plugins/ لمزيد من نصوص الإضافات كمثال.
[0x00000000]> cat example.js
r2frida.pluginRegister('test', function(name) {
if (name === 'test') {
return function(args) {
console.log('Hello Args From r2frida plugin', args);
return 'Things Happen';
}
}
});
[0x00000000]> :. example.js # تحميل نص الإضافة
يعمل الأمر :. مثل أمر . في r2، لكنه يُنفذ داخل الوكيل.
:. a.js # تشغيل النص الذي يسجل إضافة
:. # سرد الإضافات
:.-test # إلغاء تحميل إضافة بالاسم
:.. a.js # جعل النص أبديًا (يستمر في العمل بعد الفصل)
Termux
إذا كنت ترغب في تثبيت واستخدام r2frida بشكل أصلي على Android عبر Termux، فهناك بعض المحاذير مع تبعيات المكتبات بسبب دقة بعض الرموز. الطريقة لجعل هذا يعمل هي توسيع متغير البيئة LD_LIBRARY_PATH للإشارة إلى دليل النظام قبل دليل lib الخاص بـ Termux.
$ LD_LIBRARY_PATH=/system/lib64:$LD_LIBRARY_PATH r2 frida://...
استكشاف الأخطاء وإصلاحها
تأكد من أنك تستخدم إصدارًا حديثًا من r2 (يفضل آخر إصدار أو git).
شغّل r2 -L | grep frida للتحقق من تحميل الإضافة، إذا لم يُطبع شيء استخدم متغير البيئة R2_DEBUG=1 للحصول على رسائل تصحيح لمعرفة السبب.
إذا واجهت مشاكل في تجميع r2frida يمكنك استخدام r2env أو جلب إصدارات الإصدار من صفحة إصدارات GitHub، ضع في اعتبارك أن الإصدار الرئيسي والثانوي فقط يجب أن يتطابقا، أي أن r2-5.7.6 يمكنه تحميل أي إضافة تم تجميعها على أي إصدار بين 5.7.0 و 5.7.8.
التصميم
+---------+
| radare2 | أداة radare2، فوق البقية
+---------+
:
+----------+
| io_frida | إضافة io لـ r2frida
+----------+
:
+---------+
| frida | واجهات برمجة Frida المضيفة ومنطق التفاعل مع الهدف
+---------+
:
+-------+
| app | العملية المستهدفة التي تم تجسيرها بواسطة Frida باستخدام Javascript
+-------+
الشكر
تم تطوير هذه الإضافة بواسطة pancake المعروف بـ Sergi Alvarez (مؤلف radare2) لصالح NowSecure.
أود أن أشكر Ole André على كتابة وصيانة Frida، بالإضافة إلى كرمه في إصلاح الأخطاء بشكل استباقي ومناقشة التفاصيل التقنية حول أي شيء ضروري لجعل هذا الاتحاد يعمل.