Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
FindFunc — إضافة لـ IDA Pro لتصفية الدوال بناءً على أنماط التجميع، تسلسلات البايت، مراجع السلاسل/الأسماء، وقيود الحجم، مع بحث قائم على القواعد ونسخ ثنائي متقدم. | Kitploit
أدوات/GitHubGitHub/felixber/findfunc
التحليل الثابتتحليل الكودالهندسة العكسيةمصممي الأخطاءتحليل الملفات الثنائية
GitHubfelixber/findfunc

FindFunc

إضافة لـ IDA Pro لتصفية الدوال بناءً على أنماط التجميع، تسلسلات البايت، مراجع السلاسل/الأسماء، وقيود الحجم، مع بحث قائم على القواعد ونسخ ثنائي متقدم.

عرض المستودع
36236منذ 9 أشهرتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

FindFunc: التصفية/العثور المتقدمة على الدوال في IDA Pro

FindFunc هي إضافة لـ IDA Pro تتيح العثور على دوال الكود التي تحتوي على نمط معين من لغة التجميع أو البايت، أو تشير إلى اسم أو سلسلة نصية معينة، أو تلتزم بقيود متنوعة أخرى.

حصلت FindFunc على المركز الثالث في مسابقة 2022 HexRays IDA Pro Plugin Contest!

ffmain

التصفية باستخدام القواعد

الوظيفة الرئيسية لـ FindFunc هي السماح للمستخدم بتحديد مجموعة من "القواعد" أو القيود التي يجب أن تستوفيها دالة الكود في IDA Pro. ثم ستقوم FF بالعثور على جميع الدوال التي تستوفي جميع القواعد (حاليًا جميع القواعد في حالة "و" منطقية). استثناء: يمكن "عكس" القواعد لتكون مطابقات سلبية. وبالتالي تلتزم هذه القواعد بـ "و ليس".

ستقوم FF بجدولة القواعد بترتيب ذكي لتقليل وقت المعالجة. نظرة عامة على الميزات:

  • حاليًا 6 قواعد متاحة، انظر أدناه
  • تدعم قطع الدوال (function chunks)
  • جدولة ذكية للقواعد لتحسين الأداء
  • حفظ/تحميل القواعد من/إلى ملف بتنسيق ASCII بسيط
  • عدة علامات تبويب مستقلة للتجريب
  • نسخ القواعد بين علامات التبويب عبر الحافظة (نفس تنسيق الملف)
  • حفظ الجلسة بأكملها (جميع علامات التبويب) إلى ملف
  • نسخ متقدم لبايتات التعليمات (الكل، الرموز التشغيلية فقط، الكل باستثناء القيم المباشرة، ...)
  • استنساخ علامات التبويب لإجراء تجارب سريعة مع تحسين النتائج
  • مطابقة الكود تحترم بادئة حجم العنوان (Addressing-Size-Prefix) و بادئة حجم المعامل (Operand-Size-Prefix)

زر "Find Functions" يمسح النتائج الحالية ويبدأ بحثًا جديدًا، "Refine Results" يأخذ في الاعتبار نتائج البحث السابقة فقط.

النسخ الثنائي المتقدم

ميزة ثانوية لـ FF هي خيار نسخ التمثيل الثنائي للتعليمات بالخيارات التالية:

  • نسخ الكل -> نسخ جميع البايتات إلى الحافظة
  • نسخ بدون قيم مباشرة -> إخفاء (AA ?? BB) أي قيم مباشرة في بايتات التعليمات
  • الرمز التشغيلي فقط -> سيتم إخفاء كل شيء باستثناء الرمز (الرموز) التشغيلية الفعلية للتعليمات (والبادئات)
  • ...

انظر قسم "النسخ المتقدم" أدناه للتفاصيل. هذه الميزة تكمل قاعدة نمط البايت بشكل رائع!

البناء والتثبيت

