
Fermion, an electron wrapper for Frida & Monaco.
Fermion هو تطبيق Electron يغلّف frida-node وmonaco-editor. يوفّر بيئة متكاملة بالكامل لبناء واختبار وتحسين نصوص Frida البرمجية من خلال واجهة مستخدم واحدة. ومع دمج Monaco، تحصل على جميع الميزات التي تتوقعها من Visual Studio Code: الفحص اللغوي (Linting)، IntelliSense، اختصارات لوحة المفاتيح، وغيرها. بالإضافة إلى ذلك، يمتلك Fermion تعريفًا للغة TypeScript خاصًا بواجهة Frida البرمجية، مما يسهّل كتابة نصوص Frida.
ماذا في الاسم؟: يمكن أن يكون الفيرميون جسيمًا أوليًا، مثل الإلكترون، أو جسيمًا مركبًا، مثل البروتون. تشمل الفيرميونات جميع الكواركات واللبتونات، بالإضافة إلى جميع الجسيمات المركبة المكوّنة من عدد فردي من هذه الجسيمات، مثل جميع الباريونات والعديد من الذرات والأنوية.
قم بتنزيل المستودع وانتقل إلى مجلد Fermion في الطرفية. بعد ذلك، عيّن متغيرات البيئة التالية.
# Windows
set npm_config_runtime=electron
set npm_config_target=21.0.0
# Linux / OSX
export npm_config_runtime=electron
export npm_config_target=21.0.0
بعد ذلك، قم بتثبيت الحزم المطلوبة لتشغيل Fermion باستخدام:
npm install
عند اكتمالها، يمكنك تشغيل Fermion بتنفيذ الأمر:
npm start
أكمل الخطوات أعلاه ثم نفّذ الأمر التالي من الطرفية:
# Windows
electron-packager . --icon .\src\images\fermion-ico.ico
# Linux
electron-packager . --icon ./src/images/fermion-ico.png
# OSX
electron-packager . --icon ./src/images/fermion-ico.icns
يمكنك الحصول على أحدث إصدار جاهز من Fermion لأنظمة Windows وLinux بمعمارية x64 من صفحة الإصدارات.
Fermion تخبرك بالمشكلة وكيفية حلها. لكن بشكل عام، يمكنك تشغيل Fermion أو Frida Server كـ root، أو بدلًا من ذلك تشغيل الأمر التالي: sudo sysctl kernel.yama.ptrace_scope=0.س: أريد بناء نسختي الخاصة من Fermion مقابل إصدار جديد من Frida/Electron. كيف يمكنني معرفة prebuild الموجودة حاليًا؟
ELECTRON_TARGETS_DEFAULT وELECTRON_TARGETS_FREEBSD على التوالي.س: أريد مراجعة/تغيير/تحديث تعريفات الأنواع المستخدمة في محرر Monaco، كيف يمكنني فعل ذلك؟
node_modules/@types/frida-gum/index.d.ts.س: لماذا لا يوجد trace مستقر يا رجل (╯°□°)╯︵ ┻━┻
hot pointer و/أو كان التتبّع يولّد رسومًا بيانية بآلاف العقد، فغالبًا ستجد أن trace window يعاني من بطء شديد أثناء استقبال البيانات. كما هو الحال مع أي نوع من التتبّع، يمكن أن يسبب عدم استقرار العملية / تعطّلها / تجمّدها.يمكنك رؤية مثال على عمل Fermion أدناه، وفي هذه الحالة يتم تطعيم kernel32!ReadFile.

يدعم Fermion الإكمال التلقائي والفحص اللغوي ورموز Frida API.

يمكن لـ Fermion الاتصال بخادم Frida لتصحيح أخطاء التطبيقات البعيدة باستخدام قائمة السياق device. في حالات كثيرة، مثل تصحيح الأخطاء عبر USB أو عند الالتحاق بتطبيقات الجوال من خلال محاكيات مثل genymotion، سيتعرف Fermion تلقائيًا على الخادم كمتاح. ومع ذلك، من الممكن أيضًا تحديد خادم بعيد باستخدام مجموعة IP وPort.

لدى Fermion دعم مدمج لتتبّع CALL tracing للخيوط.

قد لا يقوم هذا بما تتوقعه تمامًا. عندما تحدّد إما pointer أو مجموعة module/Symbol، فإن المقتفي (tracer) سيقوم بعمل attach إلى ذلك الموقع، وفي أي وقت ينفّذ thread ما في ذلك المكان، سيبدأ في تتبّع جميع تعليمات CALL التي ينفذها ذلك الخيط حتى يعود. هذا يعني أن عمليات التنفيذ المختلفة يمكن أن تولّد رسومًا بيانية مختلفة، كما يعني أيضًا أنك قد لا ترى كل ما تقوم به الدالة (مثلًا، إذا تم إنشاء خيط مختلف داخل الدالة).

يحوّل Fermion هذه التتبّعات إلى صيغة Graphviz SVG باستخدام dot، ويمكنك بعدها استكشافها. هذه ميزة أجدها مفيدة أحيانًا عند القيام بأعمال استكشافية (ماذا تفعل الدالة؟ ما مدى تعقيد ذلك التنفيذ؟). ومع ذلك، فهذه ميزة prototype بنيتها فوق Fermion وربما تحتاج إلى مزيد من العناية لتكون أكثر جاهزية للإنتاج.

لمزيد من التفاصيل حول التغييرات الخاصة بكل إصدار، راجع changelog.
إذا قمت بدمج Fermion في سير عملك ووجدته مفيدًا، أشجعك على تقديم pull requests، وإرسال تقارير الأخطاء، وطلب ميزات لتحسين التطبيق. أنا لست مطوّر Node محترفًا تمامًا، لذا أنا متأكد من أن الناس سيجدون طرقًا لتحسين وإعادة صياغة بعض المكونات.
Frida v15.0+.أود فقط أن أتقدم ببعض الشكر الخاص!