Windows рдХреЗ рд▓рд┐рдП рдбреНрд░рд╛рдЗрд╡рд░ рдбреАрдмрдЧ рдХрд░рдирд╛: VirtualBox + WinDbg

рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛


рдПрдХ рдмрд╛рд░ рдореБрдЭреЗ Windows XP SP2 рдХреЗ рд▓рд┐рдП рдбреНрд░рд╛рдЗрд╡рд░ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рддреБрд░рдВрдд рдПрдХ рдбрд┐рдмрдЧрд┐рдВрдЧ рдореБрджреНрджрд╛ рдерд╛ред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд░рд┐рд╖реНрдХреГрдд SoftIce рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛, рд╣рд░ рддреНрд░реБрдЯрд┐ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдКрдВрдЧрд╛ рдпрд╛ рд░реЛрд▓рдмреИрдХ рдХрд░реВрдВрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рд╡рд░реНрдЪреБрдЕрд▓рдмреЙрдХреНрд╕ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕реЗ рдореИрдВ рдЕрдХреНрд╕рд░ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЬрд┐рд╕рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдХрд╛рдлреА рд╕рдВрддреБрд╖реНрдЯ рд╣реИрдВ, рдФрд░ рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рд╡рд┐рдВрдбреЛрдЬ рдбреАрдмрдЧрд░ред рдХреБрдЫ рдШрдВрдЯреЛрдВ рдмрд╛рдж, C рдиреЗ рд╣рд░реНрд╖рд┐рдд рд╣реЛрдХрд░ WinDbg рд╡рд┐рдВрдбреЛ рдореЗрдВ рд▓рд╛рдЗрди рд▓рдЧрд╛рдИ, рдФрд░ рдЗрд╕реЗ рдПрдХ "рд░рд┐рдорд╛рдЗрдВрдбрд░" рдмрдирд╛рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛, рдЬреЛ рдПрдХ рдЕрдЪреНрдЫрд╛ "HowTo" рдирд┐рдХрд▓рд╛ред рддреЛ рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ ...

HowTo


1
[рдореЗрдЬрдмрд╛рди - рдорд╢реАрди]

рдЫрд╡рд┐

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреЗ COM рдкреЛрд░реНрдЯ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, [рд╣реЛрд╕реНрдЯ рдореЛрдб] [рд╣реЛрд╕реНрдЯ рдкрд╛рдЗрдк] рдЪреБрдиреЗрдВ рдФрд░ рдкрд╛рдЗрдк рдХрд╛ рдирд╛рдо рд▓рд┐рдЦреЗрдВ (рдЕрдзрд┐рдорд╛рдирддрдГ \\ред \ рдкрд╛рдЗрдк \ com_1)ред
рдЗрд╕рдХреЗ рдмрд╛рдж, "рдкреАрдбрд╝рд┐рдд" рд▓реЙрдиреНрдЪ рдХрд░реЗрдВред

2
[рд▓рдХреНрд╖реНрдп - рдХрд╛рд░]

рдЫрд╡рд┐

рдЕрдм boot.ini рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓ рджреЗрддреЗ рд╣реИрдВред рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдпрд╣ рдХреЗрд╡рд▓ рд╡рд╣ рдерд╛ рдЬрд┐рд╕реЗ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдЪрд┐рддреНрд░ рдореЗрдВ)ред
рдкрд╣рд▓реЗ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдХрд░ рдФрд░ рдЪрд┐рддреНрд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрдИ рд░реЗрдЦрд╛рдПрдБ рдЬреЛрдбрд╝рдХрд░ рдПрдХ рдирдИ рд░реЗрдЦрд╛ рдЬреЛрдбрд╝реЗрдВред
рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдмрд╣реБ (0) рдбрд┐рд╕реНрдХ (0) rdisk (0) рдкрд╛рд░реНрдЯреАрд╢рди (1) \ WINDOWS = "Microsoft Windows XP Professional RU" / noexecute = optin / fastdetit рдЬреИрд╕реА рд▓рд╛рдЗрди рдмрджрд▓реЗрдВ:
рдмрд╣реБ (0) рдбрд┐рд╕реНрдХ (0) rdisk (0) рдкрд╛рд░реНрдЯреАрд╢рди (1) \ WINDOWS = "Microsoft Windows XP Professional RU" / fastdetect / debug / debugport = com1 / baudrate = 115200
рд╣рдо рд░рд┐рдмреВрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ 2 рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдЕрдВрдд рдореЗрдВ рд╡рд░реНрдЧ рдХреЛрд╖реНрдардХ рдореЗрдВ "рдбрд┐рдмрдЧрд░ рдХреЗ рд╕рд╛рде" рдпрд╛ "рдбреАрдмрдЧрд░ рдХреЗ рд╕рд╛рде" рдЬреИрд╕рд╛ рдХреБрдЫ рд╣реЛрддрд╛ рд╣реИред

