VS配置优化:编译器的一行选项,也是红队勇士的免检盒

admin 2025年6月16日00:08:21评论5 views字数 2450阅读8分10秒阅读模式
📌 免责声明:本系列文章仅供网络安全研究人员在合法授权下学习与研究使用,严禁用于任何非法目的。违者后果自负。

一、研究背景

编译器生成的二进制文件特征(代码结构、元数据、指纹)可能被杀软的静态或动态检测规则匹配。Visual Studio 的构建配置(特别是运行库、编译器优化、链接方式等)会直接影响最终生成的二进制文件的结构、行为特征和依赖关系,而这些都是杀毒软件/EDR 检测的关键依据。

二、推荐测试环境

本文建议使用 Visual Studio 2019 或更新版本,选用 C++ 项目模板进行相关构建实验。操作系统建议为 Windows 10 x64,以便测试主流杀毒软件对程序行为的响应。
VS配置优化:编译器的一行选项,也是红队勇士的免检盒

三、基本模式选择

选择“Release”模式,不要使用"Debug"模式  

VS配置优化:编译器的一行选项,也是红队勇士的免检盒

四、常规配置

以下是一些在Visual Studio(VS)中进行免检配置的相关内容 

1、关闭SDL检查 

项目属性页→配置属性→C/C++→常规 

VS配置优化:编译器的一行选项,也是红队勇士的免检盒

2、运行库配置

项目属性页→配置属性→C/C++→代码生成(同3、图)

需结合实际情况设置多线程(/MT)或多线程DLL(/MD),既取决于目标的CRT环境,部分老的机器上没有CRT环境就需要/MT(自带CRT,但是生成的文件较大);又取决于杀软机制。

3、禁用安全检查(/GS-)

项目属性页→配置属性→C/C++→代码生成 

VS配置优化:编译器的一行选项,也是红队勇士的免检盒

4、关闭生成清单 

项目属性页→配置属性→链接器→清单文件 

VS配置优化:编译器的一行选项,也是红队勇士的免检盒

五、其它配置参考 

5、去除调试信息 

项目属性页→配置属性→链接器→调试 

VS配置优化:编译器的一行选项,也是红队勇士的免检盒

6、关闭清单详细输出

项目属性页→配置属性→清单工具→常规→详细输出→否

VS配置优化:编译器的一行选项,也是红队勇士的免检盒

7、取消嵌入清单

项目属性页→配置属性→清单工具→输入和输出→嵌入清单→否 

VS配置优化:编译器的一行选项,也是红队勇士的免检盒

8、禁用优化

项目属性页→配置属性→C/C++→优化 

VS配置优化:编译器的一行选项,也是红队勇士的免检盒

9、启用最小重新生成

项目属性页→配置属性→C/C++→代码生成 

VS配置优化:编译器的一行选项,也是红队勇士的免检盒

六、测试代码示例与构建对比

下面是一段在Windows系统中创建一个 .lnk 快捷方式的代码 
#include<windows.h>#include<shobjidl.h>#include<shlguid.h>#include<shlwapi.h>#include<stdio.h>#pragma comment(lib, "ole32.lib")#pragma comment(lib, "shell32.lib")#pragma comment(lib, "shlwapi.lib")HRESULT CreateLink(LPCWSTR lpszPathObj, LPCWSTR lpszPathLink, LPCWSTR lpszDesc){    HRESULT hres;    IShellLinkW* psl;    hres = CoInitialize(NULL);    if (FAILED(hres)) return hres;    hres = CoCreateInstance(CLSID_ShellLinkNULLCLSCTX_INPROC_SERVER, IID_IShellLinkW, (LPVOID*)&psl);    if (SUCCEEDED(hres)) {        IPersistFile* ppf;        if (!PathFileExistsW(lpszPathObj)) {            wprintf(L"目标文件不存在: %sn", lpszPathObj);            CoUninitialize();            return E_FAIL;        }        psl->SetPath(lpszPathObj);        psl->SetDescription(lpszDesc);        hres = psl->QueryInterface(IID_IPersistFile, (LPVOID*)&ppf);        if (SUCCEEDED(hres)) {            hres = ppf->Save(lpszPathLink, TRUE);            ppf->Release();        } else {            wprintf(L"QueryInterface失败,HRESULT: 0x%08Xn", hres);        }        psl->Release();    } else {        wprintf(L"CoCreateInstance失败,HRESULT: 0x%08Xn", hres);    }    CoUninitialize();    return hres;}int main(){    LPCWSTR lpszPathObj = L"C:\Users\Coriander\Desktop\1.html";    LPCWSTR lpszPathLink = L"C:\Users\Coriander\Desktop\ToolsShortcut.lnk";    LPCWSTR lpszDesc = L"快捷方式测试";    HRESULT hres = CreateLink(lpszPathObj, lpszPathLink, lpszDesc);    if (SUCCEEDED(hres)) {        wprintf(L"✅ 快捷方式创建成功!n");    } else {        wprintf(L"❌ 创建失败,HRESULT: 0x%08Xn", hres);    }    system("pause");    return 0;}
在未进行配置优化的情况下,程序构建结果被杀毒软件(如360)直接拦截,如图:
VS配置优化:编译器的一行选项,也是红队勇士的免检盒
而仅仅通过禁用 SDL 检查,程序可在相同环境下正常运行。
VS配置优化:编译器的一行选项,也是红队勇士的免检盒
VS配置优化:编译器的一行选项,也是红队勇士的免检盒
VS配置优化:编译器的一行选项,也是红队勇士的免检盒

七、总结

通过调整 Visual Studio 项目属性配置,可以显著影响程序的结构性特征和静态表现,有助于在合法安全测试中构造更高质量的测试样本。
#红队演练 #VisualStudio #检测绕过 #Loader #C2框架 #VS配置

参考文章:

通过Vs配置绕过360QVM,VT全绿

原文始发于微信公众号(仇辉攻防):VS配置优化:编译器的一行选项,也是红队勇士的免检盒

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年6月16日00:08:21
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   VS配置优化:编译器的一行选项,也是红队勇士的免检盒https://cn-sec.com/archives/4166180.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息