2011-01-28 8 views
7

Recuerdo que para mi proyecto universitario de último año escribí un monitor de registro C#, sin embargo, cuando lo comparé con la aplicación Microsoft ProcessMonitor (no recuerdo su nombre exacto, pero era una compañía comprada por MSoft), no estaba capturando tantos llamadas de registro.¿Supervisión del registro, incluidos los accesos de registro en modo kernel?

¿Esto fue porque estaba usando un contenedor C# y como tal, solo habría estado capturando accesos de registro en modo usuario?

He utilizado este envoltorio: http://www.codeproject.com/KB/DLL/EasyHook64.aspx

Para atrapar el registro de accesos en modo de núcleo tendría que escribir en C++?

+2

Usted está pensando en RegMon de Sysinternals, que ha sido sustituido por el monitor de procesos http://technet.microsoft. com/en-us/sysinternals/bb896645 –

+0

¡El monitor de proceso es el que yo usé, sí! – Tom

+1

¿Las versiones anteriores de estas utilidades SysInternals no vienen con el código fuente, o estoy soñando? –

Respuesta

9

Process Monitor está utilizando un controlador de kernel o ETW (ver a continuación) para capturar eventos de registro. Sé que Process Monitor usa ETW para algunos de sus datos (como información de red).

Un mecanismo de enganche o desvío de API como EasyHook normalmente funciona en el nivel de la API Win32 (por ejemplo, RegSetValue o RegCreateKeyEx en ADVAPI32.dll). Debido a esto, tiene la limitación que usted menciona: solo se capturan los accesos de registro en modo usuario. Además, el enganche API generalmente se realiza por proceso, por lo que debe insertarse en cada proceso en el que desee recopilar datos. También debería supervisar la creación del proceso si realmente desea capturar todos los accesos en el sistema.

Event Tracing for Windows (ETW) sería una manera fácil (hablando relativamente) de capturar todos los accesos de registro. La idea básica detrás de ETW es que el OS, el tiempo de ejecución, la biblioteca e incluso los desarrolladores de aplicaciones cotidianas pueden agregar instrumentación específica a su código para registrar datos sobre eventos y escenarios interesantes. Este seguimiento tiene poca carga y se puede recolectar fácilmente. ETW ha existido por un tiempo, pero realmente ha ganado tracción en todo el kernel comenzando con Vista. Casi todos los principales subsistemas del kernel ahora están equipados con ETW. También es ahora la base del registro de eventos de Windows.

ETW tiene una buena cantidad de equipaje y carece de documentación sustancial en algunas áreas, pero si usted está interesado, puede retirar el siguiente:

Para atrapar el registro de modo de núcleo accesos tendría que escribir en C++?

No, utilizando la biblioteca TraceEvent mencionada anteriormente, puede usar C# para capturar y analizar los accesos de registro kernel y modo de usuario en todo el sistema.

+1

Interesante, entonces, usando ETW, ¿puedo capturar accesos a archivos en tiempo real? –

+1

@ChibuezeOpata: Esencialmente, sí. Habrá cierta latencia dependiendo de la carga del sistema y cuántos eventos ETW se están procesando, pero en el caso general, debería poder ver los accesos a los archivos a medida que ocurren. ETW es increíblemente poderoso en este sentido. –

3

Para capturar el acceso de registro en modo kernel tiene que escribir un controlador en C++, no hay otra forma de hacerlo. Process Monitor es un controlador, por eso puede capturar los accesos de usuario y kernel.

Puede descargar versiones antiguas de Regmon y Filemon aquí:

http://www.decuslib.com/decus/vmslt00a/nt/filemon.htm

http://www.decuslib.com/decus/vmslt00a/nt/regmon.htm

+0

+1 para mayor claridad en ProcMon, pero RE: "no hay otra manera de hacerlo": el kernel de Windows tiene instrumentación ETW incorporada para eventos de registro. Incluso es posible obtener pilas completas de usuario y de kernel para los accesos de registro también. –

+1

Eso no está disponible en XP, es por eso que no mencioné. –

Cuestiones relacionadas