
تحديد ومطابقة أنماط الرسوم البيانية المعرفة من قبل المستخدم مقابل الرسوم البيانية لتدفق التحكم الثنائية باستخدام مفكك يعتمد على Capstone، مع دعم واجهة سطر الأوامر وروابط بايثون وإضافة IDA.
يأخذ grap الأنماط والملفات الثنائية، ويستخدم مفككًا يعتمد على Casptone للحصول على رسوم بيانية لتدفق التحكم من الملفات الثنائية، ثم يطابق الأنماط بها.
الأنماط هي رسوم بيانية يحددها المستخدم مع شروط تعليمات ("opcode is xor and arg1 is eax") وشروط تكرار (3 تعليمات متطابقة، كتل أساسية...).
يتوفر grap كأداة مستقلة مع مفكك وروابط بايثون، وكإضافة IDA تستفيد من التفكيك الذي يقوم به IDA والمهندس العكسي.
الدعم:




يصف هذا المستند كيفية بناء وتثبيت grap على توزيعة لينكس.
يمكنك أيضًا قراءة:
بالإضافة إلى المترجمات (build-essential)، يجب تثبيت التبعيات التالية:
وبالتالي على Ubuntu / Debian، يجب أن يعمل هذا:
sudo apt-get install build-essential cmake bison flex libboost-regex-dev libboost-system-dev libboost-filesystem-dev libseccomp-dev python3-dev python3-pefile python3-pyelftools python3-capstone swig
يرجى ملاحظة أن هذه تم اختبارها لأحدث إصدار Ubuntu LTS (18.04.3). قد تختلف الحزم حسب توزيعتك.
الأوامر التالية ستبني وتثبت المشروع:
mkdir build; cd build/ حيث ننصحك ببناء المشروع في دليل مخصصcmake ../src/; make سيبني باستخدام cmake و makesudo make install سيثبت grap في /usr/local/bin/قد يفشل SWIG في العثور على python3 إذا كان الإصدار الافتراضي لديك هو python2، ويمكن التغلب على ذلك بالتبديل إلى python3 كافتراضي. على سبيل المثال على Ubuntu:
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10
يمكن تشغيل الأداة باستخدام الأمر التالي:
$ grap [options] pattern test_paths
فيما يلي بعض الأمثلة على الخيارات المدعومة:
grap -h: يصف الخيارات المدعومةيمكن ترك grap يستنتج نمطًا من سلسلة. يتم دعم عدد قليل من الخيارات فقط ولكن هذا مفيد للنمذجة الأولية:
grap "opcode is xor and arg1 contains '['" (test.exe): يبحث عن xor مع كتابة في الذاكرةgrap -v "sub->xor->sub" (test.exe): -v سيخرج مسار النمط المستنتجاختر كيف يتم تفكيك الملفات الثنائية:
grap -od (pattern.grapp) samples/*: يفكك الملفات في مجلد samples/ بدون محاولة المطابقةgrap -f (pattern.grapp) (test.exe): يجبر إعادة تفكيك الثنائي، ثم يطابقه مع pattern.grappgrap --raw (pattern.grapp) (test.bin): تفكيك ملف خام (استخدم --raw-64 للملفات الثنائية 64 بت)تحكم في درجة تفصيل المخرجات:
grap -q -sa (pattern.grapp) (samples/*.grapcfg): يطابق الملفات المفككة، يعرض الملفات المطابقة وغير المطابقة، سطر واحد لكل ملفgrap -m (pattern.grapp) (test.grapcfg): يعرض جميع العقد المطابقةاختر أين تُكتب الملفات المفككة (.grapcfg)؛ طابق ملفات متعددة مقابل أنماط متعددة:
grap patterns/basic_block_loop.grapp -o ls.grapcfg /bin/ls: يفكك ls إلى ls.grapp ويبحث عن حلقات الكتلة الأساسيةgrap (pattern1.grapp) -p (pattern2.grapp) (test.exe): يطابق مقابل ملفات أنماط متعددةgrap -r -q patterns/ /bin/ -o /tmp/ : يفكك جميع الملفات من /bin/ إلى /tmp/ ويطابقها ضد جميع أنماط .grapp من patterns/ (الخيار المتكرر -r ينطبق على /bin/، وليس على patterns/)النمط التالي يكتشف حلقة فك تشفير تتكون من xor متبوع بـ sub موجودة في عينة Backspace:
digraph decryption_md5_4ee00c46da143ba70f7e6270960823be {
A [cond=true, repeat=3]
B [cond="opcode is xor and arg2 is 0x11"]
C [cond="opcode is sub and arg2 is 0x25"]
D [cond=true, repeat=3]
E [cond="opcode beginswith j and nchildren == 2"]
A -> B
B -> C
C -> D
D -> E
E -> A [childnumber=2]
}
لاحظ أن ملفات الأنماط يمكن أن تحتوي على رسوم بيانية متعددة.
يمكنك العثور على أمثلة أنماط إضافية في دليلين:
على عينات البرامج الضارة:
استخدام روابط بايثون:
ستجد المزيد من الوثائق في مجلد doc/:
تم توضيح بناء جملة أنماط ورسوم بيانية الاختبار في ملف grap_graphs.pdf ضمن قسم الإصدار.
grap مرخص تحت رخصة MIT. يمكن العثور على النص الكامل للرخصة في LICENSE.