ScratchABit عبارة عن أداة مفككة تزايدية تفاعلية تتمتع بقدرات تحليل تدفق البيانات/التحكم. ScratchABit مكرس لجهود مجتمع الهندسة العكسية OpenSource (الهندسة العكسية لإنتاج برامج التشغيل/البرامج الثابتة مفتوحة المصدر للأجهزة التي لا يدعمها البائعون بشكل صحيح، ولقابلية التشغيل البيني للأجهزة والبرامج، وللأبحاث الأمنية).
يدعم ScratchABit واجهة برمجة تطبيقات IDAPython المعروفة في المجتمع لكتابة وحدات التفكيك/التوسيع.
ScratchABit هو عمل مستمر، ويتم إضافة الميزات حسب الحاجة، والمساهمات مرحب بها.
تم إصدار ScratchABit بموجب شروط GNU General Public License v3 (GPLv3).
لا ينبغي أن تكون مكتوبة بلغة غامضة. يتضمن ذلك اللغات ذات المستوى المنخفض للغاية، والتي تسمح بالوصول إلى المتغيرات غير المهيأة، والتي لا تفرق بين المتغيرات والوظائف/الإجراءات، والتي تبدأ فهارس المصفوفة من أرقام عشوائية، وما إلى ذلك، وما إلى ذلك. يتم كتابة ScratchABit بلغة بايثون ( الإصدار الحديث، Python3) من أجل المتعة والتعقل.
يجب أن يسمح إطار واجهة المستخدم بتفاعل المستخدم بالمستوى المطلوب، وليس إضافة التبعيات والانتفاخ والمشكلات وعدم التوافق بين إصدارات إطار العمل. يستخدم ScratchABit حاليًا واجهة مستخدم نصية بسيطة بملء الشاشة، باستخدام تسلسلات الهروب الطرفية ANSI/VT100 (نعم، حتى مكتبة اللعنات تم اعتبارها اعتمادية منتفخة جدًا بحيث لا يمكن فرضها على المستخدمين).
يجب الاستفادة من تنسيقات النصوص سهلة الاستخدام لتخزين "قاعدة البيانات"، لتسهيل إعادة الاستخدام وكتابة الأدوات وتخزينها في أنظمة التحكم في الإصدار.
لاستخدام ScratchABit، تحتاج إلى تثبيت Python3 (تم اختباره باستخدام Python 3.3 إلى 3.7) وVT100 (الحد الأدنى) أو XTerm (موصى به) الطرفية أو المحاكي الطرفي (يجب أن يكون أي نظام Unix متوافقًا، مثل Linux/BSD/إلخ.، راجع الأسئلة الشائعة أدناه للتعرف على أكثر).
استنساخ الكود باستخدام:
git clone --recursive https://github.com/pfalcon/ScratchABit
إذا قمت باستنساخ التعليمات البرمجية بدون --recursive
، فقم بتشغيل git submodule update --init
في دليل ScratchABit.
يأتي ScratchABit الآن مزودًا بمكونات وحدة المعالجة المركزية (CPU) المستندة إلى Capstone Engine، والتي تتيح الوصول إلى عدد من بنيات وحدة المعالجة المركزية. لاستخدامها، يجب تثبيت وحدة ربط Python حديثة لـ Capstone (تفضيلاً للحزم التي يتم شحنها بواسطة توزيعات نظام التشغيل، والتي غالبًا ما تكون قديمة). أسهل طريقة لتثبيته هي في دليل حزم مستخدم Python:
pip3 install --no-cache-dir --user capstone
البديل هو تثبيته على بيئة Python الافتراضية داخل دليل ScratchABit:
python3 -m venv .venv
source .venv/bin/activate
pip3 install --no-cache-dir capstone
كلما قمت بفتح جلسة طرفية جديدة للعمل مع ScratchABit، قم بتشغيل الأمر source .venv/bin/activate
مرة أخرى لتنشيط البيئة الافتراضية.
إذا لم ينجح أي مما سبق، فيمكنك محاولة تثبيت حزمة capstone على مستوى النظام (غير مستحسن):
sudo pip3 install --system capstone
إذا كنت تريد تفكيك ملف بتنسيق قابل للتنفيذ يصف نفسه ذاتيًا (مثل ELF)، فما عليك سوى تمريره كوسيطة إلى ScratchABit.py
. يتضمن المستودع عددًا من ملفات example-*.elf
لمختلف البنيات لبداية سريعة. على سبيل المثال، لتجربة الإصدار x86 32 بت:
python3 ScratchABit.py example-x86_32.elf
وبدلاً من ذلك، إذا كنت تريد تفكيك ملف ثنائي خام، فأنت بحاجة إلى إنشاء ملف .def (تعريف)، لتحديد مناطق الذاكرة المحددة للتعليمة البرمجية، وعلى أي عنوان سيتم تحميل الملف الثنائي، وما إلى ذلك (ملاحظة: ملف . قد يكون ملف def مفيدًا لـ .elf والملفات المشابهة أيضًا.) يتضمن المستودع رمزًا ثنائيًا بسيطًا x86_64 وملف المثال المقابل x86_64.def (انظر بالداخل للحصول على وصف للخيارات المتاحة):
python3 ScratchABit.py example-x86_64.def
اضغط على F9 للوصول إلى القوائم (يعمل الماوس أيضًا في المحطات الطرفية المتوافقة مع XTerm). اضغط على F1 للحصول على مساعدة بشأن روابط المفاتيح (يمكن الوصول إلى معظم الإجراءات أيضًا عبر القائمة). يشبه سير العمل في ScratchABit أدوات التفكيك التفاعلية الأخرى (قد تكون بعض التجارب السابقة أو القراءة الخلفية مفيدة).
يمكن تحميل المكونات الإضافية لمعالج IDAPython من أي مكان على مسار وحدة Python. وبدلاً من ذلك، يمكنك ربط/نسخ ملف (ملفات) المكون الإضافي .py
إلى الدليل الفرعي plugins/cpu/
.
بعد إتاحة المكون الإضافي، قم بإنشاء ملف تعريف جديد استنادًا إلى example-x86_64.def
الذي يقوم بتعيين اسم وحدة البرنامج المساعد (بدون امتداد .py
) في سطر cpu xxx
.
للحصول على مثال بسيط جدًا يستخدم مكونًا إضافيًا خارجيًا، راجع ملف esp8266.def هذا الذي يعمل مع المكون الإضافي xtensa.py من مستودع ida-xtensa2.
س: ما هي المعالجات/البنيات المدعومة؟
ج: لا يدعم ScratchABit أي بنيات للمعالج بمفرده، ويمكن إعادة توجيهه بالكامل باستخدام مكونات IDAPython API الإضافية. تتوفر العديد من المكونات الإضافية، ومن السهل كتابة مكون إضافي جديد. للسماح للمستخدمين باختبار ScratchABit، تم تضمين مكون إضافي بسيط لمعالج x86 في التوزيعة، باستخدام أداة فك التجميع Pymsaid أسفل الغطاء.
بدءًا من الإصدار 2.0، تم تضمين البرنامج الإضافي Capstone أيضًا، مما يسمح بالوصول إلى عدد من البنيات، بما في ذلك x86 وARM وMIPS وPowerPC وSPARC وما إلى ذلك (يتم تمكين دعم البنية تدريجيًا بناءً على اختبار المستخدم).
يمكنك القراءة عن المكونات الإضافية التي يتم شحنها مع ScratchABit في الملف التمهيدي الخاص plugins/cpu/
dir.
س: المصحح؟
ج: إن ScratchABit مخصص للتحليل الثابت والدعم السهل لبنيات وحدة المعالجة المركزية الجديدة (فقط قم ببرمجة مكون إضافي جديد لوحدة المعالجة المركزية في Python - يمكنك الحصول على النتائج الأولية في غضون ساعات قليلة). لم يتم تصميم التحليل الديناميكي ليكون ميزة أساسية ولا توجد خطط فورية لتنفيذه. بقع هي موضع ترحيب بالرغم من ذلك.
س: فك التشفير؟
ج: يوجد مشروع ذو صلة يسمى ScratchABlock للتحليل العميق للبرامج وتحويلها وتفكيكها. من المتوقع أنه مع نضوج ScratchABlock، ستكون بعض وظائفه متاحة داخل ScratchABit (ربما عبر المكونات الإضافية).
س: أنا لا أستخدم نظام Linux، كيف يمكنني تشغيل ScratchABit؟
ج: قم بتثبيت Linux في المحاكي/VM على نظامك وابتهج.
س: لقطة شاشة إلزامية؟
ج: بالتأكيد: