WinDbg рдХреЗ рд╕рд╛рде рдореИрд▓рд╡реЗрдпрд░ (рдирд╣реАрдВ) рдХреИрд╕реЗ рдЦреЛрдЬреЗрдВ
рдкрд░рд┐рдЪрдп
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, WinDbg рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреМрди рд╕рд╛ рдореИрд▓рд╡реЗрдпрд░ (рдпрд╛ рдирд╣реАрдВ) рдиреЗ рдХреБрдЫ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рд▓реЛрдб рдХрд┐рдП рдЧрдП DLL рдореЗрдВ рд╕рд┐рд╕реНрдЯрдо рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХрд╛ рдкрддрд╛ рдмрджрд▓ рджрд┐рдпрд╛ред рдЗрд╕рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рдерд╛ рдХрд┐ рд╕реБрд░рдХреНрд╖рд╛ рдореЙрдбреНрдпреВрд▓ 1C рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рд▓реЛрдб рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ ред
рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рдРрд╕реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ DLL рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ: рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдкреАрдбрд╝рд┐рдд ( рдкреАрдбрд╝рд┐рдд ) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ , рджреВрд╕рд░рд╛ -рджрд░рд┐рдВрджрд╛ рдЗрдВрдЬреЗрдХреНрдЯрд░ ред рдмрд╛рдж рдХреЛ рдкреАрдбрд╝рд┐рдд рдХреЛ рд╕рд┐рд╕реНрдЯрдо рдлрд╝рдВрдХреНрд╢рди (рд╕рд░рд▓рддрд╛ рдХреЗ рд▓рд┐рдП, рдиреАрдВрдж рд▓реЗ ) рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреА рдЬрдЧрд╣, рдкреАрдбрд╝рд┐рдд рдореЗрдВ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ , рдФрд░ рдПрд╡реА рдХреЛ рдХреБрдЫ рд╢рд░реНрддреЛрдВ рдХреЗ рддрд╣рдд рдХреЙрд▓ рдХрд░реЗрдЧрд╛ (рдЬрд┐рд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рд╣реЛрдЧреА)ред
рдЪреВрдВрдХрд┐ рдЪреВрдВрдХрд┐ рдбреЗрд▓реНрдлреА рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рдХрд╛рд░рдг рдХреЛрд░-рдбрдВрдк рдореЗрдВ рдХреНрд░реИрд╢ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рд╣рдорд╛рд░рд╛ рдореБрдЦреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди (DLLInjectionDemo) C рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдкреАрдбрд╝рд┐рдд DLL рдХреЗ рд╢реБрд░реБрдЖрддреА рдмрдВрдзрди рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рдФрд░ рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдореЗрдВ рдЖрд╕рд╛рдиреА рдХреЗ рд▓рд┐рдП, рдпрд╣ DLL-рдЗрдВрдЬреЗрдХреНрдЯрд░ рдХреЛ рд▓реЛрдб рдХрд░реЗрдЧрд╛ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рдкрд╛рд░рд┐рдд, рдФрд░ рдЗрд╕рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рд▓рд╛рдЧреВ рдХрд░реЗрдВ рдЬреЛ рдкреАрдбрд╝рд┐рдд рдХреЛ рдиреБрдХрд╕рд╛рди рдкрд╣реБрдВрдЪрд╛рдПрдЧрд╛ред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрд╕ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рд╣рдо рдПрдХ рдкрддреНрдерд░ рд╕реЗ рджреЛ рдкрдХреНрд╖рд┐рдпреЛрдВ рдХреЛ рдорд╛рд░ рджреЗрдВрдЧреЗред
рдПрдкреНрд▓реАрдХреЗрд╢рди рд╕реЛрд░реНрд╕ рдХреЛрдб C рдФрд░ рдбреЗрд▓реНрдлреА 10.3 рд░рд┐рдпреЛ рдХрдореНрдпреБрдирд┐рдЯреА рдПрдбрд┐рд╢рди рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ MinGW рдФрд░ рдбреЗрд▓реНрдлреА рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ,, рдФрд░ Win64 рдХреЗ рд▓рд┐рдП (рд╕рд╛рде рд╣реА рд╕рд╛рде рд▓рд╛рдЬрд░ рдореЗрдВ FPC)ред
рдЗрд╕рд▓рд┐рдП рд╣рдо DLL рдФрд░ рдореБрдЦреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджреЛрдиреЛрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ
> msbuild /t:build victim.dproj /p:Platform=Win32;Config=Debug;DCC_Exeoutput=.
> msbuild /t:build injector.dproj /p:Platform=Win32;Config=Debug;DCC_Exeoutput=.
> mingw32-make
MinGW рдореЗрдХ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕реЗ PATH рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛
:
C:\Users\demo>DLLInjectionDemo.exe
Sleeping 100 milliseconds
Done!
-L injector
(, , , - )
c:\Users\demo>DLLInjectionDemo.exe -L injector
Loading injector
Searching...
oleaut32.dll
advapi32.dll
user32.dll
kernel32.dll
kernel32.dll
user32.dll
version.dll
kernel32.dll
kernel32.dll
netapi32.dll
oleaut32.dll
Injected
Sleeping 100 milliseconds
New sleep instead of 100
Done!
, , Sleep - . ( , ). ( , GUI-, , , , -i
(interactive)).
c:\Users\demo>DLLInjectionDemo.exe -i -L injector
Loading injector
Searching...
oleaut32.dll
advapi32.dll
user32.dll
kernel32.dll
kernel32.dll
user32.dll
version.dll
kernel32.dll
kernel32.dll
netapi32.dll
oleaut32.dll
Injected
Sleeping 100 milliseconds
New sleep instead of 100
Done!
Press ENTER...
( ). : , , , , " ...", .
WinDbg, :
File
тАФ Open Crash Dump (Ctrl+D)
:
%PROGRAM FILES%\Windows Kits\10\Debuggers\x64\windbg.exe" -z C:\Users\demo\App Data\Local\Temp\DLLInjectionDemo.DMP
Loading Dump File [C:\Users\alex\AppData\Local\Temp\DLLInjectionDemo.DMP]
User Mini Dump File with Full Memory: Only application data is available
Symbol search path is: srv*
Executable search path is:
Windows 7 Version 7601 (Service Pack 1) MP (4 procs) Free x64
Product: WinNt, suite: SingleUserTS
Machine Name:
Debug session time: Thu Jul 4 08:46:18.000 2019 (UTC + 3:00)
System Uptime: 17 days 12:25:45.404
Process Uptime: 0 days 0:00:10.000
........................
For analysis of this file, run !analyze -v
ntdll!NtRequestWaitReplyPort+0xa:
00000000`77bcddfa c3 ret
For analysis of this file, run !analyze -v
( , ).
IAT тАФ (Import Address Table) тАФ DLL, (? , IAT ;) ). , PE- ( DLL ) WinDbg Windows 10 SDK ( Windows 7) , " ", WinDbg 6, .
. :
lm
0:000> lm
start end module name
00000000`003b0000 00000000`003db000 injector (deferred)
00000000`00400000 00000000`00412000 DLLInjectionDemo (deferred)
00000000`00520000 00000000`00616000 victim (deferred)
00000000`6e580000 00000000`6e5b4000 libmingwex_2 (deferred)
00000000`72870000 00000000`72886000 netapi32 (deferred)
...
Nota bene: 32- , 64-...
, DLL , IAT , !dh
-a
:
!dh 009c0000 -a
!dh victim -a0:000> !dh victim -a
File Type: DLL
FILE HEADER VALUES
14C machine (i386)
A number of sections
5E5F4251 time date stamp Wed Mar 4 09:53:21 2020
0 file pointer to symbol table
0 number of symbols
E0 size of optional header
A18E characteristics
Executable
Line numbers stripped
Symbols stripped
Bytes reversed
32 bit word machine
DLL
OPTIONAL HEADER VALUES
10B magic #
2.25 linker version
CE400 size of code
1BA00 size of initialized data
0 size of uninitialized data
CF79C address of entry point
1000 base of code
----- new -----
0000000000400000 image base
1000 section alignment
200 file alignment
2 subsystem (Windows GUI)
5.00 operating system version
0.00 image version
5.00 subsystem version
F6000 size of image
400 size of headers
0 checksum
0000000000000000 size of stack reserve
0000000000000000 size of stack commit
0000000000100000 size of heap reserve
0000000000001000 size of heap commit
0 DLL characteristics
DD000 [ A4] address [size] of Export Directory
DA000 [ 105C] address [size] of Import Directory
F3000 [ 2A00] address [size] of Resource Directory
0 [ 0] address [size] of Exception Directory
0 [ 0] address [size] of Security Directory
...
kernel32.dll ( Sleep)
Nota bene: 32- _IMAGE_IMPORT_DESCRIPTOR 64-. , , Delphi .
...
_IMAGE_IMPORT_DESCRIPTOR 00000000005fa03c
kernel32.dll
005FA398 Import Address Table
005FA11C Import Name Table
0 time date stamp
0 Index of first forwarder reference
003C7C7C 0 Sleep
76EE184A 0 VirtualFree
76EE1832 0 VirtualAlloc
76EE16DC 0 lstrlenW
76EE4422 0 VirtualQuery
76EE110C 0 GetTickCount
...
,
`kernel32.dll`0:000> !dh kernel32
File Type: DLL
FILE HEADER VALUES
14C machine (i386)
4 number of sections
5708A7E3 time date stamp Sat Apr 9 10:57:39 2016
...
----- new -----
0000000076ed0000 image base
...
.. 0000000076ed0000
, тАФ ?
WinDbg lm
:
0:000> lma 003C7C7C
Browse full module list
start end module name
00000000`003b0000 00000000`003db000 injector (deferred)
, ! . ( v
lm
)
0:000> lma 003C7C7C v
Browse full module list
start end module name
00000000`003b0000 00000000`003db000 injector (deferred)
Image path: z:\habr\DLLInjectionDemo\injector.dll
Image name: injector.dll
Browse all global symbols functions data
Timestamp: Wed Mar 4 09:53:12 2020 (5E5F4248)
CheckSum: 00000000
ImageSize: 0002B000
Translations: 0000.04b0 0000.04e4 0409.04b0 0409.04e4
Information from resource tables:
!
Image path: C:\Users\demo\injector.dll
, .
рдЗрд╕рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ, рдореИрдВ рдлрдВрдХреНрд╢рди рдХреЙрд▓ рдХреЛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдирд┐рд░реНрдорд╛рддрд╛ рд╕реЗ рдкреВрд░реНрд╡рд╕реНрдерд╛рдкрд┐рдд рдУрдПрд╕ рдкрд░ рдХреБрдЫ рдЕрдЬреАрдм рдбреАрдПрд▓рдПрд▓ рдЦреЛрдЬрдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ WriteFile
ред
рдореИрдВ рдЗрд╕ рд▓реЗрдЦ рд╕реЗ рдЕрдЧрд▓реЗ рдПрдХ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдЬрд┐рд╕рдореЗрдВ рдореИрдВ рдкрд╛рдардХ рдХреЛ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ WinDbg рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ (рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдХрд╣реАрдВ рдкрд░) рдПрдХреНрд╕реЗрд╕ рд╡рд╛рдпрд▓реЗрд╢рди рдХреЗ рд╕рд╛рде рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рдЧрдпрд╛, рдЬреЛ рдбреЗрд▓реНрд╣реА рдореЗрдВ рд▓рд┐рдЦреЗ DLL рдореЗрдВ рддрдм рд╣реБрдЖ рдЬрдм рд░рд┐рдореЛрдЯ рдбреАрдмрдЧрд┐рдВрдЧ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИред рдпрд╛ рддреЛ рдХрд╛рд░рдгред рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдбреЗрд▓реНрдлреА рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбрдВрдк рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдг рдирд╣реАрдВ рд╣реИрдВ, рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдкреАрдбреАрдмреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдХреИрд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдЬрд╛рдПред