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.
Cita de: saawyeer en 28 Marzo 2013, 00:26 AM
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.
Si te referís a otra manera de hacer un salto con 6 bytes a lo sumo si la hay, aún así te estás respondiendo tu misma pregunta un par de renglones arriba... :P
B#
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]
La alternativa con 6 bytes: (que me falto agregar :P)
push Direccion;
ret;
B#
@IEAX
@x64Core
Muchas gracias por sus respuestas, ya solucione el problema :)