std::string ProtectToString(DWORD protect) {
switch (protect) {
case PAGE_NOACCESS:
return
"<N/A>"
;
case PAGE_READONLY:
return
"READ"
;
case PAGE_READWRITE:
return
"READ_WRITE"
;
case PAGE_WRITECOPY:
return
"WRITE_COPY"
;
case PAGE_EXECUTE:
return
"EXECUTE"
;
case PAGE_EXECUTE_READ:
return
"READ_EXECUTE"
;
case PAGE_EXECUTE_READWRITE:
return
"READWRITE_EXECUTE"
;
case PAGE_EXECUTE_WRITECOPY:
return
"WRITECOPY_EXECUTE"
;
case PAGE_GUARD:
return
"<G/P>"
;
case PAGE_NOCACHE:
return
"<N/C>"
;
case PAGE_WRITECOMBINE:
return
"<W/C>"
;
default:
return
"<N/P>"
;
}
}
std::string StateToString(DWORD state) {
switch (state) {
case MEM_COMMIT:
return
"Committed"
;
case MEM_RESERVE:
return
"Reserved"
;
case MEM_FREE:
return
"Free"
;
default:
return
"Unknown State"
;
}
}
std::string TypeToString(DWORD
type
) {
switch (
type
) {
case MEM_PRIVATE:
return
"Private Memory"
;
case MEM_MAPPED:
return
"Mapped Memory"
;
case MEM_IMAGE:
return
"Image Memory"
;
default:
return
"Unknown Type"
;
}
}
extern krabs::user_trace g_trace(L
"EtwTi-CallMonitor"
);
krabs::event_filter AddRemoteSetThreadContextEventFilter() {
/
*
PC (Program Counter): 程序计数器,指向下一条将要执行的指令的地址。
Sp (Stack Pointer): 栈指针,指向当前栈的顶部位置,用于管理函数调用和局部变量。
Lr (Link Register): 链接寄存器,通常用于保存返回地址,以便在函数调用完成后能返回到正确的位置。
Fp (Frame Pointer): 帧指针,指向当前函数调用的栈帧,用于访问函数参数和局部变量。
*
/
krabs::event_filter EventFilter(krabs::predicates::id_is(
5
));
auto EventCallback
=
[](const EVENT_RECORD& record, const krabs::trace_context& trace_context) {
FAST_TRY_START
krabs::schema schema(record, trace_context.schema_locator);
krabs::parser parser(schema);
auto ProcessID
=
parser.parse<DWORD>(L
"CallingProcessId"
);
auto ThreadID
=
parser.parse<DWORD>(L
"CallingThreadId"
);
auto TargetID
=
parser.parse<DWORD>(L
"TargetProcessId"
);
auto TargetThreadID
=
parser.parse<DWORD>(L
"TargetThreadProcessId"
);
auto Pc
=
parser.parse<PVOID>(L
"Pc"
);
auto Sp
=
parser.parse<PVOID>(L
"Sp"
);
auto Lr
=
parser.parse<PVOID>(L
"Lr"
);
auto Fp
=
parser.parse<PVOID>(L
"Fp"
);
std::ostringstream ShowMsg;
ShowMsg <<
"[EtwTi]"
<<
"[Remote SetThreadContext] "
<<
"CallingProcessId : "
<< ProcessID <<
" | "
<<
"CallThreadId : "
<< ThreadID <<
" | "
<<
"TargetProcessId : "
<< TargetID <<
" | "
<<
"TargetThreadId : "
<< TargetThreadID <<
" | "
<<
"Program Counter : "
<< std::
hex
<< std::showbase << reinterpret_cast<uintptr_t>(Pc) <<
" | "
<<
"Stack Pointer : "
<< std::
hex
<< std::showbase << reinterpret_cast<uintptr_t>(Sp) <<
" | "
<<
"Link Register : "
<< std::
hex
<< std::showbase << reinterpret_cast<uintptr_t>(Lr) <<
" | "
<<
"Frame Pointer : "
<< std::
hex
<< std::showbase << reinterpret_cast<uintptr_t>(Fp) <<std::endl;
WriteLogger::WriteLoggerInformation(ShowMsg.
str
(), WriteLogger::WARNING_TYPE);
FAST_TRY_END
};
EventFilter.add_on_event_callback(EventCallback);
return
EventFilter;
}
/
/
以他作为示例 剩下的可以自己写
void RunEtwTi() {
WriteLogger::WriteLoggerInformation(
"Try to load EtwTi Service"
, WriteLogger::INFO_TYPE);
WriteLogger::WriteLoggerInformation(
"EtwTi Add Filters Success | Number : 1"
, WriteLogger::INFO_TYPE);
krabs::provider<> ti_provider(L
"Microsoft-Windows-Threat-Intelligence"
);
ti_provider.
any
(KERNEL_THREATINT_KEYWORD_ALLOCVM_REMOTE |
KERNEL_THREATINT_KEYWORD_PROTECTVM_REMOTE |
KERNEL_THREATINT_KEYWORD_MAPVIEW_REMOTE |
KERNEL_THREATINT_KEYWORD_QUEUEUSERAPC_REMOTE |
KERNEL_THREATINT_KEYWORD_SETTHREADCONTEXT_REMOTE |
KERNEL_THREATINT_KEYWORD_ALLOCVM_LOCAL |
KERNEL_THREATINT_KEYWORD_PROTECTVM_LOCAL |
KERNEL_THREATINT_KEYWORD_MAPVIEW_LOCAL |
KERNEL_THREATINT_KEYWORD_WRITEVM_REMOTE |
KERNEL_THREATINT_KEYWORD_READVM_REMOTE);
/
/
ti_provider.add_filter(AddRemoteVirtualAllocateEventFilter());
/
/
ti_provider.add_filter(AddRemoteVirtualProtectEventFilter());
/
/
ti_provider.add_filter(AddRemoteMapViewEventFilter());
/
/
ti_provider.add_filter(AddRemoteQueueUserApcEventFilter());
ti_provider.add_filter(AddRemoteSetThreadContextEventFilter());
/
/
ti_provider.add_filter(AddRemoteReadProcessMemoryEventFilter());
/
/
ti_provider.add_filter(AddRemoteWriteProcessMemoryEventFilter());
/
/
ti_provider.add_filter(AddLocalMapViewEventFilter());
/
/
ti_provider.add_filter(AddLocalVirtualProtectEventFilter());
/
/
ti_provider.add_filter(AddLocalVirtualAllocateEventFilter());
g_trace.enable(ti_provider);
g_trace.start();
WriteLogger::WriteLoggerInformation(
"Run EtwTi (Microsoft-Windows-Threat-Intelligence) Service Success"
, WriteLogger::INFO_TYPE);
}
void StopEtwTi() {
WriteLogger::WriteLoggerInformation(
"Stop EtwTi Service Success"
, WriteLogger::INFO_TYPE);
g_trace.stop();
}