Cita de: daryo en 2 Abril 2013, 19:32 PM
que me recomiendan es mejor usar la api de windows o el process.h?
para hacer threats
o es indiferente lo que use
Usar Win32, librerias como esas son simplemente wrappers a las APIs.
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes MenúCita de: daryo en 2 Abril 2013, 19:32 PM
que me recomiendan es mejor usar la api de windows o el process.h?
para hacer threats
o es indiferente lo que use
Cita de: paulagarcum en 2 Abril 2013, 11:30 AM
¿Compilar no, ensamblar? Editor, editor.
Cita de: NathanD en 29 Marzo 2013, 18:15 PM
Sí, lo he probado con más de un compilador.
#include <stdio.h>
#define MAXLINE 60
int main()
{
char *ptr;
ptr = (char*) malloc(MAXLINE * sizeof(char) );
printf("Introduce una frase: ");
fgets(ptr, MAXLINE+1, stdin);
printf("\n%p = %c", ptr,*ptr);
ptr++;
printf("\n%p = %c", ptr, *ptr);
printf("\n\n%p %p", ptr, ptr++);
getchar();
return 0;
}
Cita de: saawyeer en 28 Marzo 2013, 00:26 AM
Bueno tengo el siguiente problema, he realizado con éxito un salto (jmp) en una dirección de un proceso:
DWORD dwDireccion = 0x00692B0C;
__declspec( naked ) void asmSalto() {
__asm
{
mov eax, dwDireccion
jmp Direccion
}
}
Se inyectan correctamente las instrucciones pero acá esta mi problema, las instrucciones originales de la dirección antes de ser inyectadas eran 6 bytes en la memoria pero con la inyección anterior equivale a mas de 6 bytes, lo que origina que se cuelgue el programa:
Instrucciones originales de 6 bytes:0042276B - 29 83 64 04 00 00 - sub [ebx+00000464],eax
Se podría hacer con un simple salto; Pero da error el copilador, se vería en memoria asi:
__asm
{
jmp 0x00692B0C
}
Son solo 5 bytes en la memoria le agregamos 1 mas con un nop y tendríamos el salto correctamente:
00540967 - E9 A0 21 15 00 - jmp 00692B0C
0054096C - 90 - nop
Hay alguna forma de hacer el salto sin ocupar mas de 6 bytes? Agradecería mucho sus respuestas o comentarios.
jmp dword ptr [0x80808080]
Cita de: ignorantev1.1 en 26 Marzo 2013, 16:32 PM
La app tiene un procedimiento para terminar los hooks y es llamado al finalizar la aplicación (ojo: finalizar, no parar el programa en el IDE). En ese procedimiento:
funcion finalizarApp()
...
call UnhookWindowsHookEx(msHook)
hooks = false 'Esta bandera la utilizo para saber el estado de los hooks.
...
Con la bandera "hooks" me aseguro que se haya pasado por el procedimiento que remueve los hooks. En la función que recibe al hook:
Public Function MSProc(ByVal nCode As Long, ByVal wParam As Long, lParam As Long) As Long
if not hooks then debug.print "Hola, sigo funcionando después de hacer unhook, ¿te jode?"
If nCode = 0 Then
'TODO
Else
If hooks Then msHook = CallNextHookEx(msHook, nCode, wParam, lParam)
End If
End Function
No recuerdo porque hice de esta forma la función, y no entiendo bien el para qué de "CallNextHookEx"...
Saludos y gracias.
hook = SetWindowsHookEx(WH_MOUSE_LL, AddressOf MouseMonitorWinProc, App.hInstance, 0&)
call UnhookWindowsHookEx(hook)