3
[рд▓рдХреНрд╖реНрдп - рдХрд╛рд░]

рдЫрд╡рд┐

рдЪрд▓реЛ рдбреНрд░рд╛рдЗрд╡рд░ рдХрд╛ рдПрдХ "рдХрдВрдХрд╛рд▓" рдмрдирд╛рдПрдВ - рдореЗрдХрдмреИрдЯ, рд╕реНрд░реЛрдд рдФрд░ рдореЗрдХрдЗрд╡рд░ рдлрд╛рдЗрд▓реЗрдВ:

%SystemRoot%\system32\cmd.exe /c "cd %DDK_PATH%\bin\&&setenv.bat %DDK_PATH%\&&cd E:\vbg\debug\&&build -ceZ"
copy bin\i386\*.pdb %DBG_SYM_PATH%
copy *.c %DBG_SRC_PATH%
copy *.cpp %DBG_SRC_PATH%
copy *.h %DBG_SRC_PATH%
copy *.hpp %DBG_SRC_PATH%
pause

(рдИ: \ vbg \ debug \ рдХреЗ рдмрдЬрд╛рдп рдЙрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдХрд╛ рдирд╛рдо рджрд░реНрдЬ рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рдЖрдкрдХрд╛ рдбреНрд░рд╛рдЗрд╡рд░ рд╕реНрдерд┐рдд рд╣реИ)

TARGETNAME=driver
TARGETPATH=bin
TARGETTYPE=DRIVER
C_DEFINES=$(C_DEFINES)
INCLUDES=C:\WINDDK\2600\inc
SOURCES=driver.cpp
RELEASETYPE=DDK

!INCLUDE $(NTMAKEENV)\makefile.def

4
[рд▓рдХреНрд╖реНрдп - рдХрд╛рд░]

рдЫрд╡рд┐

рдЕрдм рдЪрд╛рд▓рдХ Driver.pp рд╣реА, рдореБрдЦреНрдп рдХреЛрдб рдХреЗ рдКрдкрд░:

extern "C"{
#include "ntddk.h"
}
#include "struct.h"
VOID OnUnload(IN PDRIVER_OBJECT DriverObject){
DbgPrint("OnUnload called\n");
};
extern "C" NTSTATUS DriverEntry(IN PDRIVER_OBJECT theDriverObject,IN PUNICODE_STRING theRegistryPath){
AB v = {2,3};
PAB pv = &v;
_asm int 3 ;
v.a++;
pv->b++;
DbgPrint("a = %d, b = %d\n",va,vb);
theDriverObject->DriverUnload=&OnUnload;
return STATUS_SUCCESS;
}


рдпрд╣ рдбреНрд░рд╛рдпрд╡рд░ рдбреАрдмрдЧрд░ рдХреЛ рдЗрдВрдЯ 3 рдЗрдВрдЯрд░рдкреНрдЯ рдХреЗ рд╕рд╛рде рдХрд╣рддрд╛ рд╣реИред

5
[рд▓рдХреНрд╖реНрдп - рдХрд╛рд░]
рдЫрд╡рд┐

рд╕рд╣рд╛рдпрдХ рд╕рдорд╛рд╡реЗрд╢рди - рдлрд╝рд╛рдЗрд▓ struct.h:

typedef struct _ab{
int a,b;
}AB, *PAB;


