
مفكك تفاعلي سهل إعادة التوجيه وقابل للاختراق مع واجهة برمجة تطبيقات مكونات إضافية متوافقة مع IDAPython
ScratchABit هو مفكك تفاعلي تزايدي مع قدرات تحليل تدفق البيانات/التحكم. ScratchABit مكرس لجهود مجتمع الهندسة العكسية مفتوحة المصدر (الهندسة العكسية لإنتاج برامج تشغيل/برامج ثابتة مفتوحة المصدر للأجهزة غير المدعومة بشكل صحيح من قبل البائعين، من أجل التوافق بين الأجهزة والبرامج، ومن أجل أبحاث الأمان).
يدعم ScratchABit واجهة برمجة تطبيقات IDAPython المعروفة في المجتمع لكتابة وحدات التفكيك/الإضافة.
ScratchABit عمل قيد التطوير، يتم إضافة الميزات حسب الحاجة، المساهمات مرحب بها.
تم إصدار ScratchABit بموجب شروط رخصة GNU العمومية العامة الإصدار 3 (GPLv3).
يجب ألا يكون مكتوبًا بلغة مبهمة. تشمل هذه اللغات تلك التي تكون منخفضة المستوى جدًا، والتي تسمح بالوصول إلى متغيرات غير مهيأة، والتي لا تفرق بين المتغيرات والدوال/الإجراءات، والتي تبدأ فهارس المصفوفات من أرقام عشوائية، إلخ، إلخ. ScratchABit مكتوب بلغة بايثون (النسخة الحديثة، Python3) من أجل متعتك وسلامتك العقلية.
يجب أن يسمح إطار واجهة المستخدم بتفاعل المستخدم بالمستوى المطلوب، ولا يضيف تبعيات، أو تضخمًا، أو مشكلات، أو عدم توافق بين إصدارات الإطار. يستخدم ScratchABit حاليًا واجهة مستخدم نصية بسيطة بملء الشاشة، باستخدام تسلسلات هروب طرفية ANSI/VT100 (نعم، حتى مكتبة curses اعتُبرت تبعية كبيرة جدًا لفرضها على المستخدمين).
يجب الاستفادة من تنسيقات نصية سهلة الاستخدام لتخزين 'قاعدة البيانات'، لتسهيل إعادة الاستخدام وكتابة الأدوات، والتخزين في أنظمة التحكم في الإصدارات.
لاستخدام ScratchABit، تحتاج إلى تثبيت Python3 (تم اختباره مع Python 3.3 حتى 3.7) ومحطة طرفية VT100 (كحد أدنى) أو XTerm (موصى به) أو محاكي طرفية (أي نظام Unix يجب أن يكون متوافقًا، مثل Linux/BSD/etc.، انظر الأسئلة الشائعة أدناه للمزيد).
استنساخ الكود باستخدام:
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، وملف example-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. العديد من الملحقات متاحة، كتابة ملحق جديد سهل. للسماح للمستخدمين بتجربة ScratchABit، يتم تضمين ملحق معالج x86 بسيط في التوزيعة، باستخدام مفكك Pymsasid في الخلفية.
من الإصدار 2.0، تم تضمين ملحق Capstone أيضًا، مما يسمح بالوصول إلى عدد من البنى، بما في ذلك x86، ARM، MIPS، PowerPC، SPARC، إلخ. (دعم البنى يتم تمكينه تدريجيًا بناءً على اختبار المستخدم).
يمكنك القراءة عن الملحقات المشحونة مع ScratchABit في ملف README لدليل plugins/cpu/.
س: مصحح الأخطاء؟
ج: ScratchABit مخصص للتحليل الثابت والدعم السهل لبنى وحدة المعالجة المركزية الجديدة (فقط اكتب ملحق CPU جديد في بايثون - يمكنك الحصول على نتائج أولية في بضع ساعات). لم يتم تصور التحليل الديناميكي كميزة أساسية ولا توجد خطط فورية لتنفيذه. لكن التصحيحات مرحب بها.
س: مفكك التجميع؟
ج: هناك مشروع ذو صلة، يُسمى ScratchABlock لتحليل البرامج العميق والتحويل وفك التجميع. من المتوقع أنه مع نضوج ScratchABlock، ستكون بعض وظائفه متاحة داخل ScratchABit (ربما عبر الملحقات).
س: أنا لست على Linux، كيف يمكنني تشغيل ScratchABit؟
ج: قم بتثبيت Linux في محاكي/آلة افتراضية على نظامك وابتهج.
س: لقطة شاشة إلزامية؟
ج: بالتأكيد:
