Presentation is loading. Please wait.

Presentation is loading. Please wait.

虚拟机加密,是把源程序的X86指令变成自定义的伪指令,执行时内置在保护程序中的VM就会启动,读取伪指令,然后解析执行

Similar presentations


Presentation on theme: "虚拟机加密,是把源程序的X86指令变成自定义的伪指令,执行时内置在保护程序中的VM就会启动,读取伪指令,然后解析执行"— Presentation transcript:

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中执行,见下图:

6

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 参考资料

23

24

25


Download ppt "虚拟机加密,是把源程序的X86指令变成自定义的伪指令,执行时内置在保护程序中的VM就会启动,读取伪指令,然后解析执行"

Similar presentations


Ads by Google