Hook Utility

10 Pc Utility Blue Hook Set S Shape Home Shop Camping sports  More Tool
10 Pc Utility Blue Hook Set S Shape Home Shop Camping sports More Tool
$6.30
Time Remaining: 2d 11m
Buy It Now for only: $6.30

lOT of UTILITY HOOKS Grey Vinyl Coated 4 Piece Set PRICE REDUCED
lOT of UTILITY HOOKS Grey Vinyl Coated 4 Piece Set PRICE REDUCED
$1.49
Time Remaining: 5d 22h 19m
Buy It Now for only: $1.95

10 Pc Utility Green Hook Set S Shape Home Shop Camping sports  More Tool
10 Pc Utility Green Hook Set S Shape Home Shop Camping sports More Tool
$6.30
Time Remaining: 3d 3h 35m
Buy It Now for only: $6.30

Large Utility Screw Hooks 25 Long NEW
Large Utility Screw Hooks 25 Long NEW
$1.50
Time Remaining: 2d 20h 4m
Buy It Now for only: $1.50

KV 1132 HEAVY DUTY UTILITY HOOK 6 NICKEL PLATED
KV 1132 HEAVY DUTY UTILITY HOOK 6 NICKEL PLATED
$20.48
Time Remaining: 7d 21h 51m
Buy It Now for only: $20.48

4 1 4 Utility Snap Hook by Seachoice 36551
4 1 4 Utility Snap Hook by Seachoice 36551
$2.99
Time Remaining: 28d 1h 56m
Buy It Now for only: $2.99

Stanley Threaded Utility Hooks Zinc Plated 76 5980
Stanley Threaded Utility Hooks Zinc Plated 76 5980
$2.00
Time Remaining: 20d 9h 14m
Buy It Now for only: $2.00

UTILITY SINK  FAUCET   HOOK UP KIT  NEW IN BOX
UTILITY SINK FAUCET HOOK UP KIT NEW IN BOX
$45.00
Time Remaining: 13d 17h 37m
Buy It Now for only: $45.00

NEW Tap Set 2 Adhesive Anchors Utility Hook
NEW Tap Set 2 Adhesive Anchors Utility Hook
$6.99
Time Remaining: 15d 21h 40m
Buy It Now for only: $6.99

National N248 377 Single Clothes Robe Utility Hooks White Pack of 2
National N248 377 Single Clothes Robe Utility Hooks White Pack of 2
$1.45
Time Remaining: 18d 3h 29m
Buy It Now for only: $1.45

Belwith P27100 SC Satin Chrome Utility Robe Hook Pk 2
Belwith P27100 SC Satin Chrome Utility Robe Hook Pk 2
$3.95
Time Remaining: 1d 15h 7m
Buy It Now for only: $3.95

SUGATSUNE STAINLESS STEEL UTILITY HOOK 2H 20 25+ SHIP FREE
SUGATSUNE STAINLESS STEEL UTILITY HOOK 2H 20 25+ SHIP FREE
$1.90
Time Remaining: 20d 15h 57m
Buy It Now for only: $1.90

Utility Hook Hanger Steel Zinc plated 8pc NEW 122316
Utility Hook Hanger Steel Zinc plated 8pc NEW 122316
$2.99
Time Remaining: 24d 2m
Buy It Now for only: $2.99

Hickory Hardware P27120 SC 5 8 Inch Utility Hook Satin Chrome New
Hickory Hardware P27120 SC 5 8 Inch Utility Hook Satin Chrome New
$3.99
Time Remaining: 22d 15h 48m
Buy It Now for only: $3.99

Hickory Hardware P27120 PB 5 8 Inch Utility Hook Polished Brass Decorate Hooks
Hickory Hardware P27120 PB 5 8 Inch Utility Hook Polished Brass Decorate Hooks
$1.80
Time Remaining: 12d 20h 35m
Buy It Now for only: $1.80

SUGATSUNE TY 35 UTILITY TIE BELT HOOK STAINLESS STEEL
SUGATSUNE TY 35 UTILITY TIE BELT HOOK STAINLESS STEEL
$9.00
Time Remaining: 4d 22h 52m
Buy It Now for only: $9.00

