我的目标是确定执行命令的时间,确切地说是读取和写入哪些文件。在linux中,我可以使用ptrace(有工作,类似于strace的工作),在freebsd和MacOS上我可以使用ktrace系统命令执行此操作。您将在Windows中使用什么来获取此信息?
到目前为止,我的研究表明,我要么使用调试器接口(在许多方面类似于ptrace),要么使用ETW。第三种方法是插入DLL以拦截系统调用。不幸的是,我没有经验可以猜测每种方法的挑战性。
有什么建议吗?
答案 0 :(得分:4)
正如您所建议的,这是一个相当简单的任务,需要使用DLL注入API钩子来解决。
这是一篇关于该应用程序的非常好的文章:http://www.codeproject.com/Articles/2082/API-hooking-revealed
我相信你可以找到关于这个问题的最新文章。
但是,您可能需要使用C ++来实现此类实用程序。顺便说一下,程序可以禁用dll注入,例如我无法在photoshop的试用版上使用这种方法。
因此,在开始编写自己的解决方案之前,您可能想要检查是否可以在所需的过程中注入dll。
祝你好运。答案 1 :(得分:4)
不幸的是,似乎没有简单的方法来拦截Windows上的文件级操作。
以下是一些提示:
如果您希望更好地理解并且不会害怕手动,那么Windows拦截文件IO的方式是使用File System Filter Driver。实际上,Windows系统中嵌入了FilterManager,可以将所有文件系统调用转发给 minifilters 。
要构建它,系统的接口由FilterManager提供,您只需(...)编写并安装执行实际过滤的 minifilter - 再次注意从未测试过那...
答案 2 :(得分:1)
请查看以下文章:
http://www.codeproject.com/Articles/950/CDirectoryChangeWatcher-ReadDirectoryChangesW-all
这是一种非常古老但正在运行的方式来观察目录更改。
答案 3 :(得分:1)
微软拥有一系列名为SysInternals的工具。有一个名为Process Monitor的程序将显示特定进程的所有文件访问。这很可能是你想要的。
答案 4 :(得分:1)
为您的问题检查此特定链接... 这可能对你有帮助 Is there something like linux ptrace syscall in Windows?
此外,如果你正在运行像XP这样的较低版本,你应该检查这个链接..
https://technet.microsoft.com/en-us/sysinternals/bb896645.aspx
如果它没有帮助,请告诉我
另外,我想请你查看这个男人.. Monitoring certain system calls done by a process in Windows