pwndbg - ورقة غش تطوير الاستغلال GDB/LLDB
pwndbg (ينطق “pwn-dee-bee-gee”) هي إضافة Python تحمل في GDB — والآن في LLDB — لجعل تطوير الاستغلال والهندسة العكسية أقل ألماً كثيراً. إنها تضيف فحص الكومة والبحث عن gadgets ROP والمؤشرات “التلسكوبية” للسجلات والمكدس والمؤشرات وعرض السياق الذكي عند كل توقف وعشرات الأوامر التي لم توفرها المصححات الأساسية. إنها خليفة روحية لـ PEDA وأخت لـ GEF.
التثبيت
| الطريقة | الأمر |
|---|
| Setup script (موصى به) | git clone https://github.com/pwndbg/pwndbg && cd pwndbg && ./setup.sh |
| Nix | nix profile install github:pwndbg/pwndbg |
| Arch (AUR) | yay -S pwndbg |
| تحميل GDB اليدوي | أضف source /path/to/pwndbg/gdbinit.py إلى ~/.gdbinit |
| LLDB | أضف command script import /path/to/pwndbg/lldbinit.py إلى ~/.lldbinit |
| التحقق | ابدأ gdb — يجب أن ترى موجه pwndbg> |
بدء جلسة عمل
| الأمر | الوصف |
|---|
gdb ./binary | تحميل ملف ثنائي تحت pwndbg |
gdb -p PID | إرفاق بعملية قيد التشغيل |
gdb ./binary core | فتح صورة core dump لتحليل ما بعد الوفاة |
start | تشغيل والتوقف في main |
entry | تشغيل والتوقف في نقطة دخول ELF |
r ARGS | تشغيل مع الحجج |
starti | توقف عند أول تعليمة تماماً |
السياق والملاحة
| الأمر | الوصف |
|---|
context | إعادة رسم السياق الكامل (السجلات والتفكيك والمكدس والتتبع الخلفي) |
context reg | إظهار جزء السجلات فقط |
ctx-watch EXPR | إضافة تعبير إلى جزء مراقبة السياق |
nextcall | خطوة حتى تعليمة call التالية |
nextret | خطوة حتى ret التالية |
stepuntilasm mov | خطوة حتى mnemonic معينة |
xinfo ADDR | اشرح ما يرسمه العنوان (أي تعيين/قسم) |
فحص الذاكرة
| الأمر | الوصف |
|---|
telescope ADDR | إلغاء الإشارة و”تلسكوب” سلسلة من المؤشرات |
telescope $sp 20 | تلسكوب 20 إدخال من مؤشر المكدس |
hexdump ADDR | كمب Hex+ASCII (الأمر الذي لم يملكه GDB أبداً) |
vmmap | إظهار خريطة الذاكرة الافتراضية للعملية |
vmmap libc | تصفية خريطة الذاكرة حسب الاسم |
search -t string "PASS" | البحث في الذاكرة عن نص |
search -t bytes 0xdeadbeef | البحث في الذاكرة عن نمط بايت |
distance ADDR1 ADDR2 | مسافة البايت بين عنوانين |
p2p MAP1 MAP2 | ابحث عن سلاسل المؤشرات بين تعيينين |
تحليل الكومة (glibc)
| الأمر | الوصف |
|---|
heap | قائمة أجزاء الكومة |
bins | إظهار جميع الـ bins المجانية (سريعة، tcache، صغيرة، كبيرة، غير مصنفة) |
tcache | فحص tcache |
fastbins | إظهار محتوى fastbin |
malloc_chunk ADDR | فك تشفير رأس جزء في العنوان |
top_chunk | إظهار الجزء العلوي (البرية) |
vis_heap_chunks | تصور تخطيط الكومة بألوان |
find_fake_fast ADDR | البحث عن أهداف fastbin fake-chunk |
تطوير الاستغلال
| الأمر | الوصف |
|---|
cyclic 200 | إنشاء نمط De Bruijn (محدد الموضع) |
cyclic -l 0x6161616c | البحث عن موضع القيمة في النمط |
rop --grep "pop rdi" | البحث عن gadgets ROP |
ropgadget | طباعة gadgets (تكامل ROPgadget) |
checksec | إظهار تخفيفات الملف الثنائي (NX، PIE، RELRO، canary) |
got | إظهار الـ GOT والعناوين المحللة |
plt | إظهار PLT |
aslr | إظهار/تبديل ASLR للمصحح |
canary | إظهار قيمة canary المكدس الحالية |
نقاط الفحص والمراقبة
| الأمر | الوصف |
|---|
b *0x401136 | الفحص في عنوان مطلق |
b main | الفحص في رمز |
breakrva 0x1136 | فحص في RVA (مفيد مع PIE) |
watch GLOBAL | فحص عند تغيير قيمة |
rwatch ADDR | فحص عند وصول القراءة |
ignore N COUNT | تجاهل نقطة فحص N مرات |
سير العمل الشائع
# ابحث عن الموضع الدقيق للكتابة فوق عنوان الإرجاع المحفوظ
pwndbg> cyclic 200
pwndbg> r # الصق النمط، انهار
pwndbg> cyclic -l $rsp # أبلغ عن الموضع
# فحص التخفيفات، ثم ابحث عن سلسلة ROP صديقة one-gadget
pwndbg> checksec
pwndbg> rop --grep "pop rdi"
# امشِ في استخدام الكومة بعد التحرير
pwndbg> vis_heap_chunks
pwndbg> bins
pwndbg مقابل GEF مقابل PEDA
| الميزة | pwndbg | GEF | PEDA |
|---|
| دعم GDB | نعم | نعم | نعم |
| دعم LLDB | نعم | لا | لا |
| تحليل الكومة | عميق (glibc) | جيد | محدود |
| أدوات ROP | مدمج | مدمج | مدمج |
| التطور النشط | نعم | نعم | حد أدنى |
الموارد