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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
libtalloc — libtalloc هو سكربت Python للاستخدام مع GDB يمكن استخدامه لتحليل "المخصص التافه" (talloc) | Kitploit
أدوات/GitHubGitHub/nccgroup/libtalloc
تحليل الذاكرة الجنائيتحليل الثغرات الأمنيةالهندسة العكسيةمصممي الأخطاءتحليل الملفات الثنائية
GitHubnccgroup/libtalloc

libtalloc

libtalloc هو سكربت Python للاستخدام مع GDB يمكن استخدامه لتحليل "المخصص التافه" (talloc)

عرض المستودع
17528منذ 11 سنواتلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

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

libtalloc

libtalloc هو سكربت بايثون يُستخدم مع GDB ويمكن استخدامه لتحليل "المُخصِّص البسيط" (talloc). يمكن العثور على مقدمة حول talloc هنا:

https://talloc.samba.org/talloc/doc/html/index.html

استُلهم libtalloc من سكربتات gdb الأخرى المكتوبة بلغة بايثون لتحليل الأكوام مثل unmask_jemalloc و libheap. بعض الوظائف الأساسية مطابقة لهذه المشاريع.

https://github.com/cloudburst/libheap

https://github.com/argp/unmask_jemalloc

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

الاختبار

تم اختبار libtalloc على مجموعة متنوعة من إصدارات talloc 2.x ويدعم كشف الإصدار ديناميكيًا لمحاولة التغلب على الاختلافات البنيوية المختلفة بين الإصدارات. تم اختباره على أنظمة 32-bit و 64-bit، ولكن ليس بشكل شامل، لذا لا تتفاجأ إذا تعطل من وقت لآخر.

تم اختباره إلى حد ما على x86 و x64:

  • 2.0.7
  • 2.0.8
  • 2.1.0
  • 2.1.1

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

التثبيت

يتطلب السكربت فقط إصدارًا حديثًا نسبيًا من GDB مع دعم بايثون.

بعض توزيعات LTS، مثل Ubuntu 12.04، لا تزال تستخدم GDB مع بايثون 2.7، بينما تستخدم الإصدارات الأحدث مثل 14.04 بايثون 3.0. لقد حاولت جعل هذا السكربت يعمل مع كليهما، لذا تحتاج فقط إلى:

(gdb) source libtalloc.py

الاستخدام

معظم الوظائف مستوحاة من نهج unmask_jemalloc، حيث يتم توفير أمر GDB منفصل بدلاً من مجموعة معقدة من الخيارات.

يتوفر عدد من الطرق المصممة خصيصًا لمحاكاة دوال مكتبة talloc بلغة C، لمساعدة الأشخاص الذين يحاولون توسيع libtalloc إذا كانوا على دراية بالمكتبة بالفعل.

لعرض قائمة كاملة بالأوامر، يمكنك إصدار الأمر tchelp:

(gdb) tchelp
[libtalloc] talloc commands for gdb
[libtalloc] tcchunk -v -x <addr>  : show chunk contents (-v for verbose, -x for data dump)
[libtalloc] tcvalidate -a <addr>  : validate chunk (-a for whole heap)
[libtalloc] tcsearch <addr>       : search heap for hex value or address
[libtalloc] tcwalk <func>         : walk whole heap calling func on every chunk
[libtalloc] tcreport <addr>       : give talloc_report_full() info on memory context
[libtalloc] tcdump -s <addr>      : dump chunks linked to memory context (-s for sorted by addr)
[libtalloc] tcparents <addr>      : show all parents of chunk
[libtalloc] tcchildren <addr>     : show all children of chunk
[libtalloc] tcinfo                : show information known about heap
[libtalloc] tcprobe               : try to collect information about talloc version
[libtalloc] tchelp                : this help message

كشف الإصدار الديناميكي

أحد أهم الأوامر هو tcprobe. يجب تشغيله لمعرفة إصدار talloc المثبَّت فعليًا. يمكن أن تختلف تخطيطات البنية بشكل كبير بين الإصدارات المختلفة، لذا لكي تعمل معظم الدوال يجب معرفة الإصدار.

إذا عمل الأمر، فيجب أن يُخبرك بالإصدار المكتشف:

(gdb) tcprobe
Version: 2.1.1 
File: /usr/lib/libtalloc.so.2.1.1

معلومات وصفية

يهدف أمر tcinfo إلى عرض أكبر قدر ممكن من المعلومات المجمعة حول الكومة، مثل المعلومات الواردة من tcprobe، وبنية null_context إذا تم العثور عليها، والمزيد. حاليًا يعرض فقط الإصدار وما إذا كان null_context معينًا. null_context مطلوب لمعظم الدوال التي تجتاز التسلسل الهرمي الفعلي، ومن أجل العثور عليه، ستُحاول معظم الوظائف الأخرى، مثل tchunk وغيرها، العثور عليه تلقائيًا.

بعد تشغيل tcprobe ولكن قبل استخدام tchunk فعليًا:

(gdb) tcinfo [libtalloc] null_context not yet found yet [libtalloc] Version: 2.0.7 [libtalloc] File: /usr/lib/i386-linux-gnu/libtalloc.so.2.0.7

ثم بعد تحليل قطعة، كما يلي:

(gdb) tcchunk 0xb94a52b0 WARNING: 0xb94a52b0 not a talloc_chunk. Assuming ptr to chunk data 0xb94a5280 sz:0x0000003c, flags:...., name:struct tevent_context

يمكنك التأكد من أنه تم العثور عليه بعد ذلك باستخدام tcinfo.

(gdb) tcinfo [libtalloc] null_context: 0xb94a5028 [libtalloc] Version: 2.0.7 [libtalloc] File: /usr/lib/i386-linux-gnu/libtalloc.so.2.0.7