FindFunc هي إضافة Python لـ IDA Pro بدون تبعيات حزم خارجية. يمكن تثبيتها عن طريق تنزيل المستودع ونسخ ملف 'findfuncmain.py' ومجلد 'findfunc' إلى دليل الإضافات الخاص بـ IDA Pro. بالنسبة لـ IDA 9.0+ يمكن أيضًا استنساخ المستودع مباشرة في دليل الإضافات. على أي حال، لا يلزم البناء.

المتطلبات: IDA Pro 8.x (8.3+) مع بيئة python3. FindFunc مصممة لمعمارية x86/x64 فقط. تم اختبارها مع IDA 8.3 - 9.2، python 3.11 على Windows 10 + 11

القواعد المتاحة

حاليًا ست قواعد متاحة. تم ترتيبها هنا من الأثقل إلى الأخف من حيث تأثير الأداء. مع قواعد البيانات الكبيرة، من الجيد أولاً تقليل عدد الدوال المرشحة باستخدام قاعدة رخيصة، قبل القيام بمطابقة ثقيلة عبر قواعد الكود مثلاً. ستقوم FF بجدولة القواعد تلقائيًا بطريقة ذكية.

نمط الكود

قاعدة لتصفية الدوال بناءً على احتوائها على مقتطف كود تجميع معين. هذا ليس بحثًا نصيًا عن التمثيل النصي لـ IDA، بل يقوم بمطابقة متقدمة للتعليمات الأساسية. يمكن أن يحتوي المقتطف على عدة تعليمات متتالية، كل تعليمات في سطر. مدعومة قطع الدوال. يدعم مطابقة أحرف البدل الخاصة، بالإضافة إلى لغة التجميع الحرفية:

  • "pass" -> يطابق أي تعليمة مع أي معاملات
  • "mov* any,any" -> يطابق التعليمات ذات التذكير "mov*" (على سبيل المثال mov, movzx, ...) وأي وسيطين.
  • "mov eax, r32" -> يطابق أي تعليمة ذات تذكير "mov"، أول معامل سجل eax وثاني معامل أي سجل 32 بت.
    • بالمثل: r لأي سجل، r8/r16/r32/r64 لسجل بعرض معين، "imm" لأي قيمة فورية
  • "mov r64, imm" -> يطابق أي نقل لثابت إلى سجل 64 بت
  • "any r64,r64" -> يطابق أي عملية بين سجلين 64 بت
  • mov -> يطابق أي تعليمة من تذكير mov

أمثلة أخرى:

root@kitploit:~
mov r64, [r32 * 8 + 0x100]
mov r, [r * 8 - 0x100]
mov r64, [r32 * 8 + imm]
pass
mov r, word [eax + r32 * 8 - 0x100]
any r64, r64
push imm
push any

ملاحظات هامة: كن حذرًا عند نسخ لغة التجميع من IDA. يخلط IDA أسماء المتغيرات المحلية ومعلومات أخرى في التعليمات مما يؤدي إلى فشل المطابقة. أيضًا، التسميات (labels) غير مدعومة ("call sub_123456").

لاحظ أن أنماط الكود هي أغلى قاعدة، وإذا كانت قواعد الكود فقط موجودة، فلن يكون أمام FF خيار سوى تفكيك قاعدة البيانات بأكملها. قد يستغرق هذا عدة دقائق للملفات الثنائية الكبيرة جدًا. انظر ملاحظات حول الأداء أدناه.

القيمة الفورية (ثابت)

يجب أن تحتوي الدالة على القيمة الفورية المحددة مرة واحدة على الأقل في أي موضع. القيمة الفورية هي قيمة ثابتة في التمثيل الثنائي للتعليمة. أمثلة على التعليمات المطابقة للقيمة الفورية 0x100:

root@kitploit:~
mov eax, 0x100
mov eax, [0x100]
and al, [eax + ebx*8 + 0x100]
push 0x100

