2017-06-02 531 views
0

一些人告訴我,ETW提供了一種機制來捕獲用戶模式進程產生的系統調用。我列舉了可用的提供者,並且只提出了兩種可能提供此信息的可能性。第一個是Microsoft-Windows-Kernel-Audit-API-Calls。該供應商表示我下面的數據:Windows用戶模式使用ETW跟蹤進程系統調用

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

這看起來很有希望,但事件ID對應的系統調用的名字嗎?是否有任何文檔詳細說明EventId實際表示的內容?我無法在MSDN或其他地方找到任何相關信息。我正在尋找API調用,如NtCreateFile,NtCreateThreadEx,NtAllocateVirtualMemory等。

我看過的另一個提供者是「Windows Kernel Trace」。這實際上允許關鍵字例如「系統調用」,然後它將爲您提供SysClEnter/SysClExit日誌,但是這些日誌不提供啓動它們的進程ID,也不提供API。他們只是給出看起來是正在輸入的系統調用的內核地址。

是否有人對ETW的內部工作更加熟悉,能夠就如何通過ETW收集這些信息提供答案?

回答

0

您可以輕鬆地監控與Windows中的任何進程相關的系統調用。使用CMD管理員,運行以下命令:

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

,然後停止

logman stop "NT Kernel Logger" -ets 

當你使用tracerpt

tracerpt sys.etl 

解析.etl文件,你可以轉儲文件中看到系統調用地址.XML。 使用WinDbg中,並從使用此命令在命令行中啓動它:

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

你可以看到映射到系統調用的名稱地址。