我正在向Firefox(浏览器)注入一个DLL并挂钩WSARecv。 问题是,数据缓冲区是Gzip压缩的。我已经尝试挂钩send()函数并删除“Accept-Encoding:gzip,deflate”,但很多网络服务器都不会理解这一点。
所以我试着坚持解压缩缓冲区,改变一些东西并再次压缩它。因此,我将zlib.dll和zlib.lib链接到我的DLL中并编写了一个小包装类:
int CGZip::DecompressString(char* src, int srcLen, char** destination, int* destLen)
{
//Define the source, destination, source length, and destination length
char *dest= new char[(unsigned int)destLen];
//Decompress the string in src and place it in dest
int result=uncompress((unsigned char *)dest,(uLongf*)destLen,(const unsigned char *)src,srcLen);
//Return the results of the decompression
*destination = dest;
return(result);
}
但是当我将解压缩包含到钩子化的WSARecv中时,我的dll将不再被加载(不会调用DLL_PROCESS_ATTACH)。当我删除以下5行时,dll会再次加载。
szUncompressed = (char*)malloc((size_t)lpBuffers->len * 100);
CGZip *ziphandler = new CGZip();
ziphandler->DecompressString(lpBuffers->buf, lpBuffers->len, &szUncompressed, &iUncompressedLength);
szUncompressed[iUncompressedLength] = '\0';
知道为什么DLL不再加载,或者我如何轻松解压缩和压缩数据缓冲区?
提前致谢:)
答案 0 :(得分:1)
好的,我解决了它,我只需要在我自己的dll之前注入zlib.dll并且它有效:>