2009-09-20 4 views
0

J'injecte une DLL dans firefox (navigateur) et accrocher WSARecv. Le problème est que le tampon de données est compressé par Gzip. J'ai déjà essayé d'accrocher la fonction send() et de supprimer le "Accept-Encoding: gzip, deflate", mais beaucoup de serveurs ne le comprendront pas. J'ai donc essayé de m'en tenir à la décompression du tampon, en changeant certaines choses et en les comprimant à nouveau. Par conséquent, je reliaient les zlib.dll et zlib.lib dans ma DLL et écrit une petite classe d'emballage:DLLHook - GZip décompression d'une chaîne

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); 
} 

Mais quand j'inclus la décompression dans le crochet WSARecv mon dll ne sera pas plus chargé (pas DLL_PROCESS_ATTACH est appelé). Lorsque je supprime les 5 lignes suivantes, la DLL est à nouveau chargée.

szUncompressed = (char*)malloc((size_t)lpBuffers->len * 100); 
CGZip *ziphandler = new CGZip(); 
ziphandler->DecompressString(lpBuffers->buf, lpBuffers->len, &szUncompressed, &iUncompressedLength); 
szUncompressed[iUncompressedLength] = '\0'; 

Toute idée pourquoi la DLL ne se charge pas plus, ou comment je peux facilement décompresser et compresser le tampon de données?

Merci à l'avance:)

Répondre

1

Ok je l'ai résolu, je devais juste injecter zlib.dll avant mon propre dll et cela a fonctionné:>