系统安全C/C++一线开发 [2021]转发并且解析windows日志 转发windows安全日志目前有两种方法 第一种,直接修改windows日志存储目录: ![](https://key08.com/usr/uploads/2021/12/3240987865.png) 比较山寨 第二种,利用windows自己提供的API,分为几步: 首先使用EvtOpenChannelEnum打开EVtx列表: ```cpp EVT_HANDLE channels = EvtOpenChannelEnum(NULL, 0); ``` 此时就可以循环读取,直到发生错误: ```cpp if (EvtNextChannelPath(channels, 0, NULL, (PDWORD)&nameLength) || lastErrCode != ERROR_INSUFFICIENT_BUFFER) { break; } ``` 在循环读取中,检查是否你是你要转发的事件: ```cpp if (wcscmp((wchar_t*)&channelName[0], L"Security") != 0) { continue; } ``` 一旦确定后,就可以增加事件订阅: ```cpp EVT_HANDLE channel = EvtSubscribe(NULL, NULL, &channelName[0], L"*", NULL, NULL, &SysEvtCallback, EvtSubscribeToFutureEvents); ``` 在事件订阅回调中,要创建上下文: ```cpp EVT_HANDLE renderCtx = EvtCreateRenderContext(0, NULL, EvtRenderContextSystem); DWORD bufferSizeRequired = 0; DWORD propertyCount = 0; if (EvtRender(renderCtx, pEvent, EvtRenderEventValues, 0, NULL, &bufferSizeRequired, &propertyCount) == TRUE || LastErrCode != ERROR_INSUFFICIENT_BUFFER) { return NULL; } std::vector buffer(bufferSizeRequired); if (EvtRender(renderCtx, pEvent, EvtRenderEventValues, bufferSizeRequired, &buffer[0], &bufferSizeRequired, &propertyCount) != TRUE) { return NULL; } ``` 此时就可以愉快的解析数据了: ```cpp const EVT_VARIANT* properties = reinterpret_cast(&buffer[0]); const uint32_t pid = properties[EvtSystemProcessID].UInt32Val; const wchar_t* computerName = properties[EvtSystemComputer].StringVal; const uint16_t eventID = properties[EvtSystemEventID].UInt16Val; const wchar_t* providerName = properties[EvtSystemProviderName].StringVal; const wchar_t* userID = properties[EvtSystemUserID].StringVal; const uint16_t OpCode = properties[EvtSystemOpcode].ByteVal; ``` 解析日志的buff提供了API并且可以指定类型,类型有很多,我这边使用XML,因为用message格式化会出现中文 ```cpp bufferSizeRequired = 0; EVT_HANDLE metadata = EvtOpenPublisherMetadata(NULL, providerName, NULL, LOCALE_NEUTRAL, 0); if (EvtFormatMessage(metadata, pEvent, 0, 0, NULL, EvtFormatMessageXml, 0, NULL, &bufferSizeRequired) == TRUE) { return 0; } ``` 效果如下 ![](https://key08.com/usr/uploads/2021/12/3222583833.png) 阅读全文 2021-12-06 huoji 0 条评论