11#include " stdafx.h"
22
3- using namespace Tools ;
4-
53void OnDriverUnload ( PDRIVER_OBJECT pDriverObject )
64{
75 UNREFERENCED_PARAMETER ( pDriverObject );
86
9- #ifndef USE_KASPERSKY
10- DestroySSDT ();
11- DestroyShadowSSDT ();
12- #else
13- if ( kaspersky::is_klhk_loaded () )
14- {
15- if ( !kaspersky::unhook_shadow_ssdt_routine ( SYSCALL_NTUSERBUILDWNDLIST, oNtUserBuildHwndList ) )
16- DBGPRINT ( " Failed to unhook NtUserBuildHwndList" );
17-
18- if ( !kaspersky::unhook_shadow_ssdt_routine ( SYSCALL_NTUSERWNDFROMPOINT, oNtUserWindowFromPoint ) )
19- DBGPRINT ( " Failed to unhook NtUserWindowFromPoint" );
20-
21- if ( !kaspersky::unhook_shadow_ssdt_routine ( SYSCALL_NTUSERFINDWNDEX, oNtUserFindWindowEx ) )
22- DBGPRINT ( " Failed to unhook NtUserFindWindowEx" );
23-
24- if ( !kaspersky::unhook_shadow_ssdt_routine ( SYSCALL_NTGETFOREGROUNDWND, oNtUserGetForegroundWindow ) )
25- DBGPRINT ( " Failed to unhook NtUserGetForegroundWindow" );
26-
27- if ( !kaspersky::unhook_shadow_ssdt_routine ( SYSCALL_NTUSERQUERYWND, oNtUserQueryWindow ) )
28- DBGPRINT ( " Failed to unhook NtUserQueryWindow" );
29-
30- if ( !kaspersky::unhook_ssdt_routine ( SYSCALL_NTQUERYSYSINFO, oNtQuerySystemInformation ) )
31- DBGPRINT ( " Failed to unhook NtQuerySystemInformation" );
32-
33- if ( !kaspersky::unhook_ssdt_routine ( SYSCALL_NTOPENPROCESS, oNtOpenProcess ) )
34- DBGPRINT ( " Failed to unhook NtOpenProcess" );
35-
36- if ( !kaspersky::unhook_ssdt_routine ( SYSCALL_NTALLOCVIRTUALMEM, oNtAllocateVirtualMemory ) )
37- DBGPRINT ( " Failed to unhook NtAllocateVirtualMemory" );
38-
39- if ( !kaspersky::unhook_ssdt_routine ( SYSCALL_NTFREEVIRTUALMEM, oNtFreeVirtualMemory ) )
40- DBGPRINT ( " Failed to unhook NtFreeVirtualMemory" );
41-
42- if ( !kaspersky::unhook_ssdt_routine ( SYSCALL_NTWRITEVIRTUALMEM, oNtWriteVirtualMemory ) )
43- DBGPRINT ( " Failed to unhook NtWriteVirtualMemory" );
44-
45- if ( !kaspersky::unhook_ssdt_routine ( SYSCALL_NTDEVICEIOCTRLFILE, oNtDeviceIoControlFile ) )
46- DBGPRINT ( " Failed to unhook NtDeviceIoControlFile" );
47-
48- if ( !kaspersky::unhook_ssdt_routine ( SYSCALL_NTLOADDRIVER, oNtLoadDriver ) )
49- DBGPRINT ( " Failed to unhook NtLoadDriver" );
50- }
51- #endif
7+ ssdt::Destroy ();
8+ sssdt::Destroy ();
529
5310 //
5411 // Delay the execution for a second to make sure no thread is executing the hooked function
@@ -57,7 +14,7 @@ void OnDriverUnload( PDRIVER_OBJECT pDriverObject )
5714 LargeInteger.QuadPart = -11000000 ;
5815
5916 KeDelayExecutionThread ( KernelMode, FALSE , &LargeInteger );
60- UnloadImages ();
17+ tools:: UnloadImages ();
6118
6219 DBGPRINT ( " Driver unload routine triggered!\n " );
6320}
@@ -100,49 +57,39 @@ extern "C" NTSTATUS NTAPI DriverEntry( PDRIVER_OBJECT pDriverObject, PUNICODE_ST
10057 //
10158 if ( !bIsWin7 )
10259 {
103- SYSCALL_NTUSERQUERYWND = Tools ::GetWin32Syscall ( " NtUserQueryWindow" );
104- SYSCALL_NTUSERFINDWNDEX = Tools ::GetWin32Syscall ( " NtUserFindWindowEx" );
105- SYSCALL_NTUSERWNDFROMPOINT = Tools ::GetWin32Syscall ( " NtUserWindowFromPoint" );
106- SYSCALL_NTUSERBUILDWNDLIST = Tools ::GetWin32Syscall ( " NtUserBuildHwndList" );
107- SYSCALL_NTGETFOREGROUNDWND = Tools ::GetWin32Syscall ( " NtUserGetForegroundWindow" );
60+ SYSCALL_NTUSERQUERYWND = tools ::GetWin32Syscall ( " NtUserQueryWindow" );
61+ SYSCALL_NTUSERFINDWNDEX = tools ::GetWin32Syscall ( " NtUserFindWindowEx" );
62+ SYSCALL_NTUSERWNDFROMPOINT = tools ::GetWin32Syscall ( " NtUserWindowFromPoint" );
63+ SYSCALL_NTUSERBUILDWNDLIST = tools ::GetWin32Syscall ( " NtUserBuildHwndList" );
64+ SYSCALL_NTGETFOREGROUNDWND = tools ::GetWin32Syscall ( " NtUserGetForegroundWindow" );
10865
109- SYSCALL_NTOPENPROCESS = Tools ::GetNtSyscall ( " NtOpenProcess" );
110- SYSCALL_NTDEVICEIOCTRLFILE = Tools ::GetNtSyscall ( " NtDeviceIoControlFile" );
111- SYSCALL_NTQUERYSYSINFO = Tools ::GetNtSyscall ( " NtQuerySystemInformation" );
112- SYSCALL_NTALLOCVIRTUALMEM = Tools ::GetNtSyscall ( " NtAllocateVirtualMemory" );
113- SYSCALL_NTFREEVIRTUALMEM = Tools ::GetNtSyscall ( " NtFreeVirtualMemory" );
114- SYSCALL_NTWRITEVIRTUALMEM = Tools ::GetNtSyscall ( " NtWriteVirtualMemory" );
115- SYSCALL_NTLOADDRIVER = Tools ::GetNtSyscall ( " NtLoadDriver" );
66+ SYSCALL_NTOPENPROCESS = tools ::GetNtSyscall ( " NtOpenProcess" );
67+ SYSCALL_NTDEVICEIOCTRLFILE = tools ::GetNtSyscall ( " NtDeviceIoControlFile" );
68+ SYSCALL_NTQUERYSYSINFO = tools ::GetNtSyscall ( " NtQuerySystemInformation" );
69+ SYSCALL_NTALLOCVIRTUALMEM = tools ::GetNtSyscall ( " NtAllocateVirtualMemory" );
70+ SYSCALL_NTFREEVIRTUALMEM = tools ::GetNtSyscall ( " NtFreeVirtualMemory" );
71+ SYSCALL_NTWRITEVIRTUALMEM = tools ::GetNtSyscall ( " NtWriteVirtualMemory" );
72+ SYSCALL_NTLOADDRIVER = tools ::GetNtSyscall ( " NtLoadDriver" );
11673 }
11774
11875#ifndef USE_KASPERSKY
11976 //
12077 // (S)SSDT Hooks are only Win7 compatible ( hardcoded )
12178 //
122- if ( bIsWin7 )
123- {
124- DBGPRINT ( " Using normal SSDT Hooking!\n " );
125- InitializeSSDT ();
126- InitializeShadowSSDT ();
127- }
128- else
129- {
130- DBGPRINT ( " Not using kaspersky but (S)SSDT is not supported!\n " );
131- return STATUS_NOT_SUPPORTED;
132- }
79+ DBGPRINT ( " Not using Kaspersky to hook, Shadow SSDT is unstable!\n " );
13380#else
134- DBGPRINT ( " Using kaspersky !\n " );
81+ DBGPRINT ( " Using Kaspersky !\n " );
13582
13683 if ( !kaspersky::is_klhk_loaded () )
13784 {
138- UnloadImages ();
85+ tools:: UnloadImages ();
13986 DBGPRINT ( " Kaspersky not loaded!\n " );
14087 return STATUS_UNSUCCESSFUL;
14188 }
14289
14390 if ( !kaspersky::initialize () )
14491 {
145- UnloadImages ();
92+ tools:: UnloadImages ();
14693 DBGPRINT ( " Kaspersky init failed!\n " );
14794 return STATUS_UNSUCCESSFUL;
14895 }
@@ -151,103 +98,15 @@ extern "C" NTSTATUS NTAPI DriverEntry( PDRIVER_OBJECT pDriverObject, PUNICODE_ST
15198
15299 if ( !kaspersky::hvm_init () )
153100 {
154- UnloadImages ();
101+ tools:: UnloadImages ();
155102 DBGPRINT ( " Hypervisor not loaded!\n " );
156103 return STATUS_UNSUCCESSFUL;
157104 }
158105
159106 DBGPRINT ( " Hypervisor loaded!\n " );
160-
161- //
162- // SSDT
163- //
164- if ( kaspersky::hook_ssdt_routine ( SYSCALL_NTOPENPROCESS, hkNtOpenProcess, reinterpret_cast < PVOID* >( &oNtOpenProcess ) ) )
165- {
166- DBGPRINT ( " NtOpenProcess ( 0x%X ) hooked successfully!\n " , SYSCALL_NTOPENPROCESS );
167- }
168- else
169- DBGPRINT ( " Failed to hook NtOpenProcess!\n " );
170-
171- if ( kaspersky::hook_ssdt_routine ( SYSCALL_NTDEVICEIOCTRLFILE, hkNtDeviceIoControlFile, reinterpret_cast < PVOID* >( &oNtDeviceIoControlFile ) ) )
172- {
173- DBGPRINT ( " NtDeviceIoControlFile ( 0x%X ) hooked successfully!\n " , SYSCALL_NTDEVICEIOCTRLFILE );
174- }
175- else
176- DBGPRINT ( " Failed to hook NtDeviceIoControlFile!\n " );
177-
178- if ( kaspersky::hook_ssdt_routine ( SYSCALL_NTQUERYSYSINFO, hkNtQuerySystemInformation, reinterpret_cast < PVOID* >( &oNtQuerySystemInformation ) ) )
179- {
180- DBGPRINT ( " NtQuerySystemInformation ( 0x%X ) hooked successfully!\n " , SYSCALL_NTQUERYSYSINFO );
181- }
182- else
183- DBGPRINT ( " Failed to hook NtQuerySystemInformation!\n " );
184-
185- if ( kaspersky::hook_ssdt_routine ( SYSCALL_NTALLOCVIRTUALMEM, hkNtAllocateVirtualMemory, reinterpret_cast < PVOID* >( &oNtAllocateVirtualMemory ) ) )
186- {
187- DBGPRINT ( " NtAllocateVirtualMemory ( 0x%X ) hooked successfully!\n " , SYSCALL_NTALLOCVIRTUALMEM );
188- }
189- else
190- DBGPRINT ( " Failed to hook NtAllocateVirtualMemory!\n " );
191-
192- if ( kaspersky::hook_ssdt_routine ( SYSCALL_NTFREEVIRTUALMEM, hkNtFreeVirtualMemory, reinterpret_cast < PVOID* >( &oNtFreeVirtualMemory ) ) )
193- {
194- DBGPRINT ( " NtFreeVirtualMemory ( 0x%X ) hooked successfully!\n " , SYSCALL_NTFREEVIRTUALMEM );
195- }
196- else
197- DBGPRINT ( " Failed to hook NtFreeVirtualMemory!\n " );
198-
199- if ( kaspersky::hook_ssdt_routine ( SYSCALL_NTWRITEVIRTUALMEM, hkNtWriteVirtualMemory, reinterpret_cast < PVOID* >( &oNtWriteVirtualMemory ) ) )
200- {
201- DBGPRINT ( " NtWriteVirtualMemory ( 0x%X ) hooked successfully!\n " , SYSCALL_NTWRITEVIRTUALMEM );
202- }
203- else
204- DBGPRINT ( " Failed to hook NtWriteVirtualMemory!\n " );
205-
206- if ( kaspersky::hook_ssdt_routine ( SYSCALL_NTLOADDRIVER, hkNtLoadDriver, reinterpret_cast < PVOID* >( &oNtLoadDriver ) ) )
207- {
208- DBGPRINT ( " NtLoadDriver ( 0x%X ) hooked successfully!\n " , SYSCALL_NTLOADDRIVER );
209- }
210- else
211- DBGPRINT ( " Failed to hook NtLoadDriver!\n " );
212-
213- //
214- // Shadow SSDT
215- //
216- if ( kaspersky::hook_shadow_ssdt_routine ( SYSCALL_NTUSERQUERYWND, hkNtUserQueryWindow, reinterpret_cast < PVOID* >( &oNtUserQueryWindow ) ) )
217- {
218- DBGPRINT ( " NtUserQueryWindow ( 0x%X ) hooked successfully!\n " , SYSCALL_NTUSERQUERYWND );
219- }
220- else
221- DBGPRINT ( " Failed to hook NtUserQueryWindow!\n " );
222-
223- if ( kaspersky::hook_shadow_ssdt_routine ( SYSCALL_NTUSERFINDWNDEX, hkNtUserFindWindowEx, reinterpret_cast < PVOID* >( &oNtUserFindWindowEx ) ) )
224- {
225- DBGPRINT ( " NtUserFindWindowEx ( 0x%X ) hooked successfully!\n " , SYSCALL_NTUSERFINDWNDEX );
226- }
227- else
228- DBGPRINT ( " Failed to hook NtUserFindWindowEx!\n " );
229-
230- if ( kaspersky::hook_shadow_ssdt_routine ( SYSCALL_NTUSERWNDFROMPOINT, hkNtUserWindowFromPoint, reinterpret_cast < PVOID* >( &oNtUserWindowFromPoint ) ) )
231- {
232- DBGPRINT ( " NtUserWindowFromPoint ( 0x%X ) hooked successfully!\n " , SYSCALL_NTUSERWNDFROMPOINT );
233- }
234- else
235- DBGPRINT ( " Failed to hook NtUserWindowFromPoint!\n " );
236-
237- if ( kaspersky::hook_shadow_ssdt_routine ( SYSCALL_NTUSERBUILDWNDLIST, hkNtUserBuildHwndList, reinterpret_cast < PVOID* >( &oNtUserBuildHwndList ) ) )
238- {
239- DBGPRINT ( " NtUserBuildHwndList ( 0x%X ) hooked successfully!\n " , SYSCALL_NTUSERBUILDWNDLIST );
240- }
241- else
242- DBGPRINT ( " Failed to hook NtUserBuildHwndList!\n " );
243-
244- if ( kaspersky::hook_shadow_ssdt_routine ( SYSCALL_NTGETFOREGROUNDWND, hkNtUserGetForegroundWindow, reinterpret_cast < PVOID* >( &oNtUserGetForegroundWindow ) ) )
245- {
246- DBGPRINT ( " NtUserGetForegroundWindow ( 0x%X ) hooked successfully!\n " , SYSCALL_NTGETFOREGROUNDWND );
247- }
248- else
249- DBGPRINT ( " Failed to hook NtUserGetForegroundWindow!\n " );
250107#endif
108+ ssdt::Init ();
109+ sssdt::Init ();
251110 }
252111 else
253112 // No support for other OS
0 commit comments