- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
VMProtect的逆向分析和静态还原.ppt
VMProtect的逆向分析和静态还原 一. VMProtect逆向分析 一. VMProtect逆向分析 一. VMP逆向分析 (A) VMProtect Demo版本 流程图 一. VMP逆向分析 (B) Vmprotect Professional 版本 流程图 一. VMP逆向分析 一. VMP逆向分析 2.VMP的Handler VMP是基于堆栈的虚拟机(Stack-Based VirtualMachine) 虚拟机指令并不显式的使用某个参数,而是先将参数压入堆栈,然后直接从堆栈中读取 表达式: Add eax,ecx 可以翻译为: Push ecx Push eax Add Pop eax 无论push进来的是谁,Add指令总是读取并弹出堆栈中存放的值, 然后Add算出结果再压入堆栈。 一. VMP逆向分析 3.VMP指令分类 一. VMP逆向分析 4.逻辑运算指令 Vmp中的逻辑运算只有一条指令:nor。这个指令在电路门中叫NOR门,它 由三条指令组成,即not not and, 与NAND门一样,用它可以模拟not and xor or这四条逻辑运算指令 转换公式 : P(a,b) = ~a ~b not(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)) 一.VMP逆向分析 5.寄存器轮转 VMP将所有寄存器都存放在了堆栈的结构中(VM_CONTEXT), 结构中的每一项代表一个寄存器或者临时变量。 但在运行过程中,其中的项所映射的真实寄存器都是不固 定的,可以把它比作一个齿轮,每做完一个动作,部分项 的映射就互换了一下位置,或者执行完一段指令,齿轮就 按不固定的方向和度数转动一下,然后全部的项映射就改 变了。 VMP在生成字节码的过程中,维护了一份结构中每一项所 映射的真实寄存器,但这只存在于编译过程,而在运行时 是没有明确的信息的。这直接导致了分析和识别的难度。 一.VMP逆向分析 6.字节码加密和随机效验 VMP把解码算法分布到了Dispatch和每个Handler中,只有在取指令和取数据时才会解密,而每个解码的算法也都是不同的,并且它的Seed每次解密都会变化的。 要写出字节码的逆算法不是不可以,但是复杂度太高,有些得不偿失。所以如果想要修改数据,还是使用HOOK的方式比较轻松。 一.VMP逆向分析 一. VMP逆向分析 7.阶段总结: VMP作者的原则 最简单的正向设计 导致最困难的逆向分析 VMProtect的逆向分析和静态还原 二.VMProtect静态跟踪 二. VMProtect静态跟踪 (一)虚拟执行特点 虚拟执行是静态分析与动态执行的一个折中办法 虚拟执行时对内存访问做了一定的控制以防止出现异常 允许读写静态内存与堆栈内存 忽略其他内存访问与修改 解决了异常问题后,就可以从入口点一直虚拟执行到出口了 二. VMProtect静态跟踪 (二)执行引擎的虚拟执行 二. VMProtect静态跟踪 (三)分析条件跳转的两条出边 因为虚拟执行是不依赖运行时信息的,所以它无法 判断应该走哪一条,必须把两条边都走过一遍。 在基本块(BasicBlock)执行前备份运行时环境 执行到跳转处分析指令流,获得修改路径关键点 退回基本块起始位置 重新执行并控制路径 VMProtect的逆向分析和静态还原 三.字节码反编译 三.字节码反编译 (一)中间表示语言 VMP的Handler只能算是低级中间语言,缺少一些例如数据依赖、流程走向等信息,还不满足反编译的条件。需要将其转换为包含更多信息的高级中间语言形式。 去掉了对堆栈的依赖,转为直接关联变量 表达式被转换成了SSA(静态单赋值)形式,方便对指令做优化处理 三.字节码反编译 (二)指令化简和优化 常数收缩 活跃变量分析 删除无关代码 VMP在生成的字节码中夹杂了一些自己的指令流,这些指令与原汇编代码没有任何关系,且对还原分析没有任何好处,只会起到干扰的作用。需要根据特征制定一些规则来识别这些垃圾指令。 三.字节码反编译 (三)转换汇编指令——树模式匹配 文本表达转换为树形表达 收集转换规则 这是最麻烦的一个过程,需要分析VMP将汇编生成字节码的特征来收集将字节码逆向转换回去的规则,这是一个 不得不做的体力活。 使用匹配规则迭代匹配汇编指令 三.字节码反编译 (四)归类映射寄存器 经过迭代后的最终结果是这样: Add Ctx30(Ctx24),Ctx10 Add Ctx34(Ctx30),1111 虽
文档评论(0)