
Radare2 وFrida أفضل معًا.
# r2frida
Radare2 و Frida معًا بشكل أفضل [](https://github.com/nowsecure/r2frida/actions/workflows/ci.yml)
[](https://github.com/radareorg/radare2)
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/6368/cb1a7ba58f6ff64ad947e97c41037ba99ae04d10530e310971849f025e9e3351.png" width="414px" height="248px">
</p>
## الوصف
إضافة (plugin) قائمة بذاتها لـ [radare2](https://www.radare.org) تُضمّن
[frida](https://www.frida.re) وتتيح فحص العمليات المحلية أو البعيدة
باستخدام أوامر r2 بدلاً من (ولكن ليس مقتصرًا على) سكربتات Frida.
يوفر مشروع radare سلسلة أدوات كاملة للهندسة العكسية،
وهو مُصان بشكل نشط ويوفر وظائف جيدة الصيانة
ويوسّع ميزاته بلغات برمجة وأدوات أخرى.
Frida هي مجموعة أدوات للفحص الديناميكي (dynamic instrumentation) تسهّل فحص
والتلاعب بالعمليات قيد التشغيل عبر حقن JavaScript الخاص بك، واختياريًا
أيضًا التواصل مع سكربتاتك.
## الميزات
* تشغيل سكربتات Frida دون تعديل (استخدم الأمر `:.`)
* تنفيذ مقتطفات برمجية بلغة C أو Javascript أو TypeScript في أي عملية
* يمكنه الارتباط (attach) أو إنشاء (spawn) أو تشغيل (launch) في الأنظمة المحلية أو البعيدة
* سرد الأقسام والرموز (symbols) والصادرات (exports) والبروتوكولات والفئات (classes) والطرق (methods)
* البحث عن القيم في الذاكرة داخل الوكيل (agent) أو من المضيف
* استبدال تطبيقات الطرق (method implementations) أو إنشاء خطافات (hooks) بأوامر قصيرة
* تحميل المكتبات والأُطر (frameworks) في العملية الهدف
* دعم واجهات Dalvik و Java و ObjC و Swift و C
* التلاعب بوصفات الملفات (file descriptors) ومتغيرات البيئة
* إرسال الإشارات (signals) إلى العملية، والمتابعة، ونقاط التوقف (breakpoints)
* إضافة io في r2frida هي أيضًا خلفية **fs** و **debug**
* أتمتة r2 و frida باستخدام r2pipe
* قراءة/كتابة ذاكرة العملية
* استدعاء الدوال (functions) واستدعاءات النظام (syscalls) ومقتطفات الشيفرة الخام
* الاتصال بـ frida-server عبر usb أو tcp/ip
* تعداد التطبيقات والعمليات
* تتبع السجلات (registers) ومعاملات الدوال (arguments of functions)
* تم اختباره على x64 و arm32 و arm64 لأنظمة Linux و Windows و macOS و iOS و Android
* لا يتطلب تثبيت frida على المضيف (لا حاجة لـ frida-tools)
* توسيع أوامر r2frida بإضافات تعمل في الوكيل (agent)
* تغيير أذونات الصفحات (page permissions)، وترقيع الشيفرة والبيانات
* حل الرموز (symbols) بالاسم أو العنوان واستيرادها كأعلام (flags) إلى r2
* تشغيل أوامر r2 في المضيف من الوكيل
* استخدام واجهات r2 البرمجية (apis) وتشغيل أوامر r2 داخل العملية الهدف البعيدة.
* نقاط توقف أصلية (native breakpoints) باستخدام واجهة `:db`
* الوصول إلى أنظمة الملفات البعيدة باستخدام واجهة `r_fs`.
## التثبيت
الطريقة الموصى بها لتثبيت r2frida هي عبر r2pm:
```sh
$ r2pm -ci r2frida
```
سيتم قريبًا دعم البِناءات الثنائية (binary builds) التي لا تتطلب ترجمة (compilation) في
`r2pm` و `r2env`. في غضون ذلك، لا تتردد في تنزيل آخر البِناءات
من [صفحة الإصدارات (Releases)](https://github.com/nowsecure/r2frida/releases).
## الترجمة (Compilation)
### المتطلبات (Dependencies)
* radare2
* pkg-config (غير مطلوب على windows)
* curl أو wget
* make، gcc
* npm، nodejs (سيتم إزالته قريبًا)
في GNU/Debian ستحتاج إلى تثبيت الحزم التالية:
```sh
$ 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
* فك ضغط أحدث إصدار zip من radare2 في الدليل الجذر لـ 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
Local:
* frida://? # show this help
* frida:// # list local processes
* frida://0 # attach to frida-helper (no spawn needed)
* frida:///usr/local/bin/rax2 # abspath to spawn
* frida://rax2 # same as above, considering local/bin is in PATH
* frida://spawn/$(program) # spawn a new process in the current system
* frida://attach/(target) # attach to target PID in current host
USB:
* frida://list/usb// # list processes in the first usb device
* frida://apps/usb// # list apps in the first usb device
* frida://attach/usb//12345 # attach to given pid in the first usb device
* frida://spawn/usb//appname # spawn an app in the first resolved usb device
* frida://launch/usb//appname # spawn+resume an app in the first usb device
Remote:
* frida://attach/remote/10.0.0.3:9999/558 # attach to pid 558 on tcp remote frida-server
Environment: (Use the `%` command to change the environment at runtime)
R2FRIDA_SAFE_IO=0|1 # Workaround a Frida bug on Android/thumb
R2FRIDA_DEBUG=0|1 # Used to debug argument parsing behaviour
R2FRIDA_COMPILER_DISABLE=0|1 # Disable the new frida typescript compiler (`:. foo.ts`)
R2FRIDA_AGENT_SCRIPT=[file] # path to file of the r2frida agent
```
### أمثلة
```sh
$ r2 frida://0 # same as frida -p 0, connects to a local session
```
يمكنك الارتباط أو إنشاء أو تشغيل أي برنامج بالاسم أو pid، السطر التالي سيرتبط بأول عملية تُسمى `rax2` (شغّل `rax2 -` في طرفية أخرى لاختبار هذا السطر)
```sh
$ r2 frida://rax2 # attach to the first process named `rax2`
$ r2 frida://1234 # attach to the given pid
```
استخدام المسار المطلق لملف ثنائي لإنشائه سيؤدي إلى إنشاء العملية:
```sh
$ r2 frida:///bin/ls
[0x00000000]> :dc # continue the execution of the target program
```
يعمل أيضًا مع المعاملات (arguments):
```sh
$ r2 frida://"/bin/ls -al"
```
لتصحيح تطبيقات iOS/Android عبر USB استخدم هذه الإجراءات. لاحظ أن `spawn`
يمكن استبداله بـ `launch` أو `attach`، ويمكن أن يكون اسم العملية
هو bundleid أو PID.
```sh
$ r2 frida://spawn/usb/ # enumerate devices
$ r2 frida://spawn/usb// # enumerate apps in the first iOS device
$ r2 frida://spawn/usb//Weather # Run the weather app
```
### الأوامر
هذه هي الأوامر الأكثر شيوعًا، لذا يجب أن تتعلمها وتضيف إليها اللاحقة `?` للحصول على مساعدة الأوامر الفرعية.
```
:i # get information of the target (pid, name, home, arch, bits, ..)
.:i* # import the target process details into local r2
:? # show all the available commands
:dm # list maps. Use ':dm|head' and seek to the program base address
:iE # list the exports of the current binary (seek)
:dt fread # trace the 'fread' function
:dt-* # delete all traces
```
### الإضافات (Plugins)
تعمل إضافات r2frida في جانب الوكيل (agent side) ويتم تسجيلها باستخدام واجهة `r2frida.pluginRegister`.
راجع دليل `plugins/` لمزيد من الأمثلة على سكربتات الإضافات.
```js
[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 # load the plugin script
```
يعمل الأمر `:.` مثل الأمر `.` في r2، لكنه يعمل داخل الوكيل (agent).
```sh
:. a.js # run script which registers a plugin
:. # list plugins
:.-test # unload a plugin by name
:.. a.js # eternalize script (keeps running after detach)
```
## Termux
إذا كنت ترغب في تثبيت واستخدام r2frida أصلاً (natively) على Android عبر Termux، فهناك بعض التحذيرات المتعلقة بتبعيات المكتبات بسبب بعض عمليات حل الرموز (symbol resolutions). الطريقة لجعل هذا يعمل هي توسيع متغير البيئة `LD_LIBRARY_PATH` ليشير إلى دليل النظام *قبل* دليل مكتبات termux.
`$ LD_LIBRARY_PATH=/system/lib64:$LD_LIBRARY_PATH r2 frida://...`
## استكشاف الأخطاء وإصلاحها
تأكد من أنك تستخدم إصدارًا حديثًا من r2 (يُفضّل آخر إصدار أو git).
يختبر CI إصدار **radare2 6.2.2** و git master. تحافظ أدوات التوافق المساعدة على اكتشاف مسارات Windows المطلقة وأسماء ملفات السكربتات المُقتبسة على واجهات radare2 الأقدم (ABIs).
شغّل `r2 -L | grep frida` للتحقق مما إذا كانت الإضافة محمّلة، إذا لم يُطبع شيء استخدم متغير البيئة `R2_DEBUG=1` للحصول على بعض رسائل التصحيح لمعرفة السبب.
إذا واجهت مشاكل في ترجمة r2frida يمكنك استخدام `r2env` أو جلب بِناءات الإصدار من صفحة إصدارات GitHub، مع الأخذ في الاعتبار أنه يجب تطابق إصدار MAJOR.MINOR فقط، أي أن r2-5.7.6 يمكنه تحميل أي إضافة مُترجمة على أي إصدار بين 5.7.0 و 5.7.8.
## التصميم
```
+---------+
| radare2 | The radare2 tool, on top of the rest
+---------+
:
+----------+
| io_frida | r2frida io plugin
+----------+
:
+---------+
| frida | Frida host APIs and logic to interact with target
+---------+
:
+-------+
| app | Target process instrumented by Frida with Javascript
+-------+
```
## الشكر والتقدير
تم تطوير هذه الإضافة بواسطة pancake المعروف أيضًا بـ Sergi Alvarez (مؤلف
radare2) لصالح NowSecure.
أود أن أشكر Ole André على كتابة وصيانة Frida وكذلك
لكونه لطيفًا بما يكفي لإصلاح الأخطاء بشكل استباقي ومناقشة التفاصيل التقنية
في أي شيء مطلوب لجعل هذا الاتحاد يعمل. تحية له