يمكن لصق القيم الفورية مباشرة من الحافظة في قائمة القواعد. ملاحظة: يقوم IDA بمطابقة شاملة لأي حجم وأي موضع للقيمة الفورية. إذا كنت تعلم أنها ذات عرض محدد 4 أو 8 بايت، يمكن أن يكون نمط البايت أسرع (لكنه قد يعطي نتائج إيجابية خاطئة).

نمط البايت

يجب أن تحتوي الدالة على نمط البايت المحدد مرة واحدة على الأقل. النمط بنفس تنسيق البحث الثنائي لـ IDA، وبالتالي يدعم أحرف البدل - التطابق المثالي لميزة النسخ المتقدم!

أمثلة:

root@kitploit:~
11 22 33 44 aa bb cc
11 22 33 ?? ?? bb cc -> ?? يمكن أن يكون أي بايت

يمكن لصق أنماط البايت مباشرة من الحافظة في قائمة القواعد. ملاحظة: مطابقة الأنماط سريعة جدًا وهي مرشح جيد لتقليل المطابقات بسرعة!

مرجع سلسلة نصية

يجب أن تشير الدالة إلى السلسلة النصية المحددة مرة واحدة على الأقل. تتم المطابقة وفقًا لوحدة 'fnmatch' في بايثون، وبالتالي تدعم المطابقة المشابهة لأحرف البدل. تتم المطابقة مع تجاهل حالة الأحرف. يتم النظر في السلاسل النصية بالتنسيقات التالية: [idaapi.STRTYPE_C, idaapi.STRTYPE_C_16] (يمكن تغيير ذلك في فئة Config).

أمثلة:

  • "TestString" -> يجب أن تشير الدالة إلى السلسلة النصية بالضبط (تجاهل حالة الأحرف) مرة واحدة على الأقل
  • "TestStr*" -> يجب أن تشير الدالة إلى سلسلة نصية تبدأ بـ 'TestStr (مثل TestString, TestStrong) مرة واحدة على الأقل (تجاهل حالة الأحرف)

ملاحظة: مطابقة السلاسل النصية سريعة وهي خيار جيد لتقليل المرشحين بسرعة!

مرجع اسم

يجب أن تشير الدالة إلى الاسم/التسمية المحددة مرة واحدة على الأقل. تتم المطابقة وفقًا لوحدة 'fnmatch' في بايثون، وبالتالي تدعم المطابقة المشابهة لأحرف البدل. تتم المطابقة مع تجاهل حالة الأحرف.

أمثلة:

  • "memset" -> يجب أن تشير الدالة إلى اسم "memset" مرة واحدة على الأقل
  • "mem*" -> يجب أن تشير الدالة إلى اسم يبدأ بـ "mem" (memset, memcpy, memcmp) مرة واحدة على الأقل

ملاحظة: مطابقة الأسماء سريعة جدًا وهي مثالية لتقليل المرشحين بسرعة!

حجم الدالة

يجب أن يكون حجم الدالة ضمن الحد المحدد: "min <= حجم الدالة <= max". يتم إدخال البيانات كسلسلة نصية بالشكل "min,max". يتضمن حجم الدالة جميع أجزائها (chunks).

ملاحظة: مطابقة حجم الدالة سريعة جدًا وهي مثالية لتقليل المرشحين بسرعة!

اختصارات لوحة المفاتيح وواجهة المستخدم الرسومية

لسهولة الاستخدام، يمكن استخدام FF عبر اختصارات لوحة المفاتيح التالية:

  • Ctrl+Alt+F -> تشغيل/إظهار TabWidget (واجهة المستخدم الرئيسية)
    • أو View->FindFunc
  • Ctrl+F -> بدء البحث بالقواعد الممكنة حاليًا
  • Ctrl+R -> تحسين النتائج الحالية بالقواعد الممكنة حاليًا
  • القواعد
    • Ctrl+C -> نسخ القواعد المحددة إلى الحافظة
    • Ctrl+V -> لصق القواعد من الحافظة في علامة التبويب الحالية (إضافة)
    • Ctrl+S -> حفظ القواعد المحددة إلى ملف
    • Ctrl+L -> تحميل القواعد من ملف (إضافة)
    • Ctrl+A -> تحديد جميع القواعد
    • Del -> حذف القواعد المحددة
  • حفظ الجلسة
    • Ctrl+Shift+S -> حفظ الجلسة إلى ملف
    • Ctrl+Shift+L -> تحميل الجلسة من ملف

