Download presentation
Presentation is loading. Please wait.
Published byΜητροφάνης Παχής Modified 5年之前
1
虚拟机加密,是把源程序的X86指令变成自定义的伪指令,执行时内置在保护程序中的VM就会启动,读取伪指令,然后解析执行
基础知识 虚拟机加密,是把源程序的X86指令变成自定义的伪指令,执行时内置在保护程序中的VM就会启动,读取伪指令,然后解析执行
2
每个伪指令对应一个相应的Handler
3
这就是实现虚拟机指令的Handler
4
下面就是一条变型后的指令,其目的就是push 一个word入栈
VM_PUSHw_IMMEDIATEw (压入堆栈WORD) 代码: MOV AX,WORD PTR DS:[ESI-2] XCHG AL,AH SUB AX,BX ADD AX,0F271 NEG AX XOR AX,1CA6 SUB BX,AX SUB BX,AX LEA ESI,[ESI-2] MOV WORD PTR SS:[EBP],AX
5
VMProtect简介 VMP是一个栈虚拟机,它的一切操作都是基于堆栈传递的。在VMP中,每一个伪指令就对应一个handler,VM中有一个核心的Dispatch部分读取程序的bytecode,然后在DispatchiTable里面定位到不同的handler中执行。绝大多数情况下,在一个handler中执行完成后,程序将回到Dispatch部分,然后到next handler中执行,见下图:
7
X86寄存器基本用途 EBP和EDI是VM堆栈指针(不是常规的堆栈) ESI是伪指令指针(相当于常规的EIP)
EAX是VM解密数据的主运算寄存器 EBX是VM解密数据的辅运算寄存器 ECX是常规的循环计数器 ESP是常规的堆栈栈顶指针 EDX是读取伪指令表数据; EDI 指向堆栈的上限并使用[EDI+EAX]的方式向下发展 EBP指向堆栈的下限并向上发展 ESI指向的内存块里包括要执行的伪指令序列,而不同的是,当VM要是使用到立即数时,也是从ESI读取
8
VM第一印象 入口 堆栈
9
解密执行
10
VMP Unpacking Key Point
11
理论知识 SHE, VEH(异常处理) 发生异常时系统的处理顺序:
1.系统首先判断异常是否应发送给目标程序的异常处理例程,如果应该发送,目标程序正在被调试,则系统 挂起程序并向调试器发送EXCEPTION_DEBUG_EVENT消息 2.如果程序没有被调试或者调试器未能处理异常,系统会继续查找你是否安装了线程相关的异常处理例程,如果安装了,系统就把异常发送给程序seh处理例程,交由其处理 3.每个线程相关的异常处理例程可以处理或者不处理这个异常,如果不处理并且安装了多个线程相关的异常处理例程,交由其他例程处理. 4.如果这些例程均选择不处理异常,且程序处于被调试状态,系统仍会再次挂起程序通知调试器 5.如程序未处于被调试状态或者debugger没有能够处理,并且用SetUnhandledExceptionFilter安装了最后异常处理例程的话,系统转向对它的调用
12
异常触发流程
13
异常分发流程
14
注册一个SHE例程 ASSUME FS:NOTHING push offset perThread_Handler push fs:[0]
mov fs:[0],esp xor ecx,ecx mov eax,200 cdq div ecx
15
传递给异常处理句柄的参数 EXCEPTION_RECORD STRUCT EXCEPTION_RECORD ENDS ;
ExceptionCode DWORD ? ;//异常码 ExceptionFlags DWORD ? ;//异常标志 pExceptionRecord DWORD ? ;//指向另外一个EXCEPTION_RECORD的指针 ExceptionAddress DWORD ? ;//异常发生的地址 NumberParameters DWORD ? ;//下面ExceptionInformation所含有的dword数目 ExceptionInformation DWORD EXCEPTION_MAXIMUM_PARAMETERS dup(?) EXCEPTION_RECORD ENDS ;
16
重要的结构 程序新的开始的地方
17
下图是系统异常处理时调用程序注册的异常处理Handler
直接在返回后下断(为什么?????)
18
工具 (VMP分析插件) 插件的”打开虚拟机指令窗口”,找到vRet和vCall指令下断(为什么要找这两条指令????)
19
VMP IAT修复 1. VMSweeper 2. 清除TLS
20
VMP的一些Anti 1. 2. 3. VMware后门检测 mov eax, 564D5868h mov ebx, h mov ecx, Ah mov edx, h in eax, dx
21
4. NtSetInformationThread HideFromDebugger
5. GetModuleFileName ("SbieDll.dll")
22
参考资料
Similar presentations