6
[рд▓рдХреНрд╖реНрдп - рдХрд╛рд░]

рдЫрд╡рд┐

рдЕрдм рдореЗрд░реЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдЬрд╛рдПрдБ -> рдЧреБрдг -> рдЙрдиреНрдирдд -> рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдФрд░ рддреАрди рдЪрд░ рдЬреЛрдбрд╝реЗрдВ:
DBG_SYM_PATH- рдЙрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдХрд╛ рдкрде рдЬрд╣рд╛рдВ рдкреНрд░рддреАрдХ рдлрд╛рдЗрд▓реЗрдВ рд░рдЦреА рдЬрд╛рдПрдВрдЧреА *
DBG_SRC_PATH - рдлрд╝реЛрд▓реНрдбрд░ рдХрд╛ рдкрде рдЬрд╣рд╛рдБ рдЙрдиреНрд╣реЗрдВ рдХреЛрдб рдХреЗ рд╕рд╛рде рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛ **
DDK_PATH - DDK рдХреЗ рд▓рд┐рдП рдкрде
** + * = рдмрджрд▓реЗ рдореЗрдВ, рдпреЗ рдлрд╝реЛрд▓реНрдбрд░ рдЧреЗрдВрджреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рдмрдирд╛рдИ рдЧрдИ рдбрд┐рд╕реНрдХ рдкрд░ рд╕реНрдерд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

7
[рд▓рдХреНрд╖реНрдп - рдХрд╛рд░]

рдЫрд╡рд┐

рдЕрдм рдЖрдк рдирд┐рд░реНрдорд╛рдг рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - Make.bat рдкрд░ рдбрдмрд▓-рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, рдФрд░ рдпрджрд┐ рд╕рдм рдХреБрдЫ рдкрд╣рд▓реЗ рд╕реЗ рдареАрдХ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╢реАрд░реНрд╖ рдкрд░ рдПрдХ рд╕рдорд╛рди рд╕рд╛рдордЧреНрд░реА рд╡рд╛рд▓реА рд╡рд┐рдВрдбреЛ рдФрд░ рдбреНрд░рд╛рдЗрд╡рд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдХрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╛рдЗрд▓реЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдиреА рдЪрд╛рд╣рд┐рдПред

8
[рдореЗрдЬрдмрд╛рди - рдорд╢реАрди]

рдЫрд╡рд┐

рдбреАрдмрдЧрд░ рдореЗрдВ, рдкреНрд░рддреАрдХреЛрдВ рдФрд░ рдХреЛрдб рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдкрде рд▓рд┐рдЦреЗрдВ (рдЙрдиреНрд╣реЗрдВ рдЧреЗрдВрдж рдХреЗ рд╕рд╛рде рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП)

9
[рдореЗрдЬрдмрд╛рди - рдорд╢реАрди]

рдЫрд╡рд┐

