2015-04-02 3 views
18

Моя цель - определить при выполнении команды, какие файлы она считывает и записывает. В linux я могу сделать это, используя ptrace (с работой, сродни тому, что делает strace), а на freebsd и MacOS я могу сделать это с помощью команды ktrace system. Что бы вы использовали для получения этой информации в окнах?В Windows, как я могу отслеживать в C, какие файлы дочерний процесс читает и пишет?

Мои исследования пока показывают, что я либо использую интерфейс отладчика (аналогично ptrace разными способами), либо, возможно, ETW. Третьей альтернативой является вставка DLL для перехвата системных вызовов по мере их создания. К сожалению, у меня нет опыта догадываться о том, насколько сложным будет каждый из этих подходов.

Любые предложения?

+0

Вероятно, достаточно ш с графическим интерфейсом? Попробуйте Windows Internals (filemon). – harper

+0

как об использовании монитора ресурсов в Windows 7 или explorer процесса – GingerJack

+0

Нет, GUI-инструмент недостаточен, я должен быть в состоянии сделать это из своей программы, которая написана на C (но при необходимости может использовать C++). –

ответ

4

Как вы предположили, это довольно простая задача для решения проблемы с API Hooking с использованием DLL-инъекции.

Это очень хорошая статья о программе: http://www.codeproject.com/Articles/2082/API-hooking-revealed

Я считаю, что вы можете найти более свежие статьи об этой проблеме.

Однако, возможно, вам понадобится использовать C++ для реализации такой утилиты. Кстати, программы могут отключить инъекцию dll, например, я не смог использовать этот подход в пробной версии Photoshop.

Итак, вы можете проверить, можете ли вы вставить dll в процессе, который вы хотите, с существующим решением, прежде чем начинать писать свои собственные.

Удачи.

4

К сожалению, кажется, что нет простого способа перехвата операций на уровне файлов в Windows.

Вот некоторые подсказки:

  • вы можете попробовать использовать FileMon от Sysinternals, если оно достаточно для ваших нужд, или попытаться взглянуть на источник инструмента
  • вы могли бы сделать использование коммерческих программное обеспечение, как Detours - берегитесь, я никогда не использовал это сам, и я не уверен, что это действительно отвечает вашим потребностям

Если вы хотите лучше понять и не испугавшись делать это вручную , способ перехвата файла IO Windows использует File System Filter Driver. На самом деле в системе Windows есть FilterManager, которая может переадресовывать все вызовы файловой системы на minifilters.

Для его создания интерфейс с системой предоставляется фильтром FilterManager, и у вас есть только (...) для кодирования и установки мини-фильтра , который выполняет фактическую фильтрацию - остерегайтесь снова никогда не проверять, что ...

+0

Я начал изучать мини-фильтры файловой системы, но с трудом вижу, как они могут помочь. Похоже, что фильтр необходимо установить в систему, возможно, используя административные привилегии? –

1

Пожалуйста, обратите внимание на следующие статьи:

http://www.codeproject.com/Articles/950/CDirectoryChangeWatcher-ReadDirectoryChangesW-all 

это очень старый, но работает способ следить за изменениями каталога.

+0

Мне кажется, что этот подход не позволяет выяснить, какой процесс выполнял модификации. Кроме того, похоже, что он не обеспечивает механизм для определения того, какие файлы были прочитаны. –

1

Корпорация Майкрософт владеет кучей инструментов под названием SysInternals. Существует программа под названием Process Monitor, которая покажет вам все обращения к файлам для определенного процесса.Это очень вероятно, что вы хотите.

1

Проверить это perticular ссылку из вашего вопроса ... Это может помочь вам Is there something like linux ptrace syscall in Windows?

Кроме того, если вы работаете в более низком, как Хр вы должны проверить эту ссылку из .. https://technet.microsoft.com/en-us/sysinternals/bb896645.aspx
Позвольте мне знать, если это не поможет

Кроме того, я хотел бы вам проверить это человек .. Monitoring certain system calls done by a process in Windows

Смежные вопросы