Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
libmempool — أدوات تحليل الكومة لـ mempool | Kitploit
أدوات/GitHubGitHub/nccgroup/libmempool
أمان الأنظمة المدمجةتحليل الذاكرة الجنائيالهندسة العكسيةمصممي الأخطاءتحليل الملفات الثنائيةتحليل البرامج الثابتة
GitHubnccgroup/libmempool

libmempool

أدوات تحليل الكومة لـ mempool

عرض المستودع
13715منذ 4 سنواتلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

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

libmempool

ملاحظة أولية: نوصي باستخدام هذه الأداة كجزء من asatools ولكن يمكن استخدامها أيضاً بشكل مستقل.

libmempool هي أداة تحليل مكتوبة بلغة python وتعمل مع GDB للمساعدة في تحليل بنى البيانات المتعلقة بـ mempool الموجودة داخل مختلف الأكوام (heaps) على أجهزة Cisco ASA. عادةً ما تكون هذه المعلومات مضمّنة داخل كتلة كومة (heap chunk)، أو تمثل امتداداً مخصصاً لبنية كومة شائعة أخرى مثل بنية mstate الخاصة بـ dlmalloc.

تستخدم Cisco مصطلح mempool لوصف مناطق من الذاكرة مخصصة لأغراض متعددة مثل التخصيصات العامة، DMA، وما إلى ذلك. تحتوي هذه المناطق عادةً على كومة خاصة بها، مثل dlmalloc. تتم عمليات التخصيص على هذه الـ mempools عادةً باستخدام أغلفة (wrappers) حول مُخصِّص الكومة الأساسي، وتحقن هذه الأغلفة بيانات وصفية خاصة بـ mempool في التخصيصات الناتجة. نشير إلى هذه البيانات الوصفية باسم ترويسة mempool أو mh اختصاراً. وبالمثل، نشير عادةً إلى mempool باسم mp. كما أن استخدام mh لوصف ترويسة mempool يتوافق أيضاً مع سلاسل نصية متعددة موجودة في ملفات Cisco ASA lina الثنائية.

على الرغم من أن libmempool يمكن استخدامها كأداة مستقلة لتحليل بعض الأمور المتعلقة بترويسات mempool وبنى البيانات، فإن قيمتها الأعظم تكمن في استخدامها كدالة استرجاع (callback) من مكتبات أخرى مثل libdlmalloc أو libptmalloc.

تجدر الإشارة إلى أن جوانب معينة من الـ mempool، مثل الصناديق (bins) المستخدمة لتتبع الكتل قيد الاستخدام، مضمّنة داخل بنية mstate الخاصة بـ dlmalloc 2.8.x وتتبع نفس أحجام الصناديق. هذا يعني أنه بشكل شبه مؤكد قد تحتاج إلى استكشاف بنية mstate التي تحتوي على بيانات الـ mempool على الأقل باستخدام libdlmalloc.

الإصدارات المدعومة

تم اختبار libmempool مع إصدارات Cisco ASA 32-bit / 64-bit (سلسلتا ASA5500-X و GNS3) التي تستخدم dlmalloc2.8 أو مُخصِّص glibc المبني على ptmalloc2. تم اختبارها على العديد من إصدارات ASA، بما في ذلك فروع متعددة من 8.x.y و 9.x.y. ومع ذلك، فمن الممكن تماماً أن تتعطل مع بعض الإصدارات.

التثبيت

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

للاستيراد إلى GDB، يتطلب البرنامج النصي فقط GDB مع دعم python. على الرغم من أن معظم إصدارات GDB الحديثة انتقلت نحو python 3، إلا أن بعضها لا يزال يتوقع 2.7. تم اختبار البرنامج النصي على كليهما، لكن التطوير والاختبار الأساسي يتم باستخدام python 3.

(gdb) source libmempool_gdb.py

نفصل معظم المنطق المتعلق بـ gdb خارج libmempool.py إلى libmempool_gdb.py فقط لاختبار تجريد الأمور وحتى تتمكن من استخدام libmempool.py بسهولة خارج GDB. من المرجح أن يتغير هذا في المستقبل، حيث سنرغب في النهاية في تنفيذ تجريدات محرك تصحيح أخطاء مشابهة لتلك المستخدمة في أدوات تحليل الكومة الأخرى مثل libheap و shadow.

الاستخدام

على الرغم من أن الكثير من قيمة libmempool تأتي من دالة الاسترجاع mpcallback التي توفرها، إلا أن هناك عدداً من أوامر GDB المدمجة التي يمكننا الاطلاع عليها.

