Autor
|
Tema: API Hooking (C++) (Leído 9,042 veces)
|
HaX991
Desconectado
Mensajes: 33
|
hola estoy auyudando a un amigo a parhear una api pero intentamos de todo y no lo logramos..
lib = psapi.dll api = EnumProcesses
La api comienza aqui: 76BB3A9A > $ 6A 1C PUSH 1C 76BB3A9C . 68 C83BBB76 PUSH psapi.76BB3BC8 76BB3AA1 . E8 5BDBFFFF CALL psapi.76BB1601 76BB3AA6 . BE 00800000 MOV ESI,8000 76BB3AAB . 8975 E4 MOV DWORD PTR SS:[EBP-1C],ESI 76BB3AAE . 56 PUSH ESI 76BB3AAF . 8B3D B810BB76 MOV EDI,DWORD PTR DS:[<&KERNEL32.LocalAl>; kernel32.LocalAlloc 76BB3AB5 . EB 25 JMP SHORT psapi.76BB3ADC
cuantos bytes abria que cojer?
pd: usamos dll inyeccion
Gracias, saludos!!
|
|
|
En línea
|
|
|
|
Horricreu
Wiki
Desconectado
Mensajes: 290
¡La verdad os hará libres!
|
Léete este taller de MazarD, muy bueno: http://mazard.info/tutos/apihooking.pdf Saludos
|
|
« Última modificación: 18 Julio 2010, 18:34 pm por Horricreu »
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.966
Israel nunca torturó niños, ni lo volverá a hacer.
|
Si usas el metodo mas comun de poner un jmp a tu direccion (5 bytes) tenes que guardar en memoria, para ejecutar despues si queres llamar a la funcion original, las dos primeras instrucciones (7 bytes).
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
HaX991
Desconectado
Mensajes: 33
|
gracias pero probe desde 5,7,9,18,20 y peta igalmennte ...
si hookeo otra api va de lujo pero esa no se como hacerlo...
yo creo k son 7bytes pero k tengo k recalcular la distancia de salto...
|
|
« Última modificación: 12 Julio 2010, 15:14 pm por HaX991 »
|
En línea
|
|
|
|
[Zero]
Wiki
Desconectado
Mensajes: 1.082
CALL DWORD PTR DS:[0]
|
Pon el código de como lo estas haciendo, el salto (E9) son 5 bytes, y tu cojes 7, seguro saltas 7-5=2 bytes antes de donde tienes que saltar, con un debuger puedes verlo . Saludos
|
|
|
En línea
|
“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza. Nietzsche
|
|
|
HaX991
Desconectado
Mensajes: 33
|
esta es la funcion: bool Hook(char* lpLib, char* lpModule, int iBytes, BYTE *ucDstAddress, HOOK_ADDR *hook) { HMODULE hLib; hLib = GetModuleHandle(lpLib); if (hLib) { BYTE *ucSrcAddress; ucSrcAddress = (BYTE *) GetProcAddress(hLib, lpModule); if (ucSrcAddress) { DWORD ulOldProtect; if ((Buffer = (BYTE *) malloc(iBytes + 5)) == NULL ) return 0; if (VirtualProtect((void *) Buffer, iBytes + 5, PAGE_EXECUTE_READWRITE, &ulOldProtect) == 0) return 0; memcpy(Buffer , ucSrcAddress , iBytes ); Buffer += iBytes; *Buffer = 0xE9; Buffer++; *((signed int *) Buffer) = ucSrcAddress - Buffer + (iBytes - 5) + 1; if (VirtualProtect((void *) ucSrcAddress, iBytes, PAGE_EXECUTE_READWRITE, &ulOldProtect) == 0) return 0; hook->ulDstModAddr = (unsigned long) ucDstAddress; *ucSrcAddress = 0xE9; ucSrcAddress++; *((signed int *) ucSrcAddress) = ucDstAddress - ucSrcAddress - 4; FlushInstructionCache(GetCurrentProcess(), NULL, NULL); strcpy(hook ->lpModule , lpModule ); hook->uiBytes = iBytes; hook->ulSrcModAddr = (unsigned long) ucSrcAddress; return true; } } return false; }
y se usaria asi: ret = Hook("psapi", "EnumProcesses", 7, (BYTE *) EnumProcesses_Hook, &addr); pEnumProcesses = (BOOL (__stdcall *)(DWORD*, DWORD, DWORD*)) (Buffer - 7 - 1);
saludos!!
|
|
« Última modificación: 12 Julio 2010, 15:35 pm por HaX991 »
|
En línea
|
|
|
|
[Zero]
Wiki
Desconectado
Mensajes: 1.082
CALL DWORD PTR DS:[0]
|
Si puedes poner un compilado tambien me ayudaría, seguramente la línea: *((signed int *) Buffer) = ucSrcAddress - Buffer + (iBytes - 5) + 1;
Sea la causante del fallo, pero a ojo no me aclaro para calcular la distancia del salto . Saludos
|
|
|
En línea
|
“El Hombre, en su orgullo, creó a Dios a su imagen y semejanza. Nietzsche
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.966
Israel nunca torturó niños, ni lo volverá a hacer.
|
Eso parece estar bien ... ¿No estara mal el hook mismo (EnumProcesses_Hook)? ¿Estas usando stdcall? Y de cualquier manera: ¿Cual es EXACTAMENTE el problema? Hasta ahora solo dijiste que "no logran" parchear una funcion ...
|
|
« Última modificación: 12 Julio 2010, 16:22 pm por Eternal Idol »
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
HaX991
Desconectado
Mensajes: 33
|
Bueno las declaraciones y protipos de las funciones estan correctas, son estas. BOOL WINAPI EnumProcesses_Hook (DWORD*, DWORD, DWORD*); BOOL (__stdcall *pEnumProcesses)(DWORD*, DWORD, DWORD*);
mm la idea es inyectar una dll al taskmgr.exe para modificar el resultado de la api "EnumProcesses" y ocultar un proceso, probe antes con la api "TerminateProcess" y va de lujo, la de terminateprocess son 5 bytes y se hookea bien y sirve todo perfect, pero al poner la otra algo en el hook ago mal k cuando la inyecto al llamar el taskmgr.exe (admin de tareas) a esa api entones falla y salta el tipico error de la memoria no se puede leer.... pero lo raro esk si hookeo la api "FindNextFileA" o "FindNextFileW" ambas de 7 bytes de salto sirve perfecto pero enumprocesses no... EI: lo siento pero las reglas prohiben dejar binarios.ai van el inyector y la dll. abrir el admin de tareas, luego el inyector y poner "taskmgr.exe" e inyectarla, si pongo 7 bytes no peta pero tampoco hace nada el admin sirve = y eso k puse en la funcion falsa BOOL WINAPI EnumProcesses_Hook (DWORD *pProcessIds, DWORD cb, DWORD *pBytesReturned) { return false; }
alguna solucion?
|
|
« Última modificación: 12 Julio 2010, 17:17 pm por Eternal Idol »
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.966
Israel nunca torturó niños, ni lo volverá a hacer.
|
|
|
« Última modificación: 12 Julio 2010, 17:17 pm por Eternal Idol »
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Win32 API Hooking
Hacking
|
nts94
|
0
|
2,726
|
9 Febrero 2012, 23:54 pm
por nts94
|
|
|
API Hooking by IAT Patching
Análisis y Diseño de Malware
|
Binary_Death
|
0
|
2,272
|
22 Abril 2012, 17:00 pm
por Binary_Death
|
|
|
Derechos de acceso y API Hooking
« 1 2 »
ASM
|
fary
|
10
|
7,620
|
23 Septiembre 2012, 20:14 pm
por .:UND3R:.
|
|
|
Hooking ntQuerySystemInformation.
Análisis y Diseño de Malware
|
APOKLIPTICO
|
5
|
4,331
|
16 Noviembre 2012, 21:53 pm
por APOKLIPTICO
|
|
|
El arte del API Hooking.
Análisis y Diseño de Malware
|
fary
|
5
|
4,804
|
18 Enero 2016, 03:35 am
por zerointhewill
|
|