La inyección de procesos en resumen es inyectar código en el espacio de memoria en ejecución.
Windows asigna espacio de memoria 4G para cada proceso, y el código en este espacio 4G puede ser accedido y ejecutado por este proceso. "Parchear" el software es realmente inyección de procesos.
También hay muchos piratas informáticos que usan inyección de proceso para inyectar código malicioso en el proceso objetivo para ataques.
Los métodos de inyección de procesos de uso común en el entorno de Windows incluyen: CreaterMotethread, Apcinject, SuspendThread, SetWindowhookex, etc.
Además, he aprendido un método de inyección relativamente único: inyección de reflexión. La inyección de reflexión se usa principalmente para implementar la inyección a través de operaciones en archivos PE, con una alta tasa de éxito de la inyección y el aprendizaje más valioso.
OpneProcess ).VirtualAllocEX ).WriteProcessMemory ).CreateRemoteThread ).从kenerl32中得到loadlibrary的函数地址( GetProcAddress ),将写入目标进程的动态库路径作为参数传入loadlibrary。WaitForSingleObejct ), libere la memoria y cierre el mango.CreateProcess Establece el sexto parámetro para suspender.QueueUserAPC para agregar LoadLibrary como un objeto APC a la cola APC del hilo y pasa la ruta de la DLL como un parámetro. Presta atención a la liberación de los mangos y la memoria. La idea general es implementar la función loadlibrary que carga la biblioteca dinámica en la DLL y cargar en el proceso de destino.
Loadibrary se implementa modificando el archivo PE:
1. Escriba el DLL en el espacio de aplicación del espacio de direcciones de proceso de destino.
2. Obtenga la dirección de la función que carga la suya en el archivo implementado en la DLL, cree un hilo remoto y pase la dirección de la función. La función que se carga en la DLL también se implementa ingeniosamente.
setWindowsHookEX . Sistema operativo de Windows, VS2015.
Ambas pruebas se pasan en el sistema de Windows de 32 bits y en el sistema de Windows de 64 bits.
.
|-- APCInject(Ring0) // 驱动层的APC注入
|-- APCInject // Ring3层的APC注入
|-- CreateSuspend // 挂起线程注入
|-- InjectByRegister // 注册表注入(未测试)
|-- ReflectDll // 反射注入的Dll
|-- ReflectiveInject // 反射注入
|-- RemoteThread // 远程线程注入
|-- Src // 驱动层的APC注入源码
|-- Dll.dll // 32位测试Dll
|-- Dll64.dll // 64位测试Dll
|-- Process-Inject.sln // 项目启动文件
|-- README.md // 项目说明文件
.
Bienvenido a la solicitud de extracción y bienvenido a solicitar problemas.
Al interpretar este trabajo, firme y compártelo de la misma manera.