(gdb) mphelp 
[libmempool] mempool commands for gdb
[libmempool] mpheader -v -x <addr>           : show chunk contents (-v for verbose, -x for data dump)
[libmempool] mpbinwalk [-v] [-p <addr>] <sz> : walk an mpbin and operate on each chunk in a bin
[libmempool] mpbin <addr>                    : determine to which bin an mp_header is associated to
[libmempool] mpmstate <addr>                 : display and cache a mempool mstate address
[libmempool] mphelp

بافتراض أننا نعرف عنوان ترويسة mempool ما، يمكننا تحليل بياناتها. لاحظ أن هذا يجب أن يكون عنوان ترويسة mempool نفسها، وليس عنوان البيانات الوصفية للكتلة الخاصة بالمُخصِّص الأساسي. لذا، يمكننا تفريغ المحتويات كما يلي:

(gdb) mpheader 0x7fffbc1c1ca0
struct mp_header @ 0x7fffbc1c1ca0 {
mh_magic      = 0xa11c0123
mh_len        = 0x3
mh_refcount   = 0x10000
mh_unused     = 0x0
mh_fd_link    = 0x7fffbc1c19e0 (OK)
mh_bk_link    = 0x7ffff7ff7540 (-)
alloc_pc      = 0x55555849e260 (-)
free_pc       = 0x0 (-)

يمكننا أيضاً تفريغ المحتويات السداسية عشر للكتلة باستخدام -x.

(gdb) mpheader -x 0x7fffbc1c1ca0 
struct mp_header @ 0x7fffbc1c1ca0 {
mh_magic      = 0xa11c0123
mh_len        = 0x3
mh_refcount   = 0x10000
mh_unused     = 0x0
mh_fd_link    = 0x7fffbc1c19e0 (OK)
mh_bk_link    = 0x7ffff7ff7540 (-)
alloc_pc      = 0x55555849e260 (-)
free_pc       = 0x0 (-)
0x3 bytes of chunk data:
0x7fffbc1c1cd0:	0x55	0x04	0x03

تمتلك الـ Mempools مفهوم الصناديق (bins)، وهي قوائم مرتبطة بشكل مزدوج بنفس أحجام صناديق dlmalloc، ولكنها تُستخدم لتتبع الكتل قيد الاستخدام (in-use) بدلاً من الكتل الحرة (free). يتم ذلك لتسجيل استخدام الذاكرة على أجهزة Cisco. غالباً ما قد تجد كتلة تحتوي على ترويسة mempool، لكنك لا تعرف بعد أين توجد بنية mstate في الكومة. للحصول على اتجاهاتك، يمكنك استخدام أمر mpbin، الذي سيعطيك عنوان صندوق mempool الذي توجد فيه الكتلة قيد الاستخدام حالياً. على سبيل المثال:

(gdb) mpbin 0x7fffbc1c1ca0 
[libmempool] Found bin start at 0x7ffff7ff7540
[libmempool] Cached new mp_mstate @ 0x7ffff7ff73c0
[libmempool] mp_smallbin[08] - sz: 0x00000040 cnt: 0x00d3, mh_fd_link: 0x7fffbc1c1ca0

لم يكتفِ هذا الأمر بالعثور على بداية جزء mempool من بنية mstate فحسب، بل قام أيضاً بتخزينها مؤقتاً، ويعرض الصندوق المحدد الذي توجد فيه الكتلة. يمكننا اختيارياً استخدام أمر mpbinwalk لسرد جميع الكتل 0xd3 من هذا الصندوق، أو فقط حتى عدد معين:

(gdb) mpbinwalk 0x40
[libmempool] mp_header @ 0x7ffff7ff7540 - mh_len: 0x00000000, alloc_pc: 0x00000000 [BIN HEAD]
[libmempool] mp_header @ 0x7fffbc1c1ca0 - mh_len: 0x00000003, alloc_pc: 0x55555849e260
[libmempool] mp_header @ 0x7fffbc1c19e0 - mh_len: 0x00000003, alloc_pc: 0x55555849e260
[libmempool] mp_header @ 0x7fffbc1c1750 - mh_len: 0x00000003, alloc_pc: 0x55555849e260
[libmempool] mp_header @ 0x7fffbc1bffa0 - mh_len: 0x00000003, alloc_pc: 0x55555849e260
[libmempool] mp_header @ 0x7fffbc1bff60 - mh_len: 0x00000003, alloc_pc: 0x5555584a1288
[libmempool] mp_header @ 0x7fffbc1c0050 - mh_len: 0x00000003, alloc_pc: 0x55555849e260
[...]

الآن إذا أردنا تفريغ جزء mempool بالكامل من بنية mstate (أي جميع الصناديق والإحصائيات ذات الصلة)، يمكننا استخدام أمر mpmstate:

تنزيل الأداة