Cómo copiar archivos de enlace para implementar la interceptación de datos
1. Deberíamos usar enlaces en todos los procesos y escribir la función de enlace en un archivo DLL. Esto está claramente estipulado por Microsoft. Existen otros métodos que no se describirán aquí.
2. Establezca el enlace en el archivo DLL.
El ID del subproceso y el ID del subproceso deben llamarse aquí. Los escribiremos en el lado de llamada de la DLL a continuación.
hhook getmsg =::SetWindowsHookEx(WH_GETMESSAGE, GetMessageHookProc,:GetModuleHandle(TEXT("dll.dll ")), threadId);
//Parámetro 1: Tipo de gancho
//Parámetro 1: Tipo de gancho
p>//Parámetro 2: Función de procesamiento del gancho
//Parámetro 3: El módulo donde se encuentra el gancho.
//Parámetro 4: ID del hilo que será interceptado por el gancho. Si desea establecer un enlace global, proporcione 0 aquí.
Escriba la función SetWindowsHookEx() en la función de exportación para permitir que el programa llame al archivo dll.
_ declspec(exportación dll)void SetHook(DWORD threadId)
{
hhook getmsg =::SetWindowsHookEx(WH_GETMESSAGE, GetMessageHookProc,:GetModuleHandle( TEXT( "dll.dll ")), threadId);
}
SetHook() es la función exportada de este dll.
3. Escriba una función en el controlador de enlace e inyecte el archivo DLL cuando el enlace intercepte el mensaje WM_NULL. Debido a que el mensaje WM_NULL es un mensaje inútil, la aplicación generalmente no recibirá este mensaje a menos que enviemos uno nosotros mismos, por lo que cuando inyectamos la DLL, solo necesitamos enviar un mensaje WM_NULL a la aplicación que se va a inyectar e interceptarlo después del gancho Inyecta el gancho cuando se utiliza WM_NULL.
Devolución de llamada LRESULT GetMessageHookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
MSG * pMsg = (MSG *)lParam
if(WM_NULL == pMsg-gt; mensaje)
* loadlibrary w(TEXT("D://mydll.dll"));
}
p>Bien, compila el proyecto DLL y genera el archivo DLL.
4. Escribe a la persona que llama y llama al gancho.
Primero consigue el identificador de la ventana.
HWND FindWindow(LPCTSTR LP nombre de clase,
LPCTSTR lpWindowName
);
Devuelve un identificador de ventana. hWnd.
HWnd=FindWindow(0, el nombre del formulario en el que se va a inyectar la dll (por ejemplo, Qianqianjing))
Utilice hWnd para encontrar el ID del subproceso del formulario .
threadId = GetWindowThreadProcessId(hWnd, 0);
Bien, tenemos el ID del hilo, por lo que podemos llamar al gancho.
SetHook(threadId);
En este momento, el gancho se ha cargado en el hilo de destino.
Enviar mensaje WM_NULL al formulario de destino
SendMessage(hWnd, WM_NULL, 0, 0);
El gancho recibirá un mensaje antes de que lo reciba el formulario de destino. el mensaje mensaje WM_NULL. Debido al juicio realizado en el controlador de enlace, el archivo DLL se carga cuando se recibe el mensaje WM_NULL. Entonces, el archivo DLL se inyecta en el hilo de destino.