El método que usted propone funcionará bien.
Parece que ha inyectado un dll en un proceso de destino y desea obtener la dirección de una función en ese dll en el proceso de destino del proceso que inyectó el dll.
Supongo que también tiene el dll cargado en el proceso que inyectó el dll en el proceso de destino y que desea crear un subproceso remoto en el proceso de destino y hacer que ejecute la función de destino en el proceso de destino.
Dado que la dll que ha inyectado puede no cargarse en la misma dirección en el proceso objetivo como en el proceso de inyección, no puede simplemente usar la dirección que obtendría al llamar a GetProcAddress en la función en el proceso de inyección .
Un HMODULE es solo la dirección base de la DLL (consulte this answer para obtener más información). De modo que puede tomar el HMODULE del dll en su proceso de inyección y restarlo de la dirección devuelta por GetProcAddress en su función. A continuación, puede agregar el HMODULE del dll inyectado en el proceso objetivo a este desplazamiento para obtener la dirección de la función objetivo en el dll inyectado en el proceso objetivo. Asumiendo que esta función tiene la firma correcta, páselo como la función de hilo a tu llamada para crear el hilo remoto y ahora estás ejecutando la función objetivo en el proceso objetivo.
Lo explico con más detalle en this answer.
Gracias. Tengo otro problema. Cuando estoy haciendo esto -> http://wklej.org/id/700802/ me estoy equivocando. ¿Debo hacerlo así -> http://wklej.org/id/700803/? – Blood
@ Sangre: Ninguna de esas cosas tiene sentido. Agregaste el desplazamiento (para pasar de la base a la función) pero olvidaste restarlo (para obtener la base en primer lugar). Ver mi respuesta Como tienes que hacer ambas cosas, y se cancelan, es mejor que no te molestes. –
David, la única vez que se cancela es si el dll se carga en la misma dirección base en ambos procesos. De lo contrario, mi respuesta funciona y la tuya no :). –