الآن بعد تعيين null_context، يمكنك تشغيل أوامر أخرى كانت ستشتكي عادةً من أنه غير معين، مثل أمر tcsearch.

تحليل القطع

يمكن أن يزودك tcchunk بملخص للقطعة، أو بمخرجات أكثر تفصيلاً لكل حقل، أو بمعلومات مفصلة للغاية حول كل قطعة محيطة.

ملاحظة: شيء مهم يجب ملاحظته حول tcchunk هو أنه يستخدم داخليًا طريقة tc_chunk()، التي تحاول تصحيح الأخطاء الواردة عند تمرير عنوان القطعة. تحديدًا إذا مررت عنوان بيانات القطعة نفسها، ولم يجد قيمة talloc السحرية المتوقعة، فسيبحث عن ترويسة قطعة شرعية في مكان أبكر قليلاً في الذاكرة. قد يسبب هذا مشكلة في السيناريوهات التالفة، لذا تأكد دائمًا من تمرير العنوان الصريح إلا إذا كنت تقوم بتحليل سطحي.

مخرجات الملخص:

(gdb) tcchunk 0x80a13c88
0x80a13c88 sz:0x00000020, flags:..p., name:struct netr_ServerPasswordSet

فيما يلي دليل رموز القطع داخل مخرجات الملخص:

p - Member of a pool (POOLMEM flag)
P - Chunk is a pool (POOL flag)
F - Chunk is free (FREE flag)
L - Chunk is looped (LOOP flag)

مخرجات مفصلة:

(gdb) tcchunk -v 0x80a13c88
struct talloc_chunk @ 0x80a13c88 {
next         = 0x0
prev         = 0x80a140c8
parent       = 0x0
child        = 0x80a14088
refs         = 0x0
destructor   = 0x0
name         = 0x807d9f2f (struct netr_ServerPasswordSet)
size         = 0x20
flags        = 0xe8150c78 (POOLMEM)
limit        = 0x0
pool         = 0x80a13248

التحقق

تحتوي قطع talloc على بعض القيم السحرية التي يمكن استخدامها للتحقق من سلامتها. سيحلل أمر tcvalidate القطعة للتأكد من أن القيمة السحرية للقطعة كما هو متوقع. بالإضافة إلى ذلك، يحلل جميع أعضاء المؤشرات الأخرى للتأكد من أنها تقع فعليًا ضمن نطاقات الذاكرة (كما يعرفها gdb)، وما إذا كان الحجم صالحًا، وما إلى ذلك.

(gdb) tcvalidate 0x80a13c88
Chunk header is valid

سنستخدم طريقة مدمجة لتعديل قيمة لإظهار كيف يمكن أن يفشل التحقق:

(gdb) python set_destructor(tc_chunk(0x80a13c88), 0x41414141)
(gdb) tcchunk -v 0x80a13c88
struct talloc_chunk @ 0x80a13c88 {
next         = 0x0
prev         = 0x80a140c8
parent       = 0x0
child        = 0x80a14088
refs         = 0x0
destructor   = 0x41414141
name         = 0x807d9f2f (struct netr_ServerPasswordSet)
size         = 0x20
flags        = 0xe8150c78 (POOLMEM)
limit        = 0x0
pool         = 0x80a13248
(gdb) tcvalidate 0x80a13c88
Chunk header is invalid:
0x80a13c88: Chunk has bad destructor pointer 0x41414141

العثور على الآباء

يمكن استخدام tcparents لعرض جميع آباء القطعة المقدمة:

(gdb) tcparents 0x80a13c88
0x809f8300: null_context
  0x80a08660: TALLOC_CTX *
    0x809f8370: talloc_new: ../lib/util/talloc_stack.c:147
      0x809fb680: talloc_new: ../lib/util/talloc_stack.c:147
        0x80a13258: UNNAMED
          0x80a13c58: talloc_new: ../lib/util/talloc_stack.c:147
            0x80a13c88: struct netr_ServerPasswordSet

العثور على الأطفال

يمكن استخدام tcchildren لعرض جميع أطفال (وأحفاد، وما إلى ذلك) القطعة المقدمة:

(gdb) tcchildren 0x80a13c88
0x80a14088: struct netr_Authenticator
0x80a14048: librpc/gen_ndr/ndr_netlogon.c:10964
0x80a14008: librpc/gen_ndr/ndr_netlogon.c:10958
0x80a13fc8: librpc/gen_ndr/ndr_netlogon.c:10951
0x80a13f88: lib/charcnv.c:506
0x80a13ec8: lib/charcnv.c:506
0x80a13d48: librpc/gen_ndr/ndr_netlogon.c:10913
  0x80a13e08: 
0x80a13cd8: struct ndr_pull
  0x80a13f48: struct ndr_token_list
  0x80a13f08: struct ndr_token_list
  0x80a13e88: struct ndr_token_list
  0x80a13e48: struct ndr_token_list
  0x80a13dc8: struct ndr_token_list
  0x80a13d88: struct ndr_token_list

تحليل التجمعات

لدى talloc مفهوم قطع التجمعات. وهي في الأساس قطع talloc عادية ولكنها تُستخدم لتخصيص قطع جديدة بدلاً من اللجوء إلى تنفيذ malloc() الأساسي للنظام. تحتوي قطعة التجمع على ترويسات مختلفة قليلاً اعتمادًا على الإصدار المستخدم، وأحيانًا تستخدم الحشو، وأحيانًا تستخدم ترويسة بادئة/لاحقة.

يمكن استخدام tcpool لتحليل ترويسة قطعة تجمع، على غرار tcchunk:

تنزيل الأداة