KV 1132 HEAVY DUTY UTILITY HOOK 4 NICKEL PLATED
KV 1132 HEAVY DUTY UTILITY HOOK 4 NICKEL PLATED
$14.31
Time Remaining: 7d 21h 12m
Buy It Now for only: $14.31

Belwith Utility Hook BW P27100 PB Single Polished Brass Hook
Belwith Utility Hook BW P27100 PB Single Polished Brass Hook
$1.13
Time Remaining: 8d 19h 51m
Buy It Now for only: $1.13

Belwith Utility Hook BW P27100 PB Single Polished Brass Hook
Belwith Utility Hook BW P27100 PB Single Polished Brass Hook
$1.13
Time Remaining: 12d 7h 1m
Buy It Now for only: $1.13

8 Belwith P27100 SC Satin Chrome Utility Robe Hook
8 Belwith P27100 SC Satin Chrome Utility Robe Hook
$6.00
Time Remaining: 29d 5h 17m
Buy It Now for only: $6.00

2 PC Removable Hooks Hangers Self Sticking Adhesive Bathroom Wall Mounts Utility
2 PC Removable Hooks Hangers Self Sticking Adhesive Bathroom Wall Mounts Utility
$4.99
Time Remaining: 20h 32m
Buy It Now for only: $4.99

SUGATSUNE TY 25 UTILITY TIE BELT HOOK STAINLESS STEEL
SUGATSUNE TY 25 UTILITY TIE BELT HOOK STAINLESS STEEL
$11.20
Time Remaining: 5d 49m
Buy It Now for only: $11.20

SUGATSUNE TY 40 UTILITY TIE BELT HOOK STAINLESS STEEL
SUGATSUNE TY 40 UTILITY TIE BELT HOOK STAINLESS STEEL
$12.00
Time Remaining: 5d 47m
Buy It Now for only: $12.00

Hickory Hardware P27100 SC 1 2 Inch Utility Hook Satin Chrome Hooks
Hickory Hardware P27100 SC 1 2 Inch Utility Hook Satin Chrome Hooks
$1.13
Time Remaining: 13d 20h 46m
Buy It Now for only: $1.13

KV 1132 HEAVY DUTY UTILITY HOOK 10 NICKEL PLATED
KV 1132 HEAVY DUTY UTILITY HOOK 10 NICKEL PLATED
$11.95
Time Remaining: 7d 21h 53m
Buy It Now for only: $11.95

Stanley Threaded Utility Hooks 76 5980
Stanley Threaded Utility Hooks 76 5980
$1.37
Time Remaining: 22d 20h 39m
Buy It Now for only: $1.37

HILLMAN UTILITY HOOK Picture Hanger
HILLMAN UTILITY HOOK Picture Hanger
$1.99
Time Remaining: 1d 18h 34m
Buy It Now for only: $1.99

BELWITH LIGHT ALMOND DECORATIVE UTILITY HOOK W SCREWS P27100 LAD LOT OF 28
BELWITH LIGHT ALMOND DECORATIVE UTILITY HOOK W SCREWS P27100 LAD LOT OF 28
$20.16
Time Remaining: 17d 2h 19m
Buy It Now for only: $20.16

Hook Utility
Hook Utility

Easy way to set up global API hooks

Contents

1.1.       What is API hooking?
1.2.       Local and global hooks
2.      AppInit_DLLs infrastructure
3.      Mhook library
4.      Writing the code
4.1.       Original function
4.2.       Hooked function
4.3.       Setting the hook
4.4.       Unhooking
5.      Running a sample
6.      Limitations
7.      Useful references

1.1 What is API hooking?

API hooking means intercepting some API function calls. By means of it you can alter the behavior of any software. Hooks are widely used by antiviruses, security applications, system utilities, programming tools etc.

1.2 Local and global hooks

There are two types of hooks: local and global ones. Local hooks are applied only to the specific application. Global hooks are applied to all processes in the system. The hook technique, which is shown in this article, is global and impacts on all processes in all sessions (in contrast to the SetWindowsHooks way that is bounded to the specific desktop).

2. AppInit_DLLs infrastructure

AppInit_DLLs infrastructure is a mechanism for loading an arbitrary list of DLLs in all user-mode processes which are linked with User32.dll (Actually, there are very few executables that are not linked with it). The DLLs are loaded by User32.dll on its initialization.

