BPE32 多态引擎剖析
autor : nEINEI
e-mail: neineit@gmail.com
一 BPE32 简介
二 技术细节分析
2.1 -- 整体流程设计
2.2 -- 随机数设计
2.3 -- 代码加密方案
2.4 -- 对抗 VM 的 SEH 设计
2.5 -- 随机数生成与寄存器选择
2.6 -- 垃圾指令生成方式
2.7 -- 解密器设计
2.8 -- 重建指令流程
三 代码解析
四 检测方案
一 BPE32 简介:
BPE32 ( Benny's Polymorphic Engine for Win32 )多态引擎是由 Benny's /29A 在 #4 期发布的 一
个病毒多态引擎,之后在病毒编写如 ( 如 Win32.Vulcano) 及壳的编写 ( 如 ASProtect) 当中都得到 了
应用, BPE32 是一个很不错的多态引擎 , 这里将从设计的角度分析该引擎。
按照 Benny's 的描述, BPE32 引擎有如下特点:
1 可以通过创建 SEH 来干扰一些
AV
2 随机使用寄存器做代码的混淆
3 同一功能代码,由不同的指令动态生成
4 功能代码具有空间随机分布
5 具有仿真 CALL 及 jmp 指令
6 在代码之间插入垃圾指令(也包括使用未公开的 SALC 指令)
我们先看一下 BPE32 的调用时的输入参数,
ESI -- 指向待加密的 virus 数据。
EDI -- 指向一块内存数据,用来存放由 BPE32 生成的解密器及加密数据。
ECX -- 加解密数据的计数,加解密时按照 4byte 的方式操作,数据由公式 (_end - start
+3)/4 获得。
EBP -- 做重定位时使用。
输出参数 ,
EAX -- 解码器加上加密数据后的大小,不对齐,精确到 1byte 而不是一个 DWORD
调用很方式简单,例如:
mov esi, vir_body ; 病毒体
mov edi, pmem ; 内存空间
mov ecx, 6c0h ; 解密计数
call BPE32
这样调用后 pmem 里面就是一个重建的病毒代码了。
下面将对具体技术细节做分析。