اگر تاحالا با دیباگرهایی مثه immunity debugger یا ollydbg کار کرده باشید حتما به اینم فکر کرده اید که میشه خود ویندوز رو هم دیباگ کرد یا نه ؟ یا اگه میشه چه جوری اینکارو بکنیم؟
توو این پست میخوام دو روش برای دیباگ کردن رو آموزش بدم که اولیش فوق العاده سریع هست چون بر مبنای شبکه هست ولی ممکنه خیلی از کامپیوتر ها ساپورتش نکن و روش دوم نسبت به روش اول کند تره چون از پورت های سریال استفاده میکنه ولی تقریبا همه کامپیوتر ها ساپورتش میکنن.
خب بریم سراغ اصل ماجرا
روش اول،
اول از همه باید به لینک زیر برید و ویندوز SDK رو نصب کنید.
https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk
اگه فایل iso شو دانلود کنید که خب خیلی بهتره.
بعد از اون یه VMWare Workstation Pro نصب کنید و یه ویندوز (ترجیحا 10) نصب کنید به عنوان Guest
اینکارو میتونید روو Hyper-v یا VirtualBox هم انجام بدید.
بعد از نصب اون دیباگر Windbg به ویندوزتون اضافه شده ، حالا باید سرچ کنید و Windbg x64 رو پیدا کنید و Open File Location رو بزنید تا به جایی برید که فایل اصلی اونجا قرار داده.
حالا دنبال این دوتا فایل بگردید :
VerifiedNICList.xml
kdnet.exe
و این دوتا فایل رو کپی کنید و داخل Guest تون کپی کنید.
حالا یه CMD رو Run As Administrator کنید و KDNET را ران کنید.
اگه به این صورت
Network debugging is supported on the following NICs
رو دیدید این یعنی NIC شما ساپورت دیباگ داره ، توو مرحله بعدی باید آی پی هاست رو پیدا کنید برای مثال با IPCONFIG ببینید آی پی تون (از GUEST) چیه.
آخرین مرحله اینه که کامند زیر رو ران کنید.
KDNET [Host IP] [Port]
KDNET 192.168.200.1 50000
و در آخر باید یه چنین ریزالتی رو ببینید
Enabling network debugging on Intel(R) 82574L Gigabit Network Connection.
To debug this machine, run the following command on your debugger host machine.
windbg -k net:port=50000,key=xxxxxxxxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxx.xxxxxxxxxx
Then reboot this machine by running shutdown -r -t 0 from this command prompt
خب کلید بالا کلیدی هست که باهاش میشه دیباگ کرد.
همونجور که توضیحاتش میگه از هاست windbg رو به این صورت اجرا کنید :
windbg -k net:port=50000,key=xxxxxxxxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxx.xxxxxxxxxx
و بعد از اون GUEST رو Restart کنید.
تقریبا تمومه، فقط باید صبر کنید که GUEST تون ریستارت بشه و بعدش Windbg به Guest متصل شده و عملا دیباگ ما شروع شده.
روش دوم ،
همونجور که گفتم روش دوم نسبت به روش اول خیلی کند تره و اصن پیشنهاد نمیشه ولی خب مواقعی که کارت شبکه مون ساپورت نمیکنه دیگه چاره ای نیست.
برای اینکار باید داخل تنظیمات VMWare برید و یه Device برای سریال پورت بهش اضافه کنید .
در واقع میخوایم Output to named pipe داخل این Guest راه اندازی کنیم.
همونجور که بالا میبینید باید یه اسم برای سریال پورتمون انتخاب کنیم.
در واقع نام باید دقیقا به فرم بالا باشد و به جای Name اسم مورد نظرتون رو بزارید.
حالا داخل Guest باید داخل Run تایپ کنید Msconfig
در نهایت داخل اونجا داخل تب Boot اون سریال پورتی را که اضافه کنید به صورت COM پورت اضافه کنیم.
سپس تیک Debug رو بزنید.
حالا داخل windbg به مسیر زیر بروید:
File > Kernel Debug
بعد از اون به تب COM برید و اون اسمی که برای سریال پورت رو انتخاب کردید رو بزنید و همچنین اون دوتا تیک Reconnect و Pipe رو هم فعال کنید.
خب دیگه تمومه و بعد از ریستارت باید بتونید وصل بشید.
خب الان دیباگ کردیم ، حالا بعدش چی ؟
بعد از اینکه دیباگ رو شروع کردیم الان وقتشه که Symbol هارو ست کنیم.
اما Symbol چیه ؟
سیمبل ها فایل های .pdb ای هستن که مایکروسافت ارائه میده تا بتونیم ساده تر دیباگ کنیم یا مکانیزم های ویندوز رو راحت تر بفهمیم. به این صورت که مثلا میتونیم اسم فانکشن های ویندوز رو داخلش ببینیمم.
برای اینکار باید به قسمت
File > Symbol File Path
و اینو کپی کنید:
SRV*c:\symbols*http://msdl.microsoft.com/download/symbols
این تنظیمات به windbg اعلام میکنه که برای سیمبل ها اول داخل C:\Symbols بگرد و اگر اونجا پیدا نکردی از سرور خود مایکروسافت دانلود کن.
همین !
امیدوارم این پست بهتون کمک کرده باشه.
VirtualKD هم راهکار خوب و ساده ای هست.