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

Slides:



Advertisements
Similar presentations
《高等学校创新能力提升计划》 的情况介绍 2012年3月.
Advertisements

市直单位财务明细信息表 填报说明 珠海市财政局 2013年12月 1.
第5章 排版的高级应用.
教育部體育署 年度 國民中小學體操教學計畫 授課時間:105年7月12、13日.
通用技术教学与实践 常德市鼎城区第八中学 刘启红.
输入输出程序设计 输入输出的基本概念 无条件方式输入输出 查询方式输入输出 中断方式输入输出.
创业计划书的编写 白城师范学院创业教育 与文化研究中心 陆东辉.
计算机体系结构 应用程序 软件 操作系统 编译器 固件 指令集 输入输出 CPU 硬件 内存 (I/O) 集成电路 元件,逻辑门.
汇编语言程序设计 吴 向 军 中山大学计算机科学系
第十章 报关.
經濟部文書作業實務 報告人:何國金.
第10章 DOS功能调用与BIOS中断调用.
第四章 汇编语言 程序设计 任课教师:王晓甜
第五章 一般进出口货物报关程序.
2010年高考语文《考试大纲》对本考点的要求是:“正确使用标点符号。”能力层级为D(表达应用)。
主辦單位:彰化縣政府教育處 承辦學校:彰化縣大村國中 時 間:102年11月1日(五) 教學者:袁玉芳老師 孫寶蓮老師
崇右技術學院 電子公文線上簽核系統教育訓練
經國管理學院 電子公文線上簽核系統教育訓練
本周实验安排 实验内容:(P231)人名排序的例子。
第2章 Intel IA-32/Intel 64处理器 结构与原理
第3章 80x86汇编语言程序设计(下).
第3章 80x86汇编语言程序设计(中) 时间不够的情况下只讲16位汇编.
第三章 指令系统及其寻址方式 3.1 寻址方式 3.2 指令格式 3.3 指令系统.
4.1 汇编语言 4.2 顺序结构程序 4.3 分支程序设计 4.4 循环程序设计 4.5 子程序设计
第3章 80x86汇编语言程序设计(上) 16位汇编版本 时间不够的情况下只讲16位汇编.
9.1 可编程并行输入/输出接口芯片8255A 9.2 可编程计数器/定时器 可编程串行输入/输出接口芯片8251A
第5章 循环与分支程序设计  循环程序设计  分支程序设计.
汇编语言程序设计 Assembly Language Programming
第三章 寻址方式与指令系统 3.1 寻址方式 一条指令通常由两大部分构成: 操作码 操作数
第九章 计数器和定时器电路 第一节 概述 第二节 Intel 8253的控制字 第三节 Intel 8253的工作方式 第九章 计数器和定时器电路 第一节 概述 第二节 Intel 8253的控制字 第三节 Intel 8253的工作方式 第四节 Intel 8253在IBM PC机上的应用.
Assembly Language Programming
指令集架構 計算機也跟人類一樣,需要提供一套完整的語言讓人們跟它充分溝通,以完成正確的計算工作。
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月05日.
基于硬件辅助的内核漏洞挖掘框架 闫广禄.
第八章 输入输出程序设计 总线 CPU MEM I/O接口 I/O设备.
第3章 IA-32指令系统 3.1 基本数据类型 3.2 IA-32的指令格式 3.3 IA-32指令的操作数寻址方式
汇编语言程序设计 吴 向 军 中山大学计算机科学系
計算機結構 – 概論 陳鍾誠 於金門大學.
基本的”防”黑客技术 Basic” ” Hacker Technique
第一章 8086程序设计 第二章 MCS-51程序设计 第三章 微机基本系统的设计 第四章 存贮器与接口 第五章 并行接口
汇编语言程序设计课程设计 第二次实验 DEBUG基本命令与算术运算指令
微型机系统与接口技术自学部分 只作扩展知识用 本电子课件包含2011版第3, 6, 7, 8章自学部分 东南大学计算机科学与工程学院.
微型计算机原理及应用.
第六章 子程序结构 §6.1 子程序的设计方法 §6.2 嵌套与递归子程序 §6.3 子程序举例 §6.4 DOS系统功能调用.
寄存器分配 影响程序速度的因素 cpu, register, cache, memory, disk
條件處理.
第九章 高级宏汇编语言 9.1 结构 结构就是将逻辑上有一定关系的一组数据,以某种方式组合在一起所形成的数据形式。
第5章 循环与分支程序设计 学习目标: 了解并掌握循环程序的构造方法,尤其是对循环控制条件的设置以及可能出现的边界情况的考虑。掌握起泡排序算法这种多重循环程序设计中的常用方法。交换标志位的设置在此算法中更能提高效率。学会在数组排序算法中采用折半查找法来提高查找效率。学会使用跳跃表法实现CASE结构。
4.1 汇编语言程序格式 4.2 MASM中的表达式 4.3 伪指令语句 4.4 DOS系统功能调用和BIOS中断调用
3.4.5 控制转移指令(Control transfer instructions) (一)、控制转移指令概述
第4章 汇编语言程序格式  汇编程序功能  伪操作  汇编语言程序格式  汇编语言程序的上机过程.
习题3 1、 分别说明下列指令的原操作数和目的操作数各采用什么寻址方式。 设定如下: ①立即寻址 ② ① ②寄存器寻址
國有公用財產管理簡介 總 務 處 保管組 104年04月07日.
第九章 BIOS和DOS中断 在存储器系统中,从地址0FE000H开始的8K ROM(只读存储器)中装有BIOS(Basic Iuput /output System)例行程序。驻留在ROM中的BIOS给PC系列的不同微处理器提供了兼容的系统加电自检,引导装入,主要I/O设备的处理程序以及接口控制等功能模块来处理所有的系统中断。使用BIOS功能调用,给程序员编程带来很大方便,程序员不必了解硬件操作的具体细节,直接用指令设置参数,然后中断调用BIOS中的子功能,所以利用BIOS功能编写的程序简洁,可读性好,
第2章 80x86计算机组织  计算机系统  存储器  中央处理机  外部设备.
《微型计算机原理与接口技术》 第4版 王良 宁德师范学院 吴宁 乔亚男 编著 清华大学出版社 出版
第5章 循环与分支程序设计  循环程序设计  分支程序设计.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年12月17日.
本节内容 段描述符与段选择子 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
本节内容 内存复制指令 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
微机原理与接口技术 西安邮电大学计算机学院 宁晓菊.
大学计算机基础——周口师范学院 第3章 Word字处理软件 3.8页眉与页脚.
本节内容 内存地址的5种形式 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
本节内容 通用寄存器 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第6章 子程序结构 在程序设计中,我们会发现一些多次无规律重复的程序段或语句序列。解决此类问题一个行之有效的方法就是将它们设计成可供反复调用的独立的子程序结构,以便在需要时调用。在汇编语言中,子程序又称过程。 调用子程序的程序称为主调程序或主程序。 2019/7/20 ch6.
微机原理与接口技术 第5章 汇编语言程序设计 西安邮电大学计算机学院 王 钰.
大数据搜索挖掘实验室 第五章 子程序设计 张华平 副教授 博士 Website: 大数据搜索挖掘实验室
「同根同心」- 交流計劃 廣州及珠三角經濟發展兩天考察團 2016
第三章 8086的指令系统 8086指令特点 8086的寻址方式 8086的指令格式及数据类型 8086的指令集.
走讀台灣旅遊計畫範本.
Presentation transcript:

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

每个伪指令对应一个相应的Handler

这就是实现虚拟机指令的Handler

下面就是一条变型后的指令,其目的就是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  

VMProtect简介 VMP是一个栈虚拟机,它的一切操作都是基于堆栈传递的。在VMP中,每一个伪指令就对应一个handler,VM中有一个核心的Dispatch部分读取程序的bytecode,然后在DispatchiTable里面定位到不同的handler中执行。绝大多数情况下,在一个handler中执行完成后,程序将回到Dispatch部分,然后到next handler中执行,见下图:

X86寄存器基本用途 EBP和EDI是VM堆栈指针(不是常规的堆栈) ESI是伪指令指针(相当于常规的EIP) EAX是VM解密数据的主运算寄存器 EBX是VM解密数据的辅运算寄存器 ECX是常规的循环计数器 ESP是常规的堆栈栈顶指针 EDX是读取伪指令表数据; EDI 指向堆栈的上限并使用[EDI+EAX]的方式向下发展 EBP指向堆栈的下限并向上发展 ESI指向的内存块里包括要执行的伪指令序列,而不同的是,当VM要是使用到立即数时,也是从ESI读取

VM第一印象 入口 堆栈

解密执行

VMP Unpacking Key Point

理论知识 SHE, VEH(异常处理) 发生异常时系统的处理顺序: 1.系统首先判断异常是否应发送给目标程序的异常处理例程,如果应该发送,目标程序正在被调试,则系统 挂起程序并向调试器发送EXCEPTION_DEBUG_EVENT消息 2.如果程序没有被调试或者调试器未能处理异常,系统会继续查找你是否安装了线程相关的异常处理例程,如果安装了,系统就把异常发送给程序seh处理例程,交由其处理 3.每个线程相关的异常处理例程可以处理或者不处理这个异常,如果不处理并且安装了多个线程相关的异常处理例程,交由其他例程处理. 4.如果这些例程均选择不处理异常,且程序处于被调试状态,系统仍会再次挂起程序通知调试器 5.如程序未处于被调试状态或者debugger没有能够处理,并且用SetUnhandledExceptionFilter安装了最后异常处理例程的话,系统转向对它的调用

异常触发流程

异常分发流程

注册一个SHE例程 ASSUME FS:NOTHING push offset perThread_Handler push fs:[0] mov fs:[0],esp xor ecx,ecx mov eax,200 cdq div ecx

传递给异常处理句柄的参数 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 ;

重要的结构 程序新的开始的地方

下图是系统异常处理时调用程序注册的异常处理Handler 直接在返回后下断(为什么?????)

工具 (VMP分析插件) 插件的”打开虚拟机指令窗口”,找到vRet和vCall指令下断(为什么要找这两条指令????)

VMP IAT修复 1. VMSweeper 2. 清除TLS

VMP的一些Anti 1. 2. 3. VMware后门检测    mov eax, 564D5868h     mov ebx, 00000000h     mov ecx, 0000000Ah     mov edx, 00005658h     in eax, dx 

4. NtSetInformationThread HideFromDebugger 5. GetModuleFileName ("SbieDll.dll")

参考资料 http://bbs.pediy.com/showthread.php?t=121412&highlight=VMP