
حل تعاون متعدد الأدوات للهندسة العكسية.

CollaRE هي أداة للهندسة العكسية التعاونية تهدف إلى تمكين الفرق التي تحتاج إلى استخدام أكثر من أداة واحدة أثناء المشروع من التعاون دون الحاجة إلى مشاركة الملفات في موقع منفصل. كما تحتوي على إدارة مستخدمين بسيطة للغاية، ويمكن استخدامها كخادم متعدد المشاريع حيث تعمل فرق مختلفة على مشاريع مختلفة.
الجزء الخلفي back-end من الأداة هو تطبيق Flask app بسيط مع nginx أمامه يعمل في Docker، ويتعامل مع الملفات وملفات البيان (manifests) المستندة إلى JSON التي تحتفظ بالبيانات ذات الصلة. أما الواجهة الأمامية فهي أداة رسومية مبنية على PyQT بواجهة بسيطة تسمح بإدارة المشاريع والعمل مع الملفات الثنائية وقواعد بيانات الهندسة العكسية المقابلة لها. حتى الآن تدعم الأداة Binary Ninja وCutter (Rizin) وGhidra وHopper Dissassembler وIDA وJEB وAndroid Studio (Decompiled by JADX). وقد تم تجريد التنفيذ من الأعمال الداخلية لهذه الأدوات قدر الإمكان لتجنب المشاكل الناتجة عن أي تغييرات في واجهات البرمجة (API)، وبالتالي لا يتكامل مباشرة مع تلك الأدوات في شكل إضافة (باستثناء إضافات ترحيل البيانات الموصوفة أدناه). يعتمد العمل بشكل كامل على إدارة الملفات التي تنتجها هذه الأدوات (حرفيًا فقط بناءً على امتدادات الملفات المعروفة) وعمليات check-out وcheck-in البسيطة على غرار SVN.
احصل على أحدث إصدار ثنائي من هذا المستودع أو استنسخ المستودع وشغّل sudo python3 setup.py install على لينكس، أو استخدم سطر الأوامر على ويندوز وشغّل python3 setup.py install. على لينكس، سيؤدي هذا إلى تثبيت الأداة في PATH وستتمكن من تشغيلها ببساطة باستخدام الأمر collare. على ويندوز، سيضع هذا الملف في المسار C:\Users\<USERNAME>\AppData\Local\Programs\Python\<PYTHON_VERSION>\Scripts\collare.exe (اعتمادًا على طريقة تثبيت بايثون).
بالنسبة لواجهات سطح المكتب المبنية على Gnome، يمكنك استخدام ملف سطح المكتب التالي (قد تختلف مسارات الملفات حسب إصدار CollaRE وPython):
[Desktop Entry]
Type=Application
Encoding=UTF-8
Name=CollaRE
Exec=/usr/local/bin/collare
Icon=/usr/local/lib/python3.8/dist-packages/collare-1.2-py3.8.egg/collare/icons/collare.png
Terminal=false
لتفعيل دعم Cutter أضف ملفًا باسم Cutter إلى مسار PATH (عند فتح cmd/terminal، يجب أن يؤدي كتابة Cutter إلى تشغيل التطبيق).
عند حفظ مشاريع Cutter (rizin) يجب عليك إضافة .rzdb يدويًا. لا تقم بإزالة الامتداد الموجود بالفعل على الملف (مثل exe أو so).
لتفعيل دعم Binary Ninja أضف ملفًا باسم binaryninja إلى مسار PATH (عند فتح cmd/terminal، يجب أن يؤدي كتابة binaryninja إلى تشغيل التطبيق).
يزيل Binary Ninja امتدادات الملفات افتراضيًا، ولكن الأداة تأخذ ذلك في الاعتبار، لذلك لا حاجة لإعادة الامتداد الأصلي يدويًا. حفظ المشاريع كما هي في المسار الافتراضي كافٍ لرفع قاعدة البيانات المحلية bndb بنجاح.
لتفعيل دعم Hopper Disassembler أضف ملفًا باسم Hopper إلى مسار PATH (عند فتح cmd/terminal، يجب أن يؤدي كتابة Hopper إلى تشغيل التطبيق).
يزيل Hopper امتدادات الملفات افتراضيًا، ولكن الأداة تأخذ ذلك في الاعتبار، لذلك لا حاجة لإعادة الامتداد الأصلي يدويًا. حفظ المشاريع ببساطة باستخدام Ctrl+S كافٍ لرفع قاعدة البيانات المحلية hop بنجاح.
لتفعيل دعم JEB أضف ملفًا باسم jeb إلى مسار PATH (عند فتح cmd/terminal، يجب أن يؤدي كتابة jeb إلى تشغيل التطبيق). يمكن القيام بذلك عن طريق إعادة تسمية ملف السكربت التشغيلي الافتراضي لنظام تشغيلك إلى jeb (بالنسبة لويندوز سيكون هذا فعليًا jeb.bat).
لتفعيل دعم أداة IDA أضف ملفي ida64 وida إلى مسار PATH (عند فتح cmd/terminal، يجب أن يؤدي كتابة ida64/ida إلى تشغيل التطبيق).
لتفعيل دعم هذه الأداة أضف ملفي ghidraRun وanalyzeHeadless (.bat بالنسبة لويندوز) إلى مسار PATH (عند فتح cmd/terminal، يجب أن يؤدي كتابة ghidraRun إلى تشغيل التطبيق). لاحظ أن analyzeHeadless موجود في مجلد support داخل المجلد الجذر لـ Ghidra، لذا تأكد من تعديل PATH ليشمل كلا الملفين.
عملية تهيئة قاعدة البيانات مع Ghidra أكثر تعقيدًا بعض الشيء، إذ لا توجد طريقة يمكن بها لـ Ghidra معالجة ملف دون إنشاء مشروع. لذلك، لتتمكن من رفع قاعدة بيانات Ghidra (يُشار إليها باسم ghdb) سيُطلب منك إنشاء مشروع يدويًا كلما فشلت المعالجة التلقائية (أساسًا كلما كان الملف الذي تعالجه ليس ELF/PE)، ثم تحديد المسار إلى ملف gpr (آسف على ذلك).
نظرًا لأن ملفات APK وJAR غالبًا ما تتم مواجهتها أثناء جهود الهندسة العكسية، فإن أداة CollaRE تدعم أيضًا العمل مع هذه الأنواع من الملفات. لتفعيل دعم هذه الأدوات، من الضروري التأكد من أن الملفين android-studio وjadx موجودان في مسار PATH (عند فتح cmd/terminal، يجب أن يؤدي كتابة android-studio/jadx إلى تشغيل التطبيق). تُستخدم أداة JADX لإجراء عملية فك الترجمة لملف JAR/APK، ويُستخدم Android Studio لفتح الملفات الناتجة. لاحظ أن استخدام Android Studio اختياري، حيث يمكنك وضع اسم مستعار لأي أداة أخرى تتعامل مع مشاريع Gradle تحت أمر android-studio (مثل IntelliJ IDEA).
بعد نشر الخادم كما هو مذكور في ملف README الخاص به، من الضروري توزيع ملف الشهادة المستخدم على جميع مستخدمي التطبيق، وكذلك استخدام حساب admin الافتراضي بكلمة مرور admin لإنشاء حسابات مستخدمين أخرى (لا تنسَ تغيير كلمة مرور مستخدم admin) عبر تبويب Admin. عندما يتم تكوين المستخدمين، يمكن لأي شخص إنشاء مشاريعه الخاصة والبدء في العمل مع الأداة نفسها.
لإنشاء مشروع، يجب على المستخدم أولاً المصادقة على الخادم البعيد عن طريق إدخال عنوان URL وبيانات الاعتماد وتقديم شهادة للتحقق من هوية الخادم. بعد ذلك، ستتغير الحالة إلى Connected ويمكن تحديد أو حذف المشاريع الموجودة، أو إنشاء مشروع جديد بمجرد إدخال الاسم (أحرف أبجدية رقمية و_ فقط) وتحديد المستخدمين الذين سيشاركون في المشروع (يمكن تغييرهم لاحقًا في تبويب Admin). لاحظ أن المستخدم الذي ينشئ المشروع يُضاف تلقائيًا إلى قائمة المستخدمين، لذلك لا تحتاج إلى تحديد نفسك.

