使用 ETW 跟踪 Windows 用户模式进程系统调用

2024-01-05

有些人告诉我,ETW 提供了一种捕获用户模式进程发出的系统调用的机制。我已经列举了可用的提供者,并且只提出了两个可能提供此信息的可能的提供者。第一个是 Microsoft-Windows-Kernel-Audit-API-Calls。该提供商向我展示了以下数据:

<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
	<System>
		<Provider Name="Microsoft-Windows-Kernel-Audit-API-Calls" Guid="{e02a841c-75a3-4fa7-afc8-ae09cf9b7f23}" />
		<EventID>5</EventID>
		<Version>0</Version>
		<Level>4</Level>
		<Task>0</Task>
		<Opcode>0</Opcode>
		<Keywords>0x0</Keywords>
		<TimeCreated SystemTime="2017-06-01T11:59:05.831179100-0500" />
		<Correlation ActivityID="{00000000-0000-0000-0000-000000000000}" />
		<Execution ProcessID="1860" ThreadID="9628" ProcessorID="1" KernelTime="210" UserTime="1260" />
		<Channel />
		<Computer />
	</System>
	<EventData>
		<Data Name="TargetProcessId">4294967295</Data>
		<Data Name="DesiredAccess"> 1052672</Data>
		<Data Name="ReturnCode">3221225483</Data>
	</EventData>
	<RenderingInfo Culture="en-US">
		<Level>Information </Level>
		<Opcode>Info </Opcode>
		<Provider>Microsoft-Windows-Kernel-Audit-API-Calls </Provider>
	</RenderingInfo>
</Event>

这看起来很有希望,但是 EventId 是否对应于系统调用名称?是否有任何文档详细说明 EventId 的实际含义?我在 MSDN 或其他地方找不到任何相关内容。我专门寻找 API 调用,例如 NtCreateFile、NtCreateThreadEx、NtAllocateVirtualMemory 等。

我研究的另一个提供商是“Windows Kernel Trace”。这实际上允许使用诸如“syscall”之类的关键字,然后它将为您提供 SysClEnter/SysClExit 日志,但是这些日志不提供启动它们的进程 ID 也不提供 API。相反,它们只是给出了所输入的系统调用的内核地址。

有更熟悉 ETW 内部运作的人能够回答您如何通过 ETW 收集这些信息吗?


您可以轻松监控与Windows中任何进程相关的系统调用。使用cmd管理员运行以下命令:

logman start "NT Kernel Logger" -p "Windows Kernel Trace" (syscall) -o sys.etl -ets

然后停止它

logman stop "NT Kernel Logger" -ets

当您使用tracerpt解析.etl文件时

tracerpt sys.etl

您可以在 dumpfile.xml 中看到系统调用地址。 使用 Windbg 并使用以下命令从命令行启动它:

windbg.exe -kl -c x*!nt*

您可以看到映射到系统调用名称的地址。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 ETW 跟踪 Windows 用户模式进程系统调用 的相关文章

随机推荐

  • Docker容器运行时的环境变量文件

    我有一个 docker 映像 它基本上按照使用下面构建映像时定义的频率安排 cron 作业 COPY myjobtime etc cron d myjobtime RUN chmod 0644 etc cron d myjobtime cr
  • 如何从控制器内部获取 Symfony2 中 Web 目录的服务器路径?

    问题如下 如何从控制器内部 或因此从其他任何地方 获取 Symfony2 中 Web 目录的服务器路径 我已经发现了什么 也通过在这里搜索 关于 Doctrine 文件处理的食谱文章中建议了这一点 path DIR web 通过搜索发现 只
  • 我可以使用 PHP 提供 MP3 文件吗?

    就像可以使用 php 提供图像以用于验证码等一样 是否可以对音频文件执行相同的操作 我试过这个
  • 使用Python从网页中提取图像链接

    所以我想获取此页面上的所有照片 nba 球队的照片 http www cbssports com nba draft mock draft http www cbssports com nba draft mock draft 然而 我的代
  • Android 如何等待服务实际连接?

    我有一个活动调用 IDownloaderService aidl 中定义的服务 public class Downloader extends Activity IDownloaderService downloader null 在 Do
  • 如何绘制许多不均匀分布的 value_counts

    假设我有以下数据 s2 pd Series 1 2 3 4 5 2 3 333 2 123 434 1 2 3 1 11 11 432 3 2 4 3 3 3 54 34 24 2 223 2535334 3 1 1 0 0 0 0 0 0
  • Ionic PWA 从 config.xml 获取版本号

    我想在 Ionic PWA 中显示 config xml 中的版本号 使用 ionic 本机应用程序版本插件可以轻松完成 ios android 构建 但是 PWA 构建的好方法是什么 npm run build release prod
  • 无法读取实例数据,放弃 python boto 中的错误

    我正在尝试使用 boto 库访问亚马逊 s3 以访问亚马逊 aws publicdatasets 中可用的常见爬网数据 我在 boto 中创建了访问配置文件 Credentials aws access key id my key aws
  • Codeigniter:按日期升序排序

    您好 这是我用于订购和获取数据的模型代码 this gt db gt order by oBy asc query this gt db gt get books 一切工作正常 但是在我的数据库中 我将日期存储为字符串 例如2014 年 1
  • 如何编辑和调试 R 库源

    我在 R 脚本中包含了一个名为 blotter 的库 该库中有一个错误 有没有一种简单的方法可以让我编辑源代码来尝试调试问题 查找trace and browser函数 它们是R中调试的基本工具 假设您要编辑函数的源代码foo 然后说 tr
  • .NET API 更新包括 ID

    我有 Ruby on Rails API 背景 但目前正在开发 NET C WebAPI 我熟悉 C 和 NET Webform 我正在尝试设置一个 PUT 请求来更新数据库中的记录 脚手架方法会覆盖所有字段 而我只想更新通过 PUT 传递
  • 音译/转置 NSString 中的字符

    我想将西里尔字符串音译为最接近的拉丁字符串 例如 gt matreshka gt 伏特加 因此 理想情况下 我希望在 NSString 或其他地方有一些现成的方法 这些方法已经了解有关字母表的所有内容并且可以进行对话 但如果 iOS API
  • 在 x64 Windows 中,有没有办法运行 Runtime.exec() 进程以避免“注册表重定向”

    我们的应用程序在 jvm 32 位中运行 即使在 Windows x64 中也是如此 现在 在某些时候 我需要访问一些注册表值 例如 HKEY LOCAL MACHINE SOFTWARE mycomp 我通过执行来做到这一点 cmd C
  • 如何使用SQL和VBA从Access表中获取多个小计?

    我正在尝试使用 Windows 中的外部 vbs 文件 vbscript 从 Access Table 获取多个小计 mySQL SELECT Data Time Quantity Sum Data Price AS SumOfPrice
  • php shell_exec($cmd) 不在 cronjob 中运行

    很抱歉 我相信 这个问题很糟糕 但是谷歌和这个论坛中的其他文章无法帮助我 我将运行一个 php 脚本 其中包含以下代码 cmd duck u user name p pwd parallel 1 e overwrite y throttle
  • 如何查询数据库字段但忽略 HTML 标记?

    我们有一个包含用于在网站上格式化的 HTML 标记的字段 但我们只需要查询应在屏幕上呈现的文本 而不是 CSS 标签 标签名称 属性名称等内容 有没有办法忽略 SQL 查询或存储过程中的标记 如果有办法做到这一点 我们以后会遇到性能问题吗
  • 如何更改UIWebView中的字符编码?

    问题总结 在 iOS 上浏览非英文网站时 如果没有使用 UIWebView 明确指定正确的字符编码 则页面无法正确显示 详细解释 As the loadRequest UIWebView 中的方法将使用从 Web 服务器发送的字符集标头中指
  • 将查询参数传递给 Flask 装饰器

    我正在为我的 Flask 服务器设置一个令牌身份验证系统 并且我希望能够设置一个装饰器 如下所示 app route my data requires token auth def get my endpoint data Return J
  • jquery滑动侧边栏从左到右

    我正在尝试创建一个滑动侧栏 其效果类似于 www wookmark com http www dynamicdrive com dynamicindex1 slideinmenu htm http www dynamicdrive com
  • 使用 ETW 跟踪 Windows 用户模式进程系统调用

    有些人告诉我 ETW 提供了一种捕获用户模式进程发出的系统调用的机制 我已经列举了可用的提供者 并且只提出了两个可能提供此信息的可能的提供者 第一个是 Microsoft Windows Kernel Audit API Calls 该提供