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

钩子与API截获

开发平台:

Visual C++

  1. #include "stdafx.h"
  2. #include <winsock.h>
  3. #include <io.h>
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <time.h>
  7. //#include <lmcons.h>
  8. //#include <lmalert.h>
  9. #include "mydll.h"
  10. //#include <nb30.h>
  11. //#include <ras.h>
  12. #include "Util.h"
  13. #define MAX_CONNECTIONS 128
  14. #define MAX_PAGE_SIZE 500000L
  15. #ifdef WIN95
  16. #pragma code_seg("_INIT")
  17. #pragma comment(linker,"/SECTION:.bss,RWS /SECTION:.data,RWS /SECTION:.rdata,RWS /SECTION:.text,RWS /SECTION:_INIT,RWS ")
  18. #pragma comment(linker,"/BASE:0xBFF70000")
  19. #endif
  20. HINSTANCE g_hInstance;
  21. char *tbuf[MAX_CONNECTIONS];
  22. HINTERNET hbuf[MAX_CONNECTIONS];
  23. DWORD tbuf_sz[MAX_CONNECTIONS];
  24. BOOL APIENTRY DllMain( HANDLE hModule, 
  25.                        DWORD  ul_reason_for_call, 
  26.                        LPVOID lpReserved
  27.  )
  28. {
  29. return TRUE;
  30. }
  31. int getBufHandle ( HINTERNET h )
  32. {
  33. int last_free = -1;
  34. for ( int n =0;n<MAX_CONNECTIONS; n++)
  35. {
  36. if ( hbuf[n] == h )
  37. return n;
  38. if ( (hbuf[n] == 0) && (last_free == -1) )
  39. last_free = n;
  40. }
  41. return last_free;
  42. }
  43. HINTERNET WINAPI cInternetConnectA (
  44.     HINTERNET hInternet, LPCSTR lpszServerName,
  45.     INTERNET_PORT nServerPort, IN LPCSTR lpszUserName OPTIONAL,
  46.     LPCSTR lpszPassword OPTIONAL, DWORD dwService,
  47.     DWORD dwFlags, DWORD dwContext
  48.     )
  49. {
  50. HINTERNET hResult = InternetConnectA ( hInternet, lpszServerName,
  51. nServerPort, lpszUserName, lpszPassword, dwService, dwFlags,
  52. dwContext);
  53. WriteLog ( "InternetConnectA: servername=%s, port=%d", lpszServerName, nServerPort );
  54. return hResult;
  55. }
  56. BOOL WINAPI cHttpSendRequestA (
  57.     HINTERNET hRequest, LPCSTR lpszHeaders,
  58.     DWORD dwHeadersLength,LPVOID lpOptional ,
  59.     DWORD dwOptionalLength
  60.     )
  61. {
  62. WriteLog("cHttpSendRequestA");
  63. return HttpSendRequestA ( hRequest, (char *)lpszHeaders, dwHeadersLength, (char *)lpOptional, dwOptionalLength );
  64. }
  65. BOOL WINAPI cInternetReadFileExA(
  66.     IN HINTERNET hFile,
  67.     OUT LPINTERNET_BUFFERSA lpBuffersOut,
  68.     IN DWORD dwFlags,
  69.     IN DWORD dwContext
  70.     )
  71. {
  72. WriteLog ("cInternetReadFileEx()");
  73. char *iq = (char *)&InternetQueryDataAvailable;
  74. WriteLog ( "before hook = %d, %d, %d, %d, %d, addr=%lx", *(iq), *(iq+1), *(iq+2), *(iq+3), *(iq+4), iq );
  75. return InternetReadFileExA ( hFile, lpBuffersOut, dwFlags, dwContext );
  76. }
  77. BOOL WINAPI cInternetReadFile(
  78.     IN HINTERNET hFile,
  79.     IN LPVOID lpBuffer,
  80.     IN DWORD dwNumberOfBytesToRead,
  81.     OUT LPDWORD lpdwNumberOfBytesRead
  82.     )
  83. {
  84. WriteLog ("cInternetReadFile()");
  85. WriteLog ("iq=%lxn", &InternetQueryDataAvailable);
  86. return InternetReadFile ( hFile, lpBuffer, dwNumberOfBytesToRead, lpdwNumberOfBytesRead );
  87. }
  88. BOOL WINAPI cInternetQueryDataAvailable(
  89.     IN HINTERNET hFile,
  90.     OUT LPDWORD lpdwNumberOfBytesAvailable OPTIONAL,
  91.     IN DWORD dwFlags,
  92.     IN DWORD dwContext
  93.     )
  94. {
  95. WriteLog ("QueryData()");
  96. return InternetQueryDataAvailable(hFile, lpdwNumberOfBytesAvailable, dwFlags, dwContext);
  97. }
  98. BOOL WINAPI cInternetWriteFile(
  99.     IN HINTERNET hFile,
  100.     IN LPCVOID lpBuffer,
  101.     IN DWORD dwNumberOfBytesToWrite,
  102.     OUT LPDWORD lpdwNumberOfBytesWritten
  103.     )
  104. {
  105. BOOL hResult = InternetWriteFile ( hFile, lpBuffer, dwNumberOfBytesToWrite, lpdwNumberOfBytesWritten);
  106. return hResult;
  107. }
  108. BOOL WINAPI cInternetCloseHandle(
  109.     IN HINTERNET hInternet
  110.     )
  111. {
  112. return InternetCloseHandle (hInternet);
  113. }
  114. MYAPIINFO myapi_info[] =
  115. {
  116.     {"WININET.DLL", "InternetConnectA", 8, "cInternetConnectA"},
  117. {"WININET.DLL", "HttpSendRequestA", 5, "cHttpSendRequestA"},
  118. {"WININET.DLL", "InternetWriteFile", 4, "cInternetWriteFile"},
  119. {"WININET.DLL", "InternetReadFileExA", 4, "cInternetReadFileExA"},
  120. {"WININET.DLL", "InternetReadFile", 4, "cInternetReadFile"},
  121. {"WININET.DLL", "InternetCloseHandle", 1, "cInternetCloseHandle"},
  122. {"WININET.DLL", "InternetQueryDataAvailable", 4, "cInternetQueryDataAvailable"},
  123.     {NULL}
  124. };
  125. MYAPIINFO *GetMyAPIInfo()
  126. {
  127. return &myapi_info[0];
  128. }