Mydll.cpp
上传用户:nbcables
上传日期:2007-01-11
资源大小:1243k
文件大小:5k
源码类别:

钩子与API截获

开发平台:

Visual C++

  1. // ------------------------------------- //
  2. // 您如果要使用本文件,请不要删除本说明  //
  3. // ------------------------------------- //
  4. //             HOOKAPI 开发例子          //
  5. //   Copyright 2002 编程沙龙 Paladin     //
  6. //       www.ProgramSalon.com            //
  7. // 编译提示:如果是Win9x系统,需要预定义WIN95 //
  8. // ------------------------------------- //
  9. #include "stdafx.h"
  10. #include <winsock.h>
  11. #include <io.h>
  12. #include <stdio.h>
  13. #include <stdlib.h>
  14. #include <time.h>
  15. //#include <lmcons.h>
  16. //#include <lmalert.h>
  17. #include "../dll/mydll.h"
  18. //#include <nb30.h>
  19. #include <ras.h>
  20. #include "util.h"
  21. #ifdef WIN95
  22. #pragma code_seg("_INIT")
  23. #pragma comment(linker,"/SECTION:.bss,RWS /SECTION:.data,RWS /SECTION:.rdata,RWS /SECTION:.text,RWS /SECTION:_INIT,RWS ")
  24. #pragma comment(linker,"/BASE:0xBFF70000")
  25. #endif
  26. HINSTANCE g_hInstance;
  27. // 如果是win9x,不能使用fopen函数
  28. int WriteBinData(char *function, char *buf, int len)
  29. {
  30. char mod_name[100];
  31. char fname[128];
  32. if(len <=0) return 0;
  33. GetFileName(mod_name);
  34. wsprintf(fname, "c:\%s.log", mod_name);
  35. HANDLE hFile;
  36. if((hFile =CreateFile(fname, GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL)) <0)
  37. {
  38. WriteLog("open file %s failed", fname);
  39. return -1;
  40. }
  41. _llseek((HFILE)hFile, 0, SEEK_END);
  42. char temp[2048];
  43. wsprintf(temp, "rn(%s,len=%d) ", function, len);
  44. DWORD dw;
  45. WriteFile(hFile, temp, strlen(temp), &dw, NULL);
  46. for(int i =0; i<len; i++)
  47. {
  48. if(isgraph(buf[i]&0x00FF))
  49. wsprintf(temp, "%c", buf[i]&0x00FF);
  50. else
  51.     wsprintf(temp, "(%02x)", buf[i]&0x00FF);
  52. WriteFile(hFile, temp, strlen(temp), &dw, NULL);
  53. }
  54. _lclose((HFILE)hFile);
  55. return 0;
  56. }
  57. void peek_message(void)
  58. {
  59.   MSG msg;
  60.   if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
  61.   {
  62.     TranslateMessage(&msg);
  63.     DispatchMessage(&msg);
  64.   }
  65. }
  66. void SetKBEvent(BYTE key, BYTE scancode, BOOL f_down)
  67. {
  68. // 0x1D: control, 0x2A: shift
  69. keybd_event(key, scancode, f_down?KEYEVENTF_EXTENDEDKEY:KEYEVENTF_KEYUP, 0);
  70. }
  71. int g_cur_x =0, g_width =0, g_cur_min_y =40;
  72. int g_cur_event =0, f_timer_killed =true, g_TimerID =0;
  73. int g_win_width =0, g_win_height =0, g_min_y =1000, g_min_yx =0;
  74. int g_min_y2 =0, g_min_yx2 =0;
  75. void CALLBACK FuncKillTimer(HWND hWnd, UINT umsg, UINT idEvent, DWORD dwTime)
  76. {
  77. KillTimer(NULL, g_TimerID);
  78. if(g_cur_event ==VK_RIGHT)
  79. SetKBEvent(VK_RIGHT, VK_RIGHT, false);
  80. else SetKBEvent(VK_LEFT, VK_LEFT, false);
  81. f_timer_killed =true;
  82. }
  83. int f_kb_space =0;
  84. void CALLBACK FuncKBSpace(HWND hWnd, UINT umsg, UINT idEvent, DWORD dwTime)
  85. {
  86. MessageBeep(0);
  87. PostMessage(GetFocus(), WM_KEYDOWN, VK_SPACE, 0L);
  88. }
  89. BOOL WINAPI myBitBlt(HDC hdcDest, int x, int y, int nWidth, int nHeight, HDC hdcSrc,
  90.    int xSrc, int ySrc, DWORD dwRop )
  91. {
  92. char fname[256];
  93. GetModuleFileName(NULL, fname, sizeof(fname));
  94. if(strstr(fname, "Fx.exe"))
  95. {
  96. //HBITMAP hbmp =SelectObject(hdcSrc);
  97. WriteLog("BitBlt:thread_id: %d, x=%d, y=%d, width=%d, height=%d",
  98. GetCurrentThreadId(), x, y, nWidth, nHeight);
  99. }
  100. return BitBlt(hdcDest, x, y, nWidth, nHeight, hdcSrc, xSrc, ySrc, dwRop);
  101. }
  102. HBITMAP WINAPI myLoadBitmapA(HINSTANCE hinst, LPCSTR name)
  103. {
  104. char fname[200];
  105. GetModuleFileName(NULL, fname, sizeof(fname));
  106. HBITMAP hbmp =LoadBitmapA(hinst, name);
  107. DWORD err=GetLastError();
  108. if(strstr(fname, "Fx.exe"))
  109. WriteLog("myLoadBitmapW, name=%s, hbmp=%x", name, hbmp);
  110. SetLastError(err);
  111. return hbmp;
  112. }
  113. HBITMAP WINAPI myLoadBitmapW(HINSTANCE hinst, LPCWSTR name)
  114. {
  115. char fname[200];
  116. GetModuleFileName(NULL, fname, sizeof(fname));
  117. HBITMAP hbmp =LoadBitmapW(hinst, name);
  118. DWORD err=GetLastError();
  119. if(strstr(fname, "Fx.exe"))
  120. {
  121. char name2[128];
  122. WideCharToMultiByte( CP_ACP, 0, name, -1, name2, 128,NULL,NULL);
  123. WriteLog("myLoadBitmapW, name=%s, hbmp=%x", name2, hbmp);
  124. }
  125. SetLastError(err);
  126. return hbmp;
  127. }
  128. int myStretchDIBits(HDC hdc, int XDest, int YDest, int nDestWidth, int nDestHeight,
  129.   int XSrc, int YSrc, int nSrcWidth, int nSrcHeight, CONST VOID *lpBits,
  130.   CONST BITMAPINFO *lpBitsInfo, UINT iUsage, DWORD dwRop)
  131. {
  132. char fname[256];
  133. GetModuleFileName(NULL, fname, sizeof(fname));
  134. if(strstr(fname, "Fx.exe"))
  135. {
  136. //HBITMAP hbmp =SelectObject(hdcSrc);
  137. WriteLog("StretchDIBits:thread_id: %d, xDest=%d, yDest=%d, nDestWidth=%d, nDestHeight=%d",
  138. GetCurrentThreadId(), XDest, YDest, nDestWidth, nDestHeight);
  139. }
  140. return StretchDIBits(hdc, XDest, YDest, nDestWidth, nDestHeight,XSrc,YSrc,nSrcWidth,nSrcHeight, lpBits,lpBitsInfo, iUsage, dwRop);
  141. }
  142. // 地址小的放前面
  143. MYAPIINFO myapi_info[] =
  144. {
  145. {"GDI32.DLL", "BitBlt", 9, "myBitBlt"},
  146. {"USER32.DLL", "LoadBitmapA", 2, "myLoadBitmapA"},
  147. {"USER32.DLL", "LoadBitmapW", 2, "myLoadBitmapW"},
  148. {"GDI32.DLL", "StretchDIBits", 13, "myStretchDIBits"},
  149. {NULL}
  150. };
  151. // 下列内容请不要修改
  152. MYAPIINFO *GetMyAPIInfo()
  153. {
  154. return &myapi_info[0];
  155. }
  156. BOOL APIENTRY DllMain( HANDLE hModule, 
  157.                        DWORD  ul_reason_for_call, 
  158.                        LPVOID lpReserved
  159.  )
  160. {
  161. if(ul_reason_for_call =DLL_PROCESS_ATTACH)
  162. {
  163. //GetProfileString("HookAPI", "dll_path", "", g_szDllPath, sizeof(g_szDllPath));
  164. }
  165. return TRUE;
  166. }