¿El enlazamiento de API se realiza mediante un proceso en una página compartida, visible para todos los demás procesos?

0

Supongamos que tengo un ejecutable que enlaza la API CreateFileW ubicada en Kernel32.dll que se comparte globalmente en todo el sistema para todos los demás procesos. Desde enganchar, quiero decir, que he sobrescrito el prólogo de CreateFileW

jmp Hook_CreateFileW
nop
// ...rest of original CreateFileW code...

Mi duda ::

Por lo que sé, Kernel32.dll se cargará en alguna dirección que sea global en todo el sistema y sus páginas se compartan entre los procesos. Entonces, ¿enganchar CreateFileW en mi exe, significa que también está enganchado para todos los demás procesos? Cualquier otro proceso, que llame a CreateFileW intentará saltar Hook_CreateFileW ?

    
pregunta Abhineet 24.06.2014 - 09:32
fuente

1 respuesta

0

No, todos los enlaces de API (IAT, EAT, Desvío, etc.) solo afectan el proceso que está modificando a medida que el cargador de PE toma una copia local de Kernel32 en lugar de usar un código compartido.

Necesitaría inyectar todos los procesos con su gancho para afectar a todos los procesos que necesitará SeDebugPrivilege para abrir ciertos procesos del sistema.

Si desea profundizar, puede conectar SSDT en el kernel o modificar .text directamente, pero surge un problema con x64 PatchGuard.

¿Qué te hace querer enganchar CreateFileW de todos modos? Tal vez hay una mejor solución para sus requerimientos?

La razón por la que ve la misma dirección en todos los procesos puede establecer una dirección base preferida para sus módulos. Si la dirección no está en uso, obtendrá ese espacio de memoria, de lo contrario, se reubicará. Dado que Kernel32 (dependiendo de PE) se carga en etapas muy tempranas, es poco probable que los otros módulos que no son del sistema. Por lo tanto, Kernel32 generalmente siempre obtendrá su dirección base preferida. Sin embargo, puede reubicarlo, así que no confíe en que la dirección haya sido estática.

    
respondido por el Paul 24.06.2014 - 09:46
fuente

Lea otras preguntas en las etiquetas