连接WinInet可以通过Wininet::InternetReadFile()方法访问HTTP,但是lpBuffer不包括headers。
虽然我可以读取响应头(Wininet::HttpQueryInfo ),但我无法修改或删除它们。
是否可以使用Wininet挂钩修改/删除HTTP响应头?
有一种方法可以从Wininet钩子访问完整的HTTP响应缓冲区吗?
发布于 2022-06-26 17:24:41
你不能,cz的http响应头是随意来自服务器的回复!
但是,如果您想让钩子Wininet::HttpQueryInfo函数用假数据填充http头响应,那么可以通过创建类似的钩子
BOOLAPI _stdcall HookedHttpQueryInfoW(
_In_ HINTERNET hRequest,
_In_ DWORD dwInfoLevel,
_Inout_updates_bytes_to_opt_(*lpdwBufferLength, *lpdwBufferLength) __out_data_source(NETWORK) LPVOID lpBuffer,
_Inout_ LPDWORD lpdwBufferLength,
_Inout_opt_ LPDWORD lpdwIndex
);
WriteProcessMemory(GetCurrentProcess(), (LPVOID)FuncAddress, FuncOriginalBytes, sizeof(FuncOriginalBytes), &bytesWritten); HttpQueryInfo使用Handler检索http头,因此在这里您可以对您的web执行另一个请求,以定制其返回头,并在返回实际函数时将其设置为常量(用您的请求处理程序修改hrequest )。
return HttpQueryInfoW(
_In_ HINTERNET MyHandler,
_In_ DWORD dwInfoLevel,
_Inout_updates_bytes_to_opt_(*lpdwBufferLength, *lpdwBufferLength) __out_data_source(NETWORK) LPVOID lpBuffer,
_Inout_ LPDWORD lpdwBufferLength,
_Inout_opt_ LPDWORD lpdwIndex
);现在,如果你打电话
HttpQueryInfoW(hrequest, HTTP_QUERY_RAW_HEADERS_CRLF, lpOutBuffer,&dwSize,NULL);它将是
HttpQueryInfoW(MyHandler, HTTP_QUERY_RAW_HEADERS_CRLF, lpOutBuffer,&dwSize,NULL);顺便说一句,有各种各样的窍门,但对我来说,这似乎很容易解释,也很容易理解。
https://stackoverflow.com/questions/45169744
复制相似问题