home *** CD-ROM | disk | FTP | other *** search
/ Cracking 2 / Cracking II..iso / Tools / ApiHooks 2.2 / examples / VC / CapConsoleNew.c < prev    next >
Encoding:
C/C++ Source or Header  |  2000-04-09  |  2.9 KB  |  96 lines

  1. #if _MSC_VER > 1000
  2. #pragma once
  3. #endif
  4.  
  5. #define WIN32_LEAN_AND_MEAN
  6.  
  7. #include <windows.h>
  8. #include "ApiHooks.h"
  9.  
  10.  
  11. void LibTest();
  12.  
  13. ADDR_CONTENTS AddrAndValue[3];
  14. API_UNHOOK UnhookWriteConsoleA = {3,0,AddrAndValue};
  15.  
  16.  
  17. void __stdcall UnhookApi(PAPI_UNHOOK unhook) {
  18.     UINT i;
  19.     ULONG OldAttr;
  20.     for(i = 0; i < unhook->CurNoAddr; ++i)
  21.           if(VirtualProtect(unhook->WhereWhat[i].ReturnWhere, sizeof(DWORD), PAGE_READWRITE, &OldAttr))
  22.       { *unhook->WhereWhat[i].ReturnWhere = unhook->WhereWhat[i].ReturnWhat;
  23.             VirtualProtect(unhook->WhereWhat[i].ReturnWhere, sizeof(DWORD), OldAttr, &OldAttr);
  24.       };    
  25. }
  26.  
  27.  
  28. HANDLE hLog = INVALID_HANDLE_VALUE;
  29.  
  30.  
  31. BOOL APIENTRY DllMain( HANDLE hModule, 
  32.                        DWORD  ul_reason_for_call, 
  33.                        LPVOID lpReserved)
  34. {   
  35.     switch (ul_reason_for_call)
  36.     {
  37.         case DLL_PROCESS_ATTACH:
  38.             if(hLog == INVALID_HANDLE_VALUE)
  39.                          hLog = CreateFile("console.log", GENERIC_WRITE, FILE_SHARE_READ,
  40.                          NULL, CREATE_ALWAYS, 0, NULL);
  41.                  break;
  42.         case DLL_PROCESS_DETACH:
  43.                          CloseHandle(hLog);
  44.              hLog = INVALID_HANDLE_VALUE;
  45.                          UnhookApi(&UnhookWriteConsoleA);  
  46.                          LibTest();
  47.                break;
  48.     }
  49.     return TRUE;
  50. }
  51.  
  52.  
  53. BOOL WINAPI NewWriteConsoleA(HANDLE hConOut, LPCVOID lpvBuffer, DWORD cchToWrite, LPDWORD lpcchWritten, LPOVERLAPPED lpvReserved) {              
  54.       WriteFile(hLog, lpvBuffer, cchToWrite, lpcchWritten, NULL);
  55.       return(WriteConsoleA(hConOut, lpvBuffer, cchToWrite,lpcchWritten, lpvReserved));
  56. }
  57.  
  58.  
  59. FARPROC WINAPI NewGetProcAddress(HMODULE hModule, LPCSTR lpProcName) {
  60.      if(hModule == GetModuleHandle("KERNEL32.DLL"))    { 
  61.       if(!lstrcmp(lpProcName, "WriteConsoleA"))  return((FARPROC)NewWriteConsoleA);
  62.       if(!lstrcmp(lpProcName, "GetProcAddress")) return((FARPROC)NewGetProcAddress);
  63.      }
  64.      return(GetProcAddress(hModule, lpProcName));
  65. }
  66.  
  67.  
  68. // just for .lib test BEGIN
  69. API_HOOK DynaHooks[4] = {
  70.     {HOOKS_DYNAMIC},
  71.     {"KERNEL32.DLL","WriteConsoleA", HOOK_ALL, ALL_MODULES, &UnhookWriteConsoleA, NewWriteConsoleA},
  72.     {"KERNEL32.DLL","GetProcAddress",HOOK_ALL, ALL_MODULES, NULL, NewGetProcAddress},
  73.     {HOOKS_END}
  74. };
  75.  
  76. void LibTest() {
  77.      EstablishApiHooks("MyHooks.dll",0x123);
  78.      EstablishApiHooksTime((LPCSTR)DynaHooks,GetCurrentProcessId(),10000);
  79.      EstablishApiHooksTimeNT((LPCSTR)DynaHooks,GetCurrentProcessId(),10000);
  80.      RemoteExecuteTime(890,10000, NULL, 0, NULL);
  81.      RemoteExecuteTimeNT(890,10000, NULL, 0, NULL);
  82. }
  83. // just for .lib test END
  84.  
  85.  
  86. API_HOOK ApiHookChain[3] = {
  87.     {"KERNEL32.DLL","WriteConsoleA", HOOK_ALL, ALL_MODULES, &UnhookWriteConsoleA, NewWriteConsoleA},
  88.     {"KERNEL32.DLL","GetProcAddress",HOOK_ALL, ALL_MODULES, NULL, NewGetProcAddress},
  89.     {HOOKS_END}
  90. };
  91.  
  92.  
  93. // this is new function !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1
  94. __declspec(dllexport) PAPI_HOOK GetApiHookChain() {
  95.         return ApiHookChain;
  96. }