免杀入门混淆加密方法分析,看这一篇就够了。
字数 847 2025-08-24 07:48:09
免杀入门:混淆加密方法分析
前言
在渗透测试中,直接使用Metasploit、Cobalt Strike等工具生成的恶意程序或代码通常会触发防病毒和入侵检测系统的查杀机制。本文详细介绍了多种AV和IDS规避技术,帮助绕过安全软件的检测。
编码器技术
编码器通过对shellcode进行编码/模糊处理/变形,从原始shellcode中删除无效字符,从而逃避检测。主要技术包括:
- 在特定位置添加垃圾字节
- 使用硬编码的单字节密钥对字节进行XOR或加减法运算
- 将字节移位到特定位置
- 交换连续字节
- 以上技术的组合使用
第一种编码方法:加法减法(ADD,SUB)
基本原理
- 选择一个加密密码n(0-255之间的值)
- 原始字节中的每个字符都与n相加
- 需要确保加密后的字节不包含坏字符
示例
使用n=77作为加密密码:
77 + eb = 162
解码器实现
解码器位于shellcode之前,每个字节与n相减:
global _start
section .text
_start:
jmp short call_decoder
decoder:
pop esi
decoder_loop:
sub byte [esi], 77 ; 减去加密密码
jz shellcode ; 如果为零则跳转到shellcode
inc esi
jmp short decoder_loop
call_decoder:
call decoder
第二种编码方法:复合编码
编码步骤
- 对字节进行NOT操作
- 加0x1字节
- 随机选择一个字节(0-255)与shellcode字节进行XOR
- 在shellcode末尾添加该随机字节作为结束标记
- 在字节之间插入随机字节
解码器实现
; 首先将shellcode地址放入ESI寄存器
pop esi
; 删除shellcode中的随机字节
; shellcode格式: A r B r C r D r E r F r G e
; ESI指向A, ESI+2指向B, ESI+4指向C...
; EDI指向存储位置
自动化编码工具开发
关键考虑
- 加密字节和加密后的字节都不应包含坏字符
- 加密密码从0-255随机选择,每次加密结果可能不同
Python脚本示例
# 伪代码
for byte in original_shellcode:
encrypted_byte = (byte + n) % 256
# 检查是否为坏字符
if encrypted_byte not in bad_chars:
# 处理
测试与验证
测试流程
- 使用编码器对code进行编码
- 通过ollydbg调试验证解码过程
- 使用MSF生成shellcode并进行编码加密
- 使用自动化脚本处理
- 通过virScan等工具扫描验证效果
示例编码结果
\xeb\x09\x5e\x80\x2e\x9e\x74\x08\x46\xeb\xf8\xe8\xf2\xff\xff\xff\xdf\xe0\xe1\xe2\x9e
总结
本文介绍了两种有效的shellcode编码方法:
- 简单的加法减法编码
- 复合编码(NOT+ADD+XOR+随机字节插入)
通过开发自动化编码工具和相应的解码器,可以有效绕过常见杀毒软件的检测。关键在于:
- 选择合适的加密密码
- 避免坏字符
- 实现高效解码器
- 随机化编码过程增加变异性
这些技术可以组合使用,根据目标环境调整,提高渗透测试的成功率。