استخدامات إضافية لواجهة المستخدم

  • النقر بزر الماوس الأيمن على علامة التبويب: خيار استنساخ علامة التبويب
  • يمكن تعديل القواعد بالنقر المزدوج على عمود البيانات
  • يمكن عكس القواعد (مطابقة سلبية) بالنقر المزدوج على عمود عكس المطابقة
  • يمكن تمكين/تعطيل القواعد بالنقر المزدوج على عمود التمكين
  • النقر بعجلة الماوس على أي خلية في القواعد أو النتائج ينسخ الخلية إلى الحافظة
  • يمكن لصق أنماط البايت والقيم الفورية مباشرة من الحافظة إلى جدول القواعد
  • يمكن إعادة تسمية علامات التبويب بالنقر المزدوج عليها
  • الفرز مدعوم لكل من قائمة القواعد وقائمة النتائج
  • النقر المزدوج على عنصر النتيجة للانتقال إليه في IDA
    • اسم الدالة: الانتقال إلى بداية الدالة
    • أي عمود آخر: الانتقال إلى مطابقة آخر قاعدة تمت مطابقتها
  • خانة اختيار Profile: إخراج معلومات التوصيف للبحث
  • خانة اختيار Debug: إخراج مخرجات تصحيح مفصلة لمطابقة قواعد الكود - استخدمها فقط إذا وصلت دوال قليلة إلى قاعدة فحص الكود، وإلا قد تستغرق وقتًا طويلاً!

النسخ الثنائي المتقدم

كثيرًا ما نرغب في البحث عن أنماط ثنائية من لغة التجميع، ولكن بدون عناوين وقيم ثابتة (قيم فورية)، أو حتى فقط الرموز التشغيلية الفعلية للتعليمة. يجعل FindFunc هذا سهلاً عن طريق إضافة ثلاثة خيارات نسخ إلى القائمة المنبثقة لفك التجميع:

نسخ جميع البايتات

ينسخ جميع بايتات التعليمات كسلسلة سداسية عشرية إلى الحافظة، لاستخدامها في قاعدة نمط بايت (أو البحث الثنائي لـ IDA).

root@kitploit:~
B8 44332211      mov eax,11223344
68 00000001      push 1000000
66:894424 70     mov word ptr ss:[esp+70],ax

سيتم نسخها كـ

root@kitploit:~
b8 44 33 22 11 68 00 00 00 01 66 89 44 24 70

نسخ البايتات غير الفورية فقط

ينسخ بايتات التعليمات للتعليمة المحددة، مع إخفاء أي قيم فورية. مثال:

root@kitploit:~
B8 44332211      mov eax,11223344
68 00000001      push 1000000
66:894424 70     mov word ptr ss:[esp+70],ax

سيتم نسخها كـ

root@kitploit:~
b8 ?? ?? ?? ?? 68 ?? ?? ?? ?? 66 89 44 24 ??

نسخ الرموز التشغيلية فقط

ينسخ جميع بايتات التعليمات كسلسلة سداسية عشرية إلى الحافظة، مع إخفاء أي بايتات ليست الرمز التشغيلي الفعلي (بما في ذلك sib, modrm، ولكن الاحتفاظ بالبادئات القديمة).

root@kitploit:~
B8 44332211      mov eax,11223344
68 00000001      push 1000000
66:894424 70     mov word ptr ss:[esp+70],ax

سيتم نسخها كـ

root@kitploit:~
b8 ?? ?? ?? ?? 68 ?? ?? ?? ?? 66 89 ?? ?? ??

نسخ الرموز التشغيلية + القيم الفورية

