Cómo obtener la ruta del archivo ejecutable del programa a través del proceso del programa
Aquí es donde el proceso de inyección se vuelve interesante. La forma fácil y sencilla es utilizar el método mencionado en Programación principal de Windows, que consiste en inyectar su propia DLL en el método del proceso de destino mediante Crear subproceso remoto. El método para crear un hilo remoto es CreateRemoteThread(). Es muy simple. El uso es el mismo que CreateThread(), excepto que el primer parámetro adicional es el identificador del proceso de destino (recuerde, debe tener el permiso PROCESS_CREATE_THREAD). otros parámetros son los parámetros del proceso de destino en el espacio de direcciones.
El proceso básico debe ser:
Utilizar la función OpenProcess() con permisos PROCESS_CREATE_THREAD, PROCESS_VM_READ y PROCESS_VM_WRITE para abrir el proceso de destino y luego utilizar la función VirtualAllocEx para asignar espacio de memoria. en el proceso objetivo. Luego use la función VirtualAllocEx para asignar un espacio de memoria en el proceso de destino, guarde la ruta de su archivo Dll en este espacio, luego use WriteProcessMemory para escribir esta cadena y luego use la función GetProcAddress para obtener la dirección de LoadLibraryA. debe obtener el espacio de direcciones de su propio proceso La dirección, pero en términos generales, la dirección de la mayoría de los procesos es la misma que la dirección de la función LoadLibraryA. Usando una dirección de memoria asignada en el proceso de destino y la función LoadLibraryA, puede inyectar su propio archivo DLL creando un subproceso remoto.
Solo inyectando su propio código en el proceso de destino puede utilizar la función GetModuleFileName para obtener la ruta del proceso de destino. Por supuesto, este trabajo lo realiza la DLL inyectada en el proceso de destino.