بمجرد وجودك في تبويب Project View يمكنك إنشاء مجلدات جديدة (أحرف أبجدية رقمية و_ فقط، آسف) واستخدام السحب والإفلات لرفع الملفات (أو المجلدات).

نظرًا لأن الأداة لا تمتلك حاليًا أي إضافات أو خطافات أصلية (native hooks) تسمح بالرفع التلقائي عند حفظ المشروع، فمن الضروري تشغيل رفع ملف قاعدة البيانات المحلية يدويًا بعد إنشاء قواعد البيانات المطلوبة. يمكن القيام بذلك بالنقر بزر الماوس الأيمن على الملف الثنائي المرفوع واختيار الأداة التي تريد معالجة الملف الثنائي بها. يمكنك إجراء تحليل أساسي، ولكن يُنصح بشدة فقط بحفظ الملف دون تغيير أي شيء (باستثناء إلحاق rzdb في Cutter وعملية مختلفة تمامًا مع Ghidra). لا تغيّر المسار واسم الملف. بعد القيام بذلك وإغلاق مفكك التجميع (disassembler)، يمكنك ببساطة النقر بزر الماوس الأيمن على اسم الملف الثنائي وتحديد الخيار Push Local DBs. سيؤدي هذا إلى رفع قاعدة البيانات المحلية، ومن الآن فصاعدًا عندما تريد العمل مع ملف قاعدة البيانات يجب عليك تنفيذ Check-out. لاحظ أنه يمكن معالجة كل ملف ثنائي في جميع الأدوات بشكل منفصل، ولكن يمكن أن يوجد ملف قاعدة بيانات واحد فقط لكل ملف ثنائي وأداة.

