Pregunta

No es un terriblemente buena pregunta, lo siento.

Tengo un programa que necesita ser alertado cuando se abre un archivo desde el explorador (es decir ShellExecute (A / W) que se llama).

Por desgracia, Microsoft eliminó la interfaz COM (IShellExecuteHook) que le permite conectar estos eventos en Vista y hasta, supuestamente porque el código más antiguo podría causar un accidente debido a los cambios. Hubo un trabajo en torno a volver a habilitar esta característica, pero ya no funciona.

He hecho un poco de investigación y parece que la única manera de coger llamadas a ShellExecute es volver a enrutar la llamada a SHELL32.DLL. Por el momento, estoy mirando a inyectar mi propia DLL en el proceso de explorador, y luego copiar la entrada de IAT para ShellExecute en cierta asignación de direcciones en mi DLL, y, finalmente, modificando la entrada de IAT para ShellExecute para que apunte a mi función, la cual notificará el programa que un archivo se abrió y saltar a la función ShellExecute original, cuya dirección almacenamos anterior.

Mi mayor preocupación en este caso es antivirus. No harán que estoy inyectando en el explorador? No harán que estoy modificando el IAT?

Otra preocupación es si esto es seguro; ¿es posible (o más bien probable) para los privilegios de seguridad del explorador para no permitir la inyección a través de CreateRemoteThread? Si es así, ¿existe una mejor manera de hacer esto inyección?

¿Hay una mejor manera de hacer esto en general?

EDIT: Para cualquier persona que se encuentra con esto en el futuro, explorer.exe no tiene IAT para shell32.dll; que tiene una cabecera, pero el golpe seco está llena de valores de basura, por lo que no hay manera (por lo que puedo decir) para recuperar la entrada de las funciones importadas. Parece que
código de efecto túnel es la única manera de conectar esto.

¿Fue útil?

Solución

La mayoría de las buenas heurísticas antivirus deben recoger en parches tabla de importación como una señal de alerta para un troyano.

La documentación en línea para madcodehook tiene algunos artículos largos sobre diversas técnicas de inyección de código, sus ventajas / desventajas, y la API proporciona algunas opciones para especificar "seguro" enganchando: http://www.madshi.net/madCodeHookDescription.htm

Otros consejos

La biblioteca de desvíos:

http://research.microsoft.com/en-us/projects/ desvíos /

A partir de Microsoft Research permite enganchar arbitraria de funciones. Es posible que dará un tiro.

Algunas más recursos sobre vínculos de API:

Fácil gancho: http://www.codeplex.com/easyhook

Deviare: http://www.nektra.com/products/ Deviare-api-conexión ventanas /

Un interesante post: http://www.codeproject.com/KB/system /hooksys.aspx

Al hacer API se enganche es muy importante para evaluar los entornos en los que es necesario ejecutar. No todas las bibliotecas son compatibles x86 / x64 por ejemplo.

Los desvíos sólo es compatible con x64, en la versión con licencia (pagado). Fácil gancho soporta x86 y x64.

Explorador de Windows en Windows Vista y Windows 7 ni siquiera llaman ShellExecuteA o ShellExecuteW.

No tiene sentido molesta. Lol: -)

Y, si se puede añadir, he probado enganchando ambas funciones con los dos ganchos en línea 32 bits y 64 bits.

Lo sentimos. Lol: -)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top