مزيج يحتفظ بالرمز التشغيلي والقيم الفورية، ولكنه يخفي مثلاً mod r/m. لاحظ أن هذا يحتفظ بالرموز التشغيلية حتى لو كانت تلزم سجلاً معينًا، مثلاً

root@kitploit:~
B8 44332211      mov eax,11223344

سيحتفظ بالرمز التشغيلي B8.

ملاحظة: هذا "أفضل جهد" باستخدام API الخاص بـ IDA، وبالتالي قد تكون هناك حالات قليلة يعمل فيها جزئيًا فقط. للحصول على حل صحيح 100%، سنحتاج إلى شحنة مكتبة تفكيك x86 مخصصة.

يمكن تحقيق نتائج مماثلة مع قواعد نمط الكود، ولكن هذا قد يكون أسرع، سواء لتفاعل المستخدم أو البحث الفعلي.

نسخ فك التجميع

ينسخ فك التجميع المحدد إلى الحافظة، كما يظهر في IDA.

الأداء

كلمة مختصرة عن الأداء:

  1. الاسم، السلسلة النصية، حجم الدالة مجاني تقريبًا في جميع الحالات
  2. نمط البايت مجاني تقريبًا لأنماط طولها > 2
  3. القيمة الفورية صعبة: يمكننا استخدام بحث idaapi، أو يمكننا تفكيك قاعدة البيانات بأكملها والبحث بأنفسنا - قد نضطر إلى فعل هذا على أي حال إذا كنا نبحث عن أنماط كود. ولكن: فحص أنماط الكود في الواقع أرخص بكثير من فحص قيمة فورية. بحث api عن جميع المطابقات مكلف نسبيًا - حوالي 1/8 من تكلفة تفكيك قاعدة البيانات بأكملها. لذلك: إذا قمنا بتقليل المطابقات بقواعد رخيصة أولاً، فإننا نستفيد كثيرًا من تفكيك الدوال المتبقية والبحث عن القيمة الفورية بأنفسنا، خاصة إذا كانت قاعدة كود موجودة على أي حال. ومع ذلك: إذا لم تكن هناك خيارات رخيصة واضطررنا إلى تفكيك أجزاء كبيرة من قاعدة البيانات على أي حال (بسبب وجود قواعد نمط كود)، فإن استخدام قاعدة قيمة فورية واحدة كمرشح مسبق يمكن أن يؤتي ثماره بشكل كبير. البحث عن قيمة فورية واحدة عبر api يعادل تقريبًا 1/8 من البحث عن أي عدد من قواعد نمط الكود - على الرغم من أن هذا يعتمد أيضًا على العديد من العوامل المختلفة...
  4. أنماط الكود هي الأغلى بكثير، ومع ذلك فحص نمط واحد مقابل فحص العديد من الأنماط متشابه جدًا.

قائمة المهام (غير مرتبة):

  • jcc pseudo-mnemonic
  • السماح بمواقع مسماة في قواعد الكود ('call memset')
  • إضافة قاعدة مراجع داخل/خارج
  • تراجع/إعادة
  • شريط التقدم
  • النقر الأوسط لإغلاق علامات التبويب
  • قائمة علامات التبويب: إغلاق الكل ما عدا هذه
  • خيار 'تجاهل جميع المعاملات التالية'
  • قاعدة للبارامترات لاستدعاءات API داخل الدالة
  • قاعدة لمتطلبات الدالة الأم/موقع الاستدعاء/الدالة التابعة
  • قاعدة لبارامترات الدالة
  • قاعدة تعبير عادي
  • سلسلة نصية/اسم: خيار حالة الأحرف
  • تحويل القواعد الفورية تلقائيًا إلى نمط بايت إذا كان ذلك مناسبًا؟
  • إعدادات: حساسية حالة الأحرف، أنواع السلاسل النصية، النطاق، ...
  • قواعد Hexray؟
  • تركيبة OR للقواعد
  • تحويل الكود إلى بايثون ;)
  • موازاة
  • إنشاء تلقائي لقواعد لتحديد دالة؟
تنزيل الأداة