рджрд░рдЕрд╕рд▓, рд╣рдо рдбрд┐рдмрдЧ рдореЗрдВ port \\ред \ рдкрд╛рдЗрдк \ com_1 рджрд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВ (рдбрд┐рдмрдЧрд░ рдпрд╣ рд▓рд┐рдЦреЗрдЧрд╛ рдХрд┐ рдпрд╣ рд╣рд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрд╣ рдмрд╕ рдПрдХ рдмрд╛рдзрд╛ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдШрдЯрдирд╛ рдХреЗ рд▓рд┐рдП рд▓рдХреНрд╖реНрдп рдорд╢реАрди рдкрд░ рдЗрдВрддрдЬрд╛рд░ рдХрд░рддрд╛ рд╣реИред

10
[рд▓рдХреНрд╖реНрдп - рдХрд╛рд░]

рдЫрд╡рд┐

рдХрд┐рд╕реА рднреА рдХрд░реНрдиреЗрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдореНрд╕ рдХрд╛ рд╕реЗрдЯ [KmdKit] рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдФрд░ KmdKit рд▓рд┐рдВрдХ рд╕реЗ рди рдХреЗрд╡рд▓ рдмрд░реНрддрдиреЛрдВ рдХреЛ рдЪрд▓рд╛рдПрдВ рдФрд░ KmdManager рдХреЛ рдЪрд▓рд╛рдПрдВ (рдЬреЛ рдХрд┐ рдЯреВрд▓ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╣реИ) - рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рдЗрдВрд╕реНрдЯреЙрд▓ / рд╕реНрдЯрд╛рд░реНрдЯ / рд╕реНрдЯреЙрдк / рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдоред
рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рдкрде рд▓рд┐рдЦреЗрдВ (рдЖрдк рдмрд╕ рдЗрд╕реЗ рдорд╛рдЙрд╕ рд╕реЗ рдЦреАрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ) рдФрд░ рд░рдЬрд┐рд╕реНрдЯрд░ + рд░рди рджрдмрд╛рдПрдВ - рд╕рд┐рд╕реНрдЯрдо рд╡рд╣реАрдВ рдЬрдо рдЬрд╛рдПрдЧрд╛ - рдпрд╣ рдРрд╕рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдбрд┐рдмрдЧрд░ рдиреЗ рдЕрд╡рд░реЛрдзрди рдХреЛ рд░реЛрдХ рджрд┐рдпрд╛ рдФрд░ рдкреВрд░реЗ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рд░реЛрдХ рджрд┐рдпрд╛ред рд╣реЛрд╕реНрдЯ рдорд╢реАрди рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдЕрдЧрд▓рд╛ рдЖрдЗрдЯрдо рджреЗрдЦреЗрдВред

11
[рдореЗрдЬрдмрд╛рди - рдорд╢реАрди]

рдЫрд╡рд┐

рдбрд┐рдмрдЧрд░ рдкреЙрдк рдЕрдк рд╣реБрдЖ рдФрд░ рдЬреЛ рд╢реАрд░реНрд╖ рдкрд░ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ (рдпрджрд┐ рд╡рд╣ рдкреНрд░рдХрдЯ рдирд╣реАрдВ рд╣реБрдЖ, рддреЛ рдЖрдкрдХреЛ рдереЛрдбрд╝рд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред
рд╣рдо рдХрджрдо рдЙрдард╛рддреЗ рд╣реИрдВ - F10 рджрдмрд╛рддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рд╣рдо рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдЕрдВрдд рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪрддреЗ рд╣реИрдВ рдФрд░ рдХрдорд╛рдВрдб-рдХреЗрдиреЗрд▓ рд╡рд┐рдВрдбреЛ рдЯрд╛рдЗрдк рдЬреА рдФрд░ рдкреНрд░реЗрд╕ рдореЗрдВ рдЕрдВрдд рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддреЗ рд╣реИрдВред рдЬреА рджрдмрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╕рд┐рд╕реНрдЯрдо рдореБрдлреНрдд рддреИрд░рд╛рдХреА рдФрд░ рд▓рдХреНрд╖реНрдп рдкрд░ рдЬрд╛рдПрдЧрд╛ - рд╕рд┐рд╕реНрдЯрдо рдЕрдирд▓реЙрдХ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рдЯреИрдЧреЗрдЯ рд╕рд┐рд╕реНрдЯрдо рдФрд░ рдЕрдЧрд▓реЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдкрд░ рдЬрд╛рдПрдВред

12
[рд▓рдХреНрд╖реНрдп - рдХрд╛рд░]

рдЫрд╡рд┐

рд╕реНрдЯреЙрдк рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ - рдЕрдкрдВрдЬреАрдХреГрддред

рдЕрдЧрд░ рд╕рдм рдХреБрдЫ рдЬреИрд╕рд╛ рдореИрдВрдиреЗ рд▓рд┐рдЦрд╛ рдерд╛, рд╡реИрд╕реЗ рд╣реА рдЖрдкрдиреЗ рдХрд┐рдпрд╛ред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдкреНрд░рд╢реНрди рдкреВрдЫреЗрдВред рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдорджрджрдЧрд╛рд░ рд░рд╣реА рд╣реЛрдЧреАред

рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

Source: https://habr.com/ru/post/In130213/


All Articles