The behavior of the AppInit_DLLs infrastructure is configured by a set of values that are stored under the HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NT CurrentVersionWindows key in the registry. These registry values are described in the table:

Value

Description

Sample values
LoadAppInit_DLLs

(REG_DWORD) Value that globally enables or disables AppInit_DLLs. 0x0 – AppInit_DLLs are disabled.

0x1 – AppInit_DLLs are enabled.

AppInit_DLLs
(REG_SZ)

Space - or comma -separated list of DLLs to load. The complete path to the DLL should be specified using short file names. C:PROGRA~1TestTest.dll RequireSignedAppInit_DLLs

(REG_DWORD) Require code-signed DLLs. 0x0 – Load any DLLs.

0x1 – Load only code-signed DLLs.

Table 1 - AppInit_DLLs Infrastructure registry values.

3. Mhook library

There are several libraries for api hooking. The typical things that they do are:

  1. Overwriting the beginning of the target function with custom code (so-called trampoline). When the function executes it will jump to the hook handler.
  2. Storing overwritten original code of the target function somewhere. It is needed for the correct target function functioning.
  3. Restoring overwritten portion of the target function.

Mhook is a free open source library for api hooking. It supports both x86 and x64 platforms and it is very easy in use. Mhook interface is simple and quite self describing:

BOOL Mhook_SetHook(PVOID *ppSystemFunction, PVOID pHookFunction); BOOL Mhook_Unhook(PVOID *ppHookedFunction);

For more info on library usage see the code sample shown in the next paragraph or visit Mhook home page - http://codefromthe70s.org/mhook22.aspx.

4. Writing the code

We aregoing to write a user-mode DLL. First you should download the latest Mhook sources and add it to the project. If you are using precompiled headers turn it off for Mhook files.

As I’ve mentioned above our example will hide the calc.exe from the list of running processes.

4.1 Original function

The list of running processes is queried by calling NTAPI function NtQuerySystemInformation. So, we need to add some NTAPI stuff to our project. Unfortunately winternl.h header doesn’t contain full information and we have to define required data types ourselves:

///////////////////////////////////////////////////////////////////////// // Defines and typedefs #define STATUS_SUCCESS ((NTSTATUS)0x00000000L) typedef struct _MY_SYSTEM_PROCESS_INFORMATION { ULONG NextEntryOffset; ULONG NumberOfThreads; LARGE_INTEGER Reserved[3]; LARGE_INTEGER CreateTime; LARGE_INTEGER UserTime; LARGE_INTEGER KernelTime; UNICODE_STRING ImageName; ULONG BasePriority; HANDLE ProcessId; HANDLE InheritedFromProcessId; } MY_SYSTEM_PROCESS_INFORMATION, *PMY_SYSTEM_PROCESS_INFORMATION; typedef NTSTATUS (WINAPI *PNT_QUERY_SYSTEM_INFORMATION)( __in SYSTEM_INFORMATION_CLASS SystemInformationClass, __inout PVOID SystemInformation, __in ULONG SystemInformationLength, __out_opt PULONG ReturnLength );

To store original function address create a global variable and initialize it:

////////////////////////////////////////////////////////////////////////// // Original function PNT_QUERY_SYSTEM_INFORMATION OriginalNtQuerySystemInformation = (PNT_QUERY_SYSTEM_INFORMATION)::GetProcAddress(::GetModuleHandle(L"ntdll"), "NtQuerySystemInformation");

Hooked function

In the hooked function we call the original function first. Then check SystemInformationClass. If it is SystemProcessInformation we loop through the list of the running processes and find all entries for calc.exe to cut them out from the list. That’s all!

Note: This function must have the same signature as the original one.

