
Radare2 وFrida أفضل معًا.
إضافة قائمة بذاتها لـ radare2 تحتوي على frida وتسمح بتجسير العمليات المحلية أو البعيدة باستخدام أوامر r2 بدلاً من (وليس حصرًا) نصوص Frida.
يوفر مشروع radare سلسلة أدوات كاملة لهندسة عكسية، وهو يُصان بنشاط ويوفر وظائف جيدة الصيانة ويمد ميزاته بلغات برمجة وأدوات أخرى.
Frida هي مجموعة أدوات تجسير ديناميكي تسهل فحص ومعالجة العمليات الجارية عن طريق حقن JavaScript الخاص بك، ويمكنك اختياريًا التواصل مع نصوصك.
:.):dbr_fsالطريقة الموصى بها لتثبيت r2frida هي عبر r2pm:
$ r2pm -ci r2frida
سيتم قريبًا دعم إصدارات ثنائية لا تحتاج إلى تجميع في r2pm و r2env. في هذه الأثناء، لا تتردد في تنزيل أحدث الإصدارات من صفحة الإصدارات.
في 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
radare2 (بدلاً من radare2-x.y.z)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-* # حذف جميع التتبعات
تعمل إضافات 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 # جعل النص أبديًا (يستمر في العمل بعد الفصل)
إذا كنت ترغب في تثبيت واستخدام 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، بالإضافة إلى كرمه في إصلاح الأخطاء بشكل استباقي ومناقشة التفاصيل التقنية حول أي شيء ضروري لجعل هذا الاتحاد يعمل.