عندما تريد فقط فحص الملف، يمكنك النقر بزر الماوس الأيمن على ملف قاعدة البيانات المطلوب وتحديد الخيار Open File (أو ببساطة النقر المزدوج). إذا كان الملف مسحوبًا إليك (checked-out)، فسيؤدي ذلك إلى فتح الملف المحلي ويمكنك إجراء أي تغييرات بحرية على ملف قاعدة البيانات. عند الانتهاء (أو عندما تريد ببساطة رفع التغييرات)، يمكنك تحديد خيار Check-in. سيؤدي هذا إلى رفع التغييرات إلى الخادم وسيُطلب منك ما إذا كنت تريد إبقاء الملف مسحوبًا لتغييرات إضافية. إذا كنت تريد التخلي عن تغييراتك المحلية، فحدد خيار Undo Check-out من قائمة السياق. سيؤدي هذا إلى تجاهل تغييراتك ويسمح لك بالمتابعة مع الملف من الخادم. فتح ملف دون تنفيذ Check-out أولاً سيفتحه في وضع قراءة فقط وهمي (يمكنك إجراء تغييرات على ملف قاعدة البيانات، لكنها ستُفقد في المرة القادمة التي تقوم فيها بـ Check-out أو فتح الملف).

تدعم الأداة أيضًا إنشاء إصدارات لملفات قاعدة البيانات بحيث يُعد كل إجراء Check-in إصدارًا جديدًا من ملف قاعدة البيانات. سيُطلب منك إدخال تعليق للإصدار يُستخدم لإعطاء سياق أكبر للتغييرات المطبقة في هذا الإصدار. ومن ثم يمكن فتح أو سحب (check-out) الإصدارات السابقة من الملفات والعمل عليها.

يحتوي مجلد plugins داخل هذا المستودع على إضافات للأدوات المدعومة تتيح لك مشاركة التعليقات وأسماء الدوال بين الأدوات في حال كنت تعمل على ملف ثنائي واحد باستخدام أدوات متعددة. اتبع تعليمات تثبيت الإضافات القياسية للأداة التي تهتم بها. توفر كل إضافة وظيفة Import ووظيفة Export. عندما تخطط لمشاركة البيانات بين الأدوات، تأكد دائمًا من تنفيذ Import أولاً لتجنب إعادة تسمية دوال تمت إعادة تسميتها بالفعل من قبل شخص آخر. إذا كانت الإضافة تحتوي على بعض المحاذير، فسيتم ذكرها في ملف README الخاص بتلك الإضافة. لاحظ أن الإضافات تهدف إلى ترحيل البيانات إلى أداة أخرى وليس للتعاون المتزامن بين عدة أشخاص.
