Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: mmob en 29 Octubre 2007, 11:18 am



Título: Obtener handles de ficheros asociados a un proceso
Publicado por: mmob en 29 Octubre 2007, 11:18 am
Alguien podría indicarme cómo obtener la lista de ficheros abiertos por un proceso (Process)? es posible? de no ser posible podríais decirme cómo obtener la lista de archivos abiertos? aunque creo que lo primero es posible.
Muchas gracias


Título: Re: Obtener handles de ficheros asociados a un proceso
Publicado por: mmob en 30 Octubre 2007, 14:25 pm
La solución con la que suelo encontrarme pasa por utilizar la función del API ntQuerySystemInformation (ntdll.dll), incluso hay ejemplos en C# en la web, problema, es necesario el uso de un driver, en mi caso, la aplicación no carga este driver (que muy amablemente habían incluido con el ejemplo), al ejecutar me saca el error "El sistema no puede hallar el archivo especificado" cuando carga el driver me aseguro que la ruta y el nombre del fichero .sys sea correcto, pero ni así, como no sea un tercer fichero referenciado por el sys no se que pueda ser.
Creo que por no cargar este driver es por lo después la aplicación me muestra todos los handles del proceso que le indico menos los correspondientes a los ficheros (que es lo que realmente necesito).
Si podeis ayudarme os lo agradecería.


Título: Re: Obtener handles de ficheros asociados a un proceso
Publicado por: Hendrix en 30 Octubre 2007, 23:51 pm
Eso mismo te hiba a decir, con un driver esto se soluciona muy rapido....si quieres saber los archivos que abre X programa tambien se puede hacer sin necesidad de driver, inyectando una Dll al iniciarse el archivo, lo malo de este metodo es que sera solo para una aplicación concreta....con esa Dll hookeas la api que quieras (OpenFile) y listo, a interceptar llamadas.....

Si te interesa eso de la Dll en este mismo post deje un codigo en C# para inyectar Dll's  :)


Título: Re: Obtener handles de ficheros asociados a un proceso
Publicado por: mmob en 6 Noviembre 2007, 09:33 am
Bueno, se puede utilizar el comando HANDLE, que podemos descargar de http://www.microsoft.com/technet/sysinternals/utilities/handle.mspx, en C# se puede iniciar un proceso redirigiendo la salida y cogemos nosotros el resultado.
Problema: no salen los archivos que tenemos abiertos en remoto, solo los que tengamos abiertos de nuestra propia máquina, es decir, si yo abro un documento de Word que se encuentra en mi maquina y otro que está en otra máquina, el mio sale en la lista, el otro no.
Conoceis algun comando del estilo pero que sirva para que tambien salgan los remotos?.


Título: Re: Obtener handles de ficheros asociados a un proceso
Publicado por: ~~ en 6 Noviembre 2007, 15:53 pm
Una cosa _Hendrix, pero las dll's de C# valen para inyectar? la verdad es q nunca he provado por q no se como definir la DllMain... :huh:


Título: Re: Obtener handles de ficheros asociados a un proceso
Publicado por: Hendrix en 6 Noviembre 2007, 17:32 pm
No ya que no son nativas...;)


Título: Re: Obtener handles de ficheros asociados a un proceso
Publicado por: mmob en 6 Noviembre 2007, 18:43 pm
Nunca he hecho eso de inyectar una dll, podrías explicarme por favor?
Serviria tambien para detectar los archivos que la aplicacion abre y que estan alojados en otra maquina?
Gracias por vuestro tiempo.


Título: Re: Obtener handles de ficheros asociados a un proceso
Publicado por: byebye en 6 Noviembre 2007, 19:24 pm
ntQuerySystemInformation la puedes usar desde modo usuario.


Título: Re: Obtener handles de ficheros asociados a un proceso
Publicado por: mmob en 17 Diciembre 2007, 17:43 pm
Hola de nuevo, para el tema de averiguar archivos que son abiertos he tenido que inclinarme por utilizar un file system filter driver.
Estoy en pruebas con el del FileMon (filem.sys). Lo cargo sin problema, e incluso me responde al comando de versión (me devuelve la versión correctamente) pero a la hora de pedirle los datos relativos a las IRPs "capturadas" me devuelve una cadena vacia. Por supuesto antes fijo los drivers a escuchar, establezco un filtro con el tipo de fichero que me interesa y activo el proceso de filtrado. Realmente no se si es alguno de estos comandos el que configuro mal.
Alguien conoce este driver y puede darme alguna pista? por ejemplo, acerca de los parametros que deben recibir.
NOTA: El desarrollo de prueba es una aplicacion para consola escrita en C# 2005.