////////////////////////////////////////////////////////////////////////// // Hooked function NTSTATUS WINAPI HookedNtQuerySystemInformation( __in SYSTEM_INFORMATION_CLASS SystemInformationClass, __inout PVOID SystemInformation, __in ULONG SystemInformationLength, __out_opt PULONG ReturnLength ) { NTSTATUS status = OriginalNtQuerySystemInformation(SystemInformationClass, SystemInformation, SystemInformationLength, ReturnLength); if (SystemProcessInformation == SystemInformationClass && STATUS_SUCCESS == status) { // // Loop through the list of processes // PMY_SYSTEM_PROCESS_INFORMATION pCurrent = NULL; PMY_SYSTEM_PROCESS_INFORMATION pNext = (PMY_SYSTEM_PROCESS_INFORMATION) SystemInformation; do { pCurrent = pNext; pNext = (PMY_SYSTEM_PROCESS_INFORMATION)((PUCHAR)pCurrent + pCurrent-> NextEntryOffset); if (!wcsncmp(pNext->ImageName.Buffer, L"calc.exe", pNext->ImageName.Length)) { if (0 == pNext->NextEntryOffset) { pCurrent->NextEntryOffset = 0; } else { pCurrent->NextEntryOffset += pNext->NextEntryOffset; } pNext = pCurrent; } } while(pCurrent->NextEntryOffset != 0); } return status; }

4.3 Setting the hook

Setting the hook is pretty easy: call Mhook_SetHook from DllMain when the DLL is loaded to a new process:

////////////////////////////////////////////////////////////////////////// // Entry point BOOL WINAPI DllMain( __in HINSTANCE hInstance, __in DWORD Reason, __in LPVOID Reserved ) { switch (Reason) { case DLL_PROCESS_ATTACH: Mhook_SetHook((PVOID*)&OriginalNtQuerySystemInformation, HookedNtQuerySystemInformation); break;

4.4 Unhooking

Unhooking is performed by calling Mhook_Unhook from DllMain when the DLL is unloaded from the process:

////////////////////////////////////////////////////////////////////////// // Entry point BOOL WINAPI DllMain( __in HINSTANCE hInstance, __in DWORD Reason, __in LPVOID Reserved ) { switch (Reason) { ... case DLL_PROCESS_DETACH: Mhook_Unhook((PVOID*)&OriginalNtQuerySystemInformation); break; }

5. Running a sample

Now it’s time to show the described hook in action. Build the project and put the resulting AppInitHook.dll to the root of the disk C.

Figure 1 - The hook DLL is put to the root of the disk C.

Open the registry editor and locate AppInit_DLLs registry key (The key is HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NT CurrentVersionWindows). Then specify the path to the hook DLL (C:AppInitHook.dll in our case).

Figure 2 – Modifying the registry.

After the registry has been modified the hook starts working. Let’s run a few instances of calc.exe. Then open Windows Task Manager and look at the processes tab. There is no calc.exe at all!

Figure 3 - Windows Task Manager processes tab.

Let’s see what shows another popular tool written by Mark Russinovich - Process Explorer.

Figure 4 - Process Explorer shows no calc.exe.

All calc.exe instances are hidden successfully. And finally run command line tool tasklist.exe:

Figure 5 - Tasklist.exe listing of the running processes.

The hook is working!

6. Limitations

There are a few limitations of this hook technique you should know about:

  1. As it was mentioned before this hook is applied only to those processes that are linked to User32.dll.
  2. As hooking is performed in DllMain of User32.dll you can call functions only from Kernel32.dll and Ntdll.dll (other libraries are not initialized yet).
  3. Windows7/Windows 2008 R2 introduces the new security feature – AppInit DLLs have to be digitally signed (however there is a registry key that can turn this feature off).
  4. The file path to AppInit DLL must not contain spaces.

Useful references

  1. Working with the AppInit_DLLs registry value - http://support.microsoft.com/kb/197571
  2. AppInit DLLs in Windows 7 and Windows Server 2008 R2 http://download.microsoft.com/download/7/E/7/7E7662CF-CBEA-470B-A97E-CE7CE0D98DC2/AppInit_Win7.docx
  3. API hooking revealed - http://www.codeproject.com/KB/system/hooksys.aspx
  4. Mhook, an API hooking library, v2.2 - http://codefromthe70s.org/mhook22.aspx
  5. Microsoft Research's Detours - http://research.microsoft.com/en-us/projects/detours/
  6. DllMain Callback Function - http://msdn.microsoft.com/en-us/library/ms682583(VS.85).aspx

Download sourses.

About the Author

Apriorit is the provider of professional consulting and development services in the advanced fields of software production.

Learn more about Apriorit and its experience at Apriorit Official site

Minecraft Maps and Mods - SDK's Gun/Grappling Hook/Utility Mods Part 1/2

admin posted at 2009-8-2 Category: home improvement