免杀初探(三)
字数 1559 2025-08-09 15:23:08

免杀技术初探:汇编基础与实战绕过

一、汇编语言基础

1. x86汇编体系结构

汇编语言作为低级编程语言,直接与计算机硬件交互,特别是CPU。x86架构定义了多种寄存器:

通用寄存器

  • EAX:算术运算,存储返回值
  • EBX:存储内存地址
  • ECX:循环操作和比较的计数器
  • EDX:算术除法和乘法运算,I/O操作地址

索引和指针寄存器

  • ESI:源索引,数据传输源
  • EDI:目标索引,数据传输目标
  • ESP:指向堆栈顶部
  • EBP:指向堆栈底部
  • EIP:指向下一条要执行的指令

2. 内存类型

堆栈(Stack)

  • 后进先出(LIFO)原则
  • 存储变量和函数参数
  • 由ESP和EBP寄存器管理

堆(Heap)

  • 动态分配内存
  • 可随时分配和释放
  • 用于程序运行时执行

3. CPU模式

  • 实模式:16位寄存器(AX, BX, DX)
  • 保护模式:32位寄存器(EAX, EBX, EDX)
  • 长模式:64位寄存器(RAX, RBX, RDX)

二、关键汇编指令

  1. MOV:值复制 MOV eax,1
  2. ADD:值相加 ADD eax,1
  3. SUB:值相减 SUB eax,1
  4. CMP:值比较 CMP eax,2
  5. XOR:逻辑异或 XOR EAX,EAX (寄存器清零)
  6. PUSH:压栈 PUSH EAX
  7. POP:出栈 POP eax
  8. RET:函数返回
  9. JMP:无条件跳转 JMP EAX
  10. JE/JZ:等于/为零时跳转
  11. JNE/JNZ:不等于/非零时跳转

三、免杀技术实战

1. 二进制文件修改技术

调试项目技术

  • 使用x32dbg等调试工具修改二进制文件
  • 示例:修改sub esp,18sub esp,17
  • 修补文件(Ctrl+P → Patch File)
  • 效果:可减少防病毒引擎检测数量

时间戳修改

  • 使用工具如BulkFileChanger修改文件创建时间
  • 原理:破坏防病毒软件的静态签名检测

2. XOR对称加密实现

IDEAL
MODEL SMALL
STACK 100h
DATASEG
    data db 101B
    key db 110B
CODESEG
encrypt:
    xor dl, key
    mov bl, dl
    ret
decrypt:
    xor bl, key
    mov dl, bl
    ret
start:
    mov ax, @data
    mov ds, ax
    mov bl, data
    mov dl, bl
    call encrypt
    call decrypt
exit:
    mov ah, 4ch
    int 21h
END start

执行流程

  1. 初始化数据和密钥
  2. 调用encrypt:用密钥XOR加密数据
  3. 调用decrypt:用相同密钥XOR解密数据
  4. 程序退出

3. 垃圾代码技术

实现方法

  1. 添加不执行的条件跳转
  2. 插入无关变量名和空函数
  3. 添加影响硬盘驱动器的操作
  4. 加载不存在的DLL
  5. 创建合法但无用的注册表值

示例对比

  • 原始代码:直接建立C2连接
  • 混淆后:添加多个空函数和无效条件判断

四、开发环境配置

1. NASM汇编器

  • 下载:https://www.nasm.us/pub/nasm/releasebuilds/2.15.05/win64/nasm-2.15.05-installer-x64.exe
  • 默认安装后配置环境变量

2. GCC编译器

  • 下载:http://mingw-w64.org/doku.php/download
  • 默认安装后配置环境变量

3. Turbo汇编器(TASM)

  • 下载:https://sourceforge.net/projects/guitasm8086/
  • 使用F9快捷键运行代码

五、简单汇编程序示例

global _main
extern _printf
section .text
_main:
    push string
    call _printf
    add esp, 4
    ret
string:
    db 'Hello World!', 10, 0

编译命令

nasm -fwin32 HelloWorld.asm
gcc HelloWorld.obj -o HelloWorld.exe

