ویرگول
ورودثبت نام
سید عمید قائم مقامی
سید عمید قائم مقامیبرنامه نویسی سیستم ویندوز و مهندسی معکوس و علاقه مند به آموزش.
سید عمید قائم مقامی
سید عمید قائم مقامی
خواندن ۲ دقیقه·۲ ماه پیش

مهندسی معکوس (مقدماتی بر دیباگر WinDbg Preview برای local سطح کرنل):

اجرای WinDbg Preview با دسترسی Administrator

  • کرنل دیباگ حتماً نیاز به دسترسی ادمین داره:

  • روی WinDbg Preview راست‌کلیک کن

  • Run as administrator


باز کردن صفحه Kernel Debug

  • بعد از اجرای WinDbg Preview:

  • از منوی بالا روی File کلیک کن

  • گزینه Attach to kernel رو انتخاب کن


انتخاب نوع Kernel Debug (Local)

در پنجره‌ای که باز می‌شه:

  • گزینه Local به صورت پیش‌فرض انتخاب شده

  • اگر چند گزینه دیدی، مطمئن شو روی Local Kernel Debugging هست

  • سپس:

  • روی OK کلیک کن

اگر اتصال موفق باشه، پایین پنجره می‌بینی:

بعد از اتصال، حتماً سمبل‌ها رو تنظیم کن:

.symfix .sympath+ srv*C:\ProgramData\Dbg\sym*https://msdl.microsoft.com/download/ .reload /f

این مرحله برای دیدن:

  • ساختارها (struct)

  • نام توابع

  • PEB / TEB / EPROCESS
    حیاتی هست.


دستور های رایج WinDbg Preview

دستور

!process

تعریف

دستور !process در WinDbg برای نمایش اطلاعات پروسس‌ها در کرنل استفاده می‌شود.

این دستور به تو اجازه می‌دهد لیست پروسس‌ها، وضعیت آنها، و ساختار داخلی هر پروسس (مثل PEB، پیوندها، آدرس‌ها) را ببینی.

سینتکس

!process <Address|0> <Flags>

Address: اگر صفر بگذاری، لیست همه پروسس‌ها نمایش داده می‌شود.

Flags: مشخص می‌کند چه اطلاعاتی نمایش داده شود. رایج‌ترین‌ها:

0 : فقط آدرس پروسس و PID

1 : نمایش جزئیات بیشتر (مثل Thread‌ها)

2 : نمایش کامل

مثال:

!process 0 1

خروجی نمونه:

PROCESS fffffa800c123450 SessionId: 1 Cid: 04c0 Peb: 7fffffd000 ParentCid: 01b4 DirBase: 000000003fef0000 ObjectTable: fffff88001234560 HandleCount: 500. Image: notepad.exe Threads: fffffa800c123700 fffffa800c123a00

توضیح خروجی:

  • PROCESS fffffa800c123450 → آدرس ساختار EPROCESS در حافظه کرنل

  • SessionId → شناسه سشن ویندوز

  • Cid → شناسه پروسس (Process ID)

  • Peb → آدرس PEB پروسس در حافظه کاربر

  • ParentCid → شناسه پروسس والد

  • DirBase → پایه جدول صفحات (Page Table)

  • ObjectTable → جدول Handle‌ها

  • HandleCount → تعداد Handleهای باز

  • Image → نام فایل اجرایی پروسس (مثل notepad.exe)

  • Threads → لیست آدرس‌های Thread‌ها در این پروسس


دستور

!thread

تعریف

  • به شما اجازه می‌دهد وضعیت Thread، آدرس ساختار KTHREAD و ارتباط آن با پروسس، Priority و Wait Block‌ها را ببینی.

سینتکس

!thread <ThreadAddress> [Flags]
  • ThreadAddress: آدرس KTHREAD از خروجی دستور !process یا مستقیم از ساختار Thread

Flags (اختیاری): تعیین جزئیات نمایش

مثال:

فرض کن Thread از خروجی !process آدرسش اینه:

fffffa800c123700
!thread fffffa800c123700

خروجی نمونه:

THREAD fffffa800c123700 Cid 04c4.04c8 Teb: 000000007ffff000 Win32Thread: fffffa800c567890 State: Ready Priority: 8 BasePriority: 8 Context Switches: 120

توضیح خروجی:

  • THREAD fffffa800c123700 → آدرس KTHREAD

  • Cid 04c4.04c8 → شناسه پروسس.شناسه Thread

  • Teb → آدرس TEB این Thread

  • Win32Thread → ساختار Thread سطح User

  • State → وضعیت Thread (Ready, Running, Waiting)

  • Priority / BasePriority → اولویت فعلی و پایه

  • Context Switches → تعداد Context Switch‌هایی که این Thread تجربه کرده


نکته مهم

نکته مهم:
معمولاً ابتدا دستور !process 0 1 را اجرا می‌کنیم تا لیست پروسس‌ها همراه با Threadهای آن‌ها نمایش داده شود. سپس با استفاده از دستور !thread <ThreadAddress> می‌توانیم جزئیات کامل هر Thread را بررسی کنیم.

با این دو دستور می‌توان کل وضعیت Thread‌ها و پروسس‌ها در کرنل را ردیابی کرد.

Telegram: @CaKeegan
Gmail : amidgm2020@gmail.com

kernelwindows
۰
۰
سید عمید قائم مقامی
سید عمید قائم مقامی
برنامه نویسی سیستم ویندوز و مهندسی معکوس و علاقه مند به آموزش.
شاید از این پست‌ها خوشتان بیاید