2017-12-01 72 views
0

wininet 라이브러리를 사용하여 인터넷 요청을 모니터링합니다.HINTERNET 핸들에서 URL을 얻는 방법

후킹 기능은 "InternetConnectW", "HttpOpenRequestW"및 "InternetReadFile"입니다.

먼저 "InternetConnectW"에서 HINTERNET 핸들을 얻습니다.

그리고 두 번째 HINTERNET 핸들을 "HttpOpenRequestW"에서 첫 번째 핸들을 얻습니다.

"InternetReadFile"을 연결할 때 IN 매개 변수에는 두 번째 핸들이 포함됩니다.

이것은 InternetReadFile Hooking Function입니다.

 
BOOL 
STDAPICALLTYPE 
Hook_InternetReadFile(
__in HINTERNET hFile, 
__out LPVOID lpBuffer, 
__in DWORD dwNumberOfBytesToRead, 
__out LPDWORD lpdwNumberOfBytesRead 
) 
{ 
    // i want to get Internet http URL here!!!!! 

    return Origin_InternetReadFile(hFile, lpBuffer, dwNumberOfBytesToRead, lpdwNumberOfBytesRead); 
} 

HINTERNET에서 URL을 가져 오는 방법은 무엇입니까?

답변

1

INTERNET_OPTION_URLInternetQueryOption을 사용해보세요.

예 :하는 szUrl이 outbuffer 세계적으로

TCHAR *szUrl = new TCHAR[INTERNET_MAX_URL_LENGTH]; 
DWORD dwLen = sizeof(TCHAR)*INTERNET_MAX_URL_LENGTH; 
BOOL bRet = InternetQueryOption(hFile, INTERNET_OPTION_URL, szUrl, &dwLen); 
+0

할당되어 있습니까? https://msdn.microsoft.com/ko-kr/library/windows/desktop/aa385101(v=vs.85).aspx – lucidmaj7

+0

내가 어디 dealloc szUrl? – lucidmaj7

+0

힙에 고정 길이 배열을 할당하기 위해 Pointless를 사용하고 sizeof를 그렇게 사용하는 것은 잘못되었습니다. 그것은 버퍼가 아닌 포인터의 크기를 제공합니다. –