Подтвердить что ты не робот

В Windows, как я могу отслеживать в C, какие файлы дочерний процесс читает и пишет?

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

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

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

4b9b3361

Ответ 1

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

Это довольно хорошая статья о приложении: http://www.codeproject.com/Articles/2082/API-hooking-revealed

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

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

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

Удачи.

Ответ 2

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

Вот несколько советов:

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

Если вы хотите лучшего понимания и не пугаетесь при этом вручную, способ перехвата файла IO Windows использует Драйвер фильтра файловой системы. Фактически, есть FilterManager, встроенный в систему Windows, который может перенаправлять все вызовы файловой системы на мини-фильтры.

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

Ответ 3

Пожалуйста, взгляните на следующую статью:

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

Это очень старый, но запущенный способ просмотра изменений каталога.

Ответ 4

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

Ответ 5

Проверьте эту персоничную ссылку на свой вопрос... Это может помочь вам Есть ли что-то вроде linux ptrace syscall в Windows?

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

И я бы хотел, чтобы вы это выяснили. Контроль определенных системных вызовов, выполняемых процессом в Windows