
إضافة HashDB API للبحث عن التجزئات في IDA Pro
إضافة للبحث عن تجزئات السلاسل النصية للبرامج الضارة لـ IDA Pro. تتصل هذه الإضافة بخدمة بحث التجزئات (HashDB) التابعة لـ OALABS خدمة بحث HashDB.
قاعدة بيانات خوارزميات التجزئة مفتوحة المصدر، ويمكن إضافة خوارزميات جديدة عبر GitHub هنا. طلبات السحب تكون آلية في الغالب، وطالما اجتازت اختباراتنا الآلية، ستصبح الخوارزمية الجديدة قابلة للاستخدام على HashDB في غضون دقائق.
يمكن استخدام HashDB للبحث عن السلاسل النصية التي تم تجزئتها في البرامج الضارة عن طريق النقر بزر الماوس الأيمن على الثابت التجزئي في عرض التفكيك (disassembly) لـ IDA وتشغيل أداة HashDB Lookup.
قبل أن تتمكن الإضافة من البحث عن التجزئات، يجب تهيئة إعدادات HashDB. يمكن فتح نافذة الإعدادات من قائمة الإضافات Edit->Plugins->HashDB.
انقر Refresh Algorithms لجلب قائمة بخوارزميات التجزئة المدعومة من واجهة HashDB API، ثم اختر الخوارزمية المستخدمة في البرنامج الضار الذي تحلله.
يوجد أيضًا خيار لتمكين XOR مع كل قيمة تجزئة، حيث أن هذه تقنية شائعة يستخدمها مؤلفو البرامج الضارة لمزيد من إخفاء التجزئات.
رابط API الافتراضي لخدمة بحث HashDB هو https://hashdb.openanalysis.net/. إذا كنت تستخدم خادمًا داخليًا خاصًا بك، يمكن تغيير هذا الرابط للإشارة إلى خادمك.
عندما يتم تحديد تجزئة جديدة بواسطة HashDB، تتم إضافة التجزئة والسلسلة النصية المرتبطة بها إلى تعداد (enum) في IDA. يمكن بعد ذلك استخدام هذا التعداد لتحويل الثوابت التجزئية في IDA إلى اسم التعداد المقابل. اسم التعداد قابل للتكوين من الإعدادات في حال وجود تعارض مع تعداد موجود.
بمجرد تكوين إعدادات الإضافة، يمكنك النقر بزر الماوس الأيمن على أي ثابت في نافذة التفكيك (disassembly) أو الكود الزائف (Hex-Rays) لـ IDA والبحث عن الثابت كتجزئة. يوفر النقر باليمين أيضًا طريقة سريعة لتعيين قيمة XOR إذا لزم الأمر.
إذا كانت التجزئة جزءًا من وحدة (module)، فسيظهر مطالبة تسأل عما إذا كنت تريد استيراد جميع التجزئات من تلك الوحدة. هذه طريقة سريعة لجلب التجزئات بشكل جماعي. على سبيل المثال، إذا كانت إحدى التجزئات المحددة هي Sleep من وحدة kernel32، يمكن لـ HashDB بعد ذلك جلب جميع التصديرات المجزأة من kernel32.
بعد حل التجزئة (أو استيراد وحدة بشكل جماعي)، يمسح HashDB الدالة الحالية ويحول كل ثابت مطابق إلى اسم التعداد الخاص به — عبر المعاملات 0–2، مع احتياطي قناع 32 بت للقيم الموسعة بالإشارة. يتم تحديث عرض التفكيك و Hex-Rays تلقائيًا. الوحدات التي قمت باستيرادها بالفعل تُخزَّن مؤقتًا للجلسة، لذلك لن تتم مطالبتك بإعادة استيراد kernel32 (إلخ) في كل تجزئة جديدة.
يتضمن HashDB أيضًا بحثًا أساسيًا عن الخوارزميات يحاول تحديد خوارزمية التجزئة بناءً على قيمة تجزئة. سيعيد البحث جميع الخوارزميات التي تحتوي على قيمة التجزئة، ويقع على عاتق المحلل تحديد أي (إن وجد) خوارزمية صحيحة. لاستخدام هذه الوظيفة، انقر بزر الماوس الأيمن على الثابت التجزئي واختر HashDB Hunt Algorithm.
سيتم عرض جميع الخوارزميات التي تحتوي على هذه التجزئة في مربع اختيار. يمكن استخدام مربع الاختيار لتحديد الخوارزمية مباشرة لاستخدامها من قبل HashDB. إذا تم اختيار إلغاء (Cancel)، فلن يتم تحديد أي خوارزمية.
بدلاً من حل تجزئات API بشكل فردي (داخل الكود)، يقوم بعض مطوري البرامج الضارة بإنشاء كتلة من تجزئات الاستيراد في الذاكرة. يتم بعد ذلك حل هذه التجزئات جميعها ضمن دالة واحدة لإنشاء جدول عناوين استيراد ديناميكي يُشار إليه لاحقًا في الكود. في هذه السيناريوهات، يمكن استخدام وظيفة HashDB Scan IAT.
ببساطة حدد كتلة تجزئات الاستيراد، وانقر بزر الماوس الأيمن واختر HashDB Scan IAT. سيحاول HashDB حل كل نوع عدد صحيح فردي (DWORD/QWORD) في النطاق المحدد.
يتطلب HashDB وحدة requests الخاصة بـ Python. قم بتثبيتها من شل خارج IDA باستخدام الأمر pip install requests.
يمكنك بعد ذلك تثبيت الإضافة بإحدى طريقتين:
hashdb.py إلى مجلد plugins الخاص بـ IDA.تستهدف إضافة HashDB IDA 7.5+ (بما في ذلك IDA 9.0) مع Python 3 وهي غير متوافقة مع الإصدارات السابقة.