代码分析

  1. 声明主函数和外部printf函数
  2. 定义text段包含指令
  3. _main子例程:
    • 推送字符串到栈
    • 调用printf
    • 清理栈(add esp,4)
    • 返回(ret)
  4. string段定义消息内容

六、总结与关键点

  1. 汇编基础:必须掌握寄存器用途和关键指令
  2. 免杀核心:修改而不破坏文件功能
  3. XOR加密:简单有效的对称加密方法
  4. 混淆技术:垃圾代码增加分析难度
  5. 环境工具:NASM、GCC、TASM、x32dbg等
  6. 关键思路:通过微小改动绕过特征检测

核心原则:免杀的关键在于思路要灵活多变,结合多种技术实现有效规避。

免杀技术初探:汇编基础与实战绕过 一、汇编语言基础 1. x86汇编体系结构 汇编语言作为低级编程语言,直接与计算机硬件交互,特别是CPU。x86架构定义了多种寄存器: 通用寄存器 EAX :算术运算,存储返回值 EBX :存储内存地址 ECX :循环操作和比较的计数器 EDX :算术除法和乘法运算,I/O操作地址 索引和指针寄存器 ESI :源索引,数据传输源 EDI :目标索引,数据传输目标 ESP :指向堆栈顶部 EBP :指向堆栈底部 EIP :指向下一条要执行的指令 2. 内存类型 堆栈(Stack) 后进先出(LIFO)原则 存储变量和函数参数 由ESP和EBP寄存器管理 堆(Heap) 动态分配内存 可随时分配和释放 用于程序运行时执行 3. CPU模式 实模式 :16位寄存器(AX, BX, DX) 保护模式 :32位寄存器(EAX, EBX, EDX) 长模式 :64位寄存器(RAX, RBX, RDX) 二、关键汇编指令 MOV :值复制 MOV eax,1 ADD :值相加 ADD eax,1 SUB :值相减 SUB eax,1 CMP :值比较 CMP eax,2 XOR :逻辑异或 XOR EAX,EAX (寄存器清零) PUSH :压栈 PUSH EAX POP :出栈 POP eax RET :函数返回 JMP :无条件跳转 JMP EAX JE/JZ :等于/为零时跳转 JNE/JNZ :不等于/非零时跳转 三、免杀技术实战 1. 二进制文件修改技术 调试项目技术 使用x32dbg等调试工具修改二进制文件 示例:修改 sub esp,18 为 sub esp,17 修补文件(Ctrl+P → Patch File) 效果:可减少防病毒引擎检测数量 时间戳修改 使用工具如BulkFileChanger修改文件创建时间 原理:破坏防病毒软件的静态签名检测 2. XOR对称加密实现 执行流程 : 初始化数据和密钥 调用encrypt:用密钥XOR加密数据 调用decrypt:用相同密钥XOR解密数据 程序退出 3. 垃圾代码技术 实现方法 : 添加不执行的条件跳转 插入无关变量名和空函数 添加影响硬盘驱动器的操作 加载不存在的DLL 创建合法但无用的注册表值 示例对比 : 原始代码:直接建立C2连接 混淆后:添加多个空函数和无效条件判断 四、开发环境配置 1. NASM汇编器 下载:https://www.nasm.us/pub/nasm/releasebuilds/2.15.05/win64/nasm-2.15.05-installer-x64.exe 默认安装后配置环境变量 2. GCC编译器 下载:http://mingw-w64.org/doku.php/download 默认安装后配置环境变量 3. Turbo汇编器(TASM) 下载:https://sourceforge.net/projects/guitasm8086/ 使用F9快捷键运行代码 五、简单汇编程序示例 编译命令 : 代码分析 : 声明主函数和外部printf函数 定义text段包含指令 _ main子例程: 推送字符串到栈 调用printf 清理栈(add esp,4) 返回(ret) string段定义消息内容 六、总结与关键点 汇编基础 :必须掌握寄存器用途和关键指令 免杀核心 :修改而不破坏文件功能 XOR加密 :简单有效的对称加密方法 混淆技术 :垃圾代码增加分析难度 环境工具 :NASM、GCC、TASM、x32dbg等 关键思路 :通过微小改动绕过特征检测 核心原则 :免杀的关键在于思路要灵活多变,结合多种技术实现有效规避。