99 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C++
		
	
	
	
		
		
			
		
	
	
			99 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C++
		
	
	
	
|  | //////////////////////////////////////////////////////////////////////////////
 | ||
|  | //
 | ||
|  | //  Detours Test Program (einst.cpp of einst.exe)
 | ||
|  | //
 | ||
|  | //  Microsoft Research Detours Package
 | ||
|  | //
 | ||
|  | //  Copyright (c) Microsoft Corporation.  All rights reserved.
 | ||
|  | //
 | ||
|  | #include <stdio.h>
 | ||
|  | #include <windows.h>
 | ||
|  | #include <detours.h>
 | ||
|  | 
 | ||
|  | struct CPrivateStuff | ||
|  | { | ||
|  |     DETOUR_SECTION_HEADER   header; | ||
|  |     DETOUR_SECTION_RECORD   record; | ||
|  |     CHAR                    szMessage[32]; | ||
|  | }; | ||
|  | 
 | ||
|  | #ifdef INCLUDE_THIS
 | ||
|  | #pragma data_seg(".detour")
 | ||
|  | 
 | ||
|  | static CPrivateStuff private_stuff = { | ||
|  |     DETOUR_SECTION_HEADER_DECLARE(sizeof(CPrivateStuff)), | ||
|  |     { | ||
|  |         (sizeof(CPrivateStuff) - sizeof(DETOUR_SECTION_HEADER)), | ||
|  |         0, | ||
|  |         { /* d9ab8a40-f4cc-11d1-b6d7-006097b010e3 */ | ||
|  |             0xd9ab8a40, | ||
|  |             0xf4cc, | ||
|  |             0x11d1, | ||
|  |             {0xb6, 0xd7, 0x00, 0x60, 0x97, 0xb0, 0x10, 0xe3} | ||
|  |         } | ||
|  |     }, | ||
|  |     "The Application!" | ||
|  | }; | ||
|  | #pragma data_seg()
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | GUID my_guid = | ||
|  | { /* d9ab8a40-f4cc-11d1-b6d7-006097b010e3 */ | ||
|  |     0xd9ab8a40, | ||
|  |     0xf4cc, | ||
|  |     0x11d1, | ||
|  |     {0xb6, 0xd7, 0x00, 0x60, 0x97, 0xb0, 0x10, 0xe3} | ||
|  | }; | ||
|  | 
 | ||
|  | __declspec(dllimport) VOID WINAPI EDll1Function(VOID); | ||
|  | __declspec(dllimport) VOID WINAPI EDll2Function(VOID); | ||
|  | __declspec(dllimport) VOID WINAPI EDll3Function(VOID); | ||
|  | 
 | ||
|  | void FindPayload(HINSTANCE hinst) | ||
|  | { | ||
|  |     CHAR szModuleName[256]; | ||
|  |     GetModuleFileNameA(hinst, szModuleName, ARRAYSIZE(szModuleName)); | ||
|  |     printf("  %p : %s\n", hinst, szModuleName); | ||
|  | 
 | ||
|  |     ULONG cbData = 0; | ||
|  |     PBYTE pbData = (PBYTE)DetourFindPayload(hinst, my_guid, &cbData); | ||
|  | 
 | ||
|  |     if (pbData) { | ||
|  |         printf("  %08p..%08p : %50.50s\n", | ||
|  |                pbData, | ||
|  |                pbData + cbData, | ||
|  |                pbData); | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | int WINAPI WinMain(HINSTANCE hinst, HINSTANCE hprev, LPSTR lpszCmdLine, int nCmdShow) | ||
|  | { | ||
|  |     (void)hinst; | ||
|  |     (void)hprev; | ||
|  |     (void)lpszCmdLine; | ||
|  |     (void)nCmdShow; | ||
|  | 
 | ||
|  |     printf("Source .EXE:\n"); | ||
|  |     FindPayload(NULL); | ||
|  |     printf("\n"); | ||
|  | 
 | ||
|  |     printf("DLL and EXE binaries loaded:\n"); | ||
|  | 
 | ||
|  |     EDll1Function(); | ||
|  |     EDll2Function(); | ||
|  |     EDll3Function(); | ||
|  | 
 | ||
|  |     for (HINSTANCE hiter = NULL; (hiter = DetourEnumerateModules(hiter)) != NULL;) { | ||
|  |         FindPayload(hiter); | ||
|  |     } | ||
|  | 
 | ||
|  |     if ((PVOID)hinst == (PVOID)lpszCmdLine) { | ||
|  |         DispatchMessage(NULL);                          // Force load of gdi32.dll
 | ||
|  |     } | ||
|  | 
 | ||
|  |     return 0; | ||
|  | } | ||
|  | 
 | ||
|  | //
 | ||
|  | ///////////////////////////////////////////////////////////////// End of File.
 |