VMProtect的逆向分析和静态还原.ppt

  1. 1、本文档共31页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

VMProtect的逆向分析和静态复原Bughoho

目录VMProtect逆向分析〔一〕VMP简单介绍〔二〕VMP逆向分析执行流程图全貌VMP的HandlerVMP指令分类逻辑运算指令存放器轮转字节码加密和随机效验阶段总结VMProtect静态跟踪 〔一〕虚拟执行特点〔二〕执行引擎的虚拟执行〔三〕分析条件跳转的两条出边字节码反编译〔一〕中间表示语言〔二〕指令化简和优化〔三〕转换汇编指令——树模式匹配〔四〕归类映射存放器〔五〕转换汇编指令——动态规划〔六〕存放器染色根本块内的存放器轮转根本块间的存放器轮转存放器的二义性问题识别存放器的二义性的步骤

VMProtect的逆向分析和静态复原一.VMProtect逆向分析

一.VMProtect逆向分析〔一〕VMP简单介绍VMProtect是一款虚拟机保护软件,是目前最为流行的保护壳之一,与其他类型保护软件不同的是,它使用的是虚拟机保护技术,侧重点在于保护所指定的函数,增加逆向分析的复杂度虚拟机保护特征将由编译器生成的本机代码(NativeCode)转换成字节码(Bytecode)将控制权交由虚拟机,由虚拟机来控制执行转换后的字节码非常难以阅读,增加了破解的复杂性

一.VMP逆向分析(A)VMProtectDemo版本流程图虚拟机其实就是一个字节码解释器,它循环的读取指令并执行,并且它只有一个入口和一个出口(vm_exit)。通过静态分析,我们可以分析出整个执行引擎的完整代码

一.VMP逆向分析(B)VmprotectProfessional版本流程图所有选项全部开启后的结果虚假跳转垃圾指令 大量的fakejcc〔虚假跳转〕和垃圾指令使原来十分简单的代码变得非常复杂

一.VMP逆向分析(C)清理了垃圾分支并做了伸直化处理后的结果 设定一些规那么,将虚假分支去除后,流程图就跟原来一样清晰了。如果再去除掉垃圾指令,几乎就跟demo版本的代码一样? 经过清理之后,新的流程图分析起来难度将会降低很多。

一.VMP逆向分析2.VMP的HandlerVMP是基于堆栈的虚拟机〔Stack-BasedVirtualMachine〕虚拟机指令并不显式的使用某个参数,而是先将参数压入堆栈,然后直接从堆栈中读取表达式:Addeax,ecx可以翻译为:PushecxPusheaxAddPopeax无论push进来的是谁,Add指令总是读取并弹出堆栈中存放的值,然后Add算出结果再压入堆栈。

一.VMP逆向分析3.VMP指令分类 汇编指令在转换到虚拟机的指令体系的过程中,被最大限度的化简和归类了,VMP中的指令大体分五类:算术运算和移位运算堆栈操作内存操作系统相关〔无法模拟指令〕逻辑运算其中最复杂的是逻辑运算指令

一.VMP逆向分析4.逻辑运算指令Vmp中的逻辑运算只有一条指令:nor。这个指令在电路门中叫NOR门,它由三条指令组成,即notnotand,与NAND门一样,用它可以模拟notandxoror这四条逻辑运算指令转换公式:P(a,b)=~a~bnot(a)=P(a,a)and(a,b)=P(P(a,a),P(b,b))or(a,b)=P(P(a,b),P(a,b))xor(a,b)=P(P(P(a,a),P(b,b)),P(a,b))NOR闸

一.VMP逆向分析5.存放器轮转VMP将所有存放器都存放在了堆栈的结构中〔VM_CONTEXT〕,结构中的每一项代表一个存放器或者临时变量。但在运行过程中,其中的项所映射的真实存放器都是不固定的,可以把它比作一个齿轮,每做完一个动作,局部项的映射就互换了一下位置,或者执行完一段指令,齿轮就按不固定的方向和度数转动一下,然后全部的项映射就改变了。VMP在生成字节码的过程中,维护了一份结构中每一项所映射的真实存放器,但这只存在于编译过程,而在运行时是没有明确的信息的。这直接导致了分析和识别的难度。R0R1R2R3R7R4R5R6

一.VMP逆向分析6.字节码加密和随机效验VMP把解码算法分布到了Dispatch和每个Handler中,只有在取指令和取数据时才会解密,而每个解码的算法也都是不同的,并且它的Seed每次解密都会变化的。要写出字节码的逆算法不是不可以,但是复杂度太高,有些得不偿失。所以如果想要修改数据,还是使用HOOK的方式比较轻松。DispatchtableInstructionDecryptHandler1Datadecrypt1Handler2Datadecrypt2HandlerN….

一.VMP逆向分析但是HOOK的方式得解决代码检测的问题,VMP注册版除了会加密字节码以外,还会随机对一段代码做检测,如果有错将无法运行。VMP注册版中

文档评论(0)

199****8042 + 关注
实名认证
内容提供者

相信自己,相信明天

1亿VIP精品文档

相关文档