VMProtect的逆向分析和静态还原._第1页
VMProtect的逆向分析和静态还原._第2页
VMProtect的逆向分析和静态还原._第3页
VMProtect的逆向分析和静态还原._第4页
VMProtect的逆向分析和静态还原._第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、VMProtect的逆向分析和静态还原Bughoho2009中国软件安全峰会VMProtcctig 向分析VMPffi单介紹二)VMP逹向分析1-执行全I2VMP69 Handler3VMP描令分类4. 逮辑运算描令5. 寿存Q轮转6. 字节硏加密和加机效验7. 阶段总结VMProtect静姦艮踪-)虚拟执行转点-)执疔引肇的J#拟执行(三)分析条件跳转的河条出边 扌节码反编译-)中间丧示JB吉 RBA5 Cfl 45 W 9C 8FU5 00“ E9 51000000nou add pushfdPOPeax, dword ptr ebp dwurd ptr ebpU9 eaxdword pt

2、r ebp无论push进來的是谁,Add指令总是读取并弹出堆栈中存放的值, 然后Add算出结果再压入堆栈。3.VMP指令分类汇编指令在转换到虚拟机的指令体系的过程中.被最大限度的化简和归类了,VMP中的 指令大体分五类:1.算术运算和移位运算2.堆栈操作3.内存操作4.系统相关(无法模拟指令)5.逻辑运算其中最复杂的是逻辑运算指令从68UU9 Utt8B55 0Anou noueax, dwrd ptr (ebp edx, dword ptr jebpiF7D0notUUAUD/MBF7D2notedx21DUand edxfi0HOO714F80”5 MnouIwird |itr p町,50

3、AUCJD7529Cpu :hfd004907538FA5 00POPIlwrdLRttJtbtQMSOO巧6AE9 M5F9FrFF0 触NORR!.VMP逆向分析4 逻辑运算指令Vmp中的逻辑运算只有一条指令:nor0这个指令在电路门中叫NOR门,它 由三条指令组成,即not not and,与NAND门一样,用它可以模拟notand xor or这四条逻辑运算指令转换公式: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)

4、,P(a,b)R1VMP逆向分析5 寄存器轮转VMP将所有寄存器都存放在了堆栈的结构中(VM.CONTEXT 结构中的每一项代表一个寄存器或者临时变量。但在运行过程中.其中的项所映射的真实寄存器都是不固 定的,可以把它比作一个齿轮,每做完一个动作,部分项R7 的映射就互换了一下位置,或者执行完一段指令,齿轮就 按不固定的方向和度数转动一下,然后全部的项映射就改 变了。VMP逆向分析6字节码加密和随机效验VMP把解码算法分布到了 Dispatch和每个 Handler中.只有在取指令和取数据时才会解密 而每个解码的算法也都是不同的,并且它的 Seed每次解密都会变化的要写出字节码的逆算法不是不可

5、以.但是复杂度 太高,有些得不偿失。所以如果想要修改数据, 还是使用HOOK的方式比较轻松ZXDispatch tableInMructkm llccryptHandier NHandler IDaltf pl 1KHandler 2Dalu ckcrjpl 2VMP在生成字节码的过程中.维护了一份结构中每一项所 映射的真实寄存器,但这只存在于编译过程,而在运行时 是没有明确的信息的。这直接导致了分析和识别的难度。句分析但是HOOK的方式得解决代码检测的问题,VMP 注册版除了会加密字节码以外,还会随机对一段 代码做检测,如果有错将无法运行。calchashVMP注册版中有一条叫播令(calc

6、hash).就 是用来做检测的.VMP会在编译好的字节码中加 一些自己的指令.每次执行都会随机对一段代码 生成一个Hash结果,然后与另一个随机的数相加 结果必须为0,否则就会出错.如果要爆破或者 修改VMP的代码,还需要处理这个过程.-VMP逆向分析7 阶段总结:VMP作者的原则最简单的正向设计导致最困难的逆向分析2009中国软件安全峰会二.VMProtect静态跟踪2009中国软件安全峰会(一)虚拟执行特点1. 處拟执行是静态分析与动态执行的一个折中办法2. 虚拟执行时对内存访问做了一定的控制以防止出现异常a. 允许读写静态内存与堆栈内存b. 忽略其他内存访问与修改解决了异常问题后,就可以

7、从入口点一直虚拟执行到出口了eax. 1111 eax t 1111 short eax. 22220040100U $ B8 11110000 nou (WUMbOS 3D miutioo cnp“ 75 05jnz0001000B822220000 nov0U4O1O11 L C3retn记录得到的字节码且志2009中国软件安全峰会执行引擎的虚拟执行2009中国软件安全峰会2009中国软件安全峰会分析虚拟机的一般传统力法找到关键位蜀A动态执行并使用记录断点记录数 据输出记录口志优点:J找关键位置时间相对校短缺点:A多路径时只能上其屮条路径A分析多个虚拟机时要重复做相同 的工作2009中国软

8、件安全峰会虚拟执行方法虎拟执彳亍代码A根据亡分析字节码灵活控制代码 流程输出记录日志优点:虚拟执厅不会对系统造成任何伤 害;完整的字节码流程缺点:A指令正确但操作数的值不町靠复杂度较高,开发时间较久2009中国软件安全峰会2009中国软件安全峰会2009中国软件安全峰会跳转指令(二) 分析条件跳转的两条出边因为虚拟执行是不依赖运行时佰息的,所以它无法 判断应该走哪一条,必须把两条边都走过一遍。true在基本块(BasicBlock)执行前备份运行时环境 执行到跳转处分析指令流,获得修改路径关键点 退回基本块起始位置重新执行并控制路径|IV*分析指令流false2009中国软件安全峰会2009中

9、国软件安全峰会识剖出昭径丘的1 (DCOtk.Ddf)备份环境分析跳转相关指令2009中国软件安全峰会三字节码反编译2009中国软件安全峰会(一)中间表示语言VMP的Handler只能算是低级中间语言,缺少一些例如数据依赖.流程走向尊信息.还不满足 反编译的条件。需要将其转换为包含更多信息的高级中间语言形式.去掉了对堆栈的依赖,转为直接关联变嵐表达式被转换成了SSA (静态单赋值)形式,方便对指令做优化处理(二)指令化简和优化常数收缩活跃变量分析删除无关代码YXP牛成的7码中火杂f 气C的折令渝这些折令勺总汇娼代糾没lffH关札 人対还总分析没仆仟何好处.只介(到拔的二字节码反编译(三)转换汇

10、编指令树模式匹配/文本表达转换为树形表达/ 收集转换规则这聂处麻饮的 个过*7需僉分析w呦I $牛成来牧炖向转刚 仏的規则这足 个不御不做的体力泊./ 使用匹配规则迭代匹配汇编指令530 = Add.d Ctx24.Ctx10 Ctx34.Ctx28 = Add Ctx30.1111Ctx3,Ctx2 - ddd.d/1111add雹芽字节码反编译(四)归类映射寄存器#4过达代川的如终结块显达样,Ctx3O,Ctx10*dd CtxKCtx30,llll英然Ll经转换为2境折令但址还无汎他定奇肚刘殴坠唧个WIIWW1II的伫也的他 tiAMRh不过.JU冋U隈J能的的定哇広QH供川为的分析畚舟

11、正转换WWV廉先明确处义ddHi令的那 个娄数叮給架址同 个窃存2S(Jl伦折令也疋 ,$处似ch&的折令除外.所以町以HI理匀刘0折定的M何内.C引、Ctx30. Ctx21 ASM 个奇仔零这样脖什対寄仔為识别的分析时.诚可以疋达网个审作為折映射的寄仔zrCtx3U.CtX28 / 、/Ctx30add d1-111字节码反编译(五)转换汇编指令动态规划mov eax, dword ptr ediOxlOOadd edi, 100所谓动态规划.通俗的讲就址制定些规则,根拯实际帖况來 选择般终匹配结果这甲.的意思址对毎个匹配规则设个权值,便川计尊后值垠 人的那个匹配规则来进行转换。第二段的悄

12、况有吐持殊其中两条指令唯一的不同只有目标操 作数。Add指令认为目标操作数9源操作数1相同.而lea折令 則无此限制。半出现权值一样的愴况时.町以同时作为结果,add edi, 100Lea ebx. edi+1001在识别出寄存器后,再根据实际惜况來匹配规则,在这两个指令屮选出里像的那一个。1. 初始化虚拟机时各项所映射的寄存器2. 根据汇编转换规则映射或者结朿映射某项到果寄存器3. 退出虚拟机时通过弹出各项时确定各项故终映射的寄存器 从这三方而町以人体推理出各项所映射的寄存器但仅仅是这样的话,只有在没有跳转指令的字节码中,成功率才最高。 因为还得考虑寄存器轮转中国软件安全峰会中国软件安全峰

13、会基本块内的寄存器轮转中国软件安全峰会中国软件安全峰会基木块内的寄存器轮转比较 容易简单.只要转换规则止 角就可以识别出寄存器Ctx10 = ebxCtx24 = eaxFree(Ctx24)Ctx30 = eax中国软件安全峰会2009中国软件安全峰会puch. r8. d 00000021push. W d 00000020 push res. d 00000001 push. reg. d 00000011 push reg. d 00000030 set. jpPOP. ree. d 00000020pop. reg d OOOOOOX pop. reg. d 00000028 HI

14、1 基本块间的寄存器轮转在执行set.jmpZ前,将ContextP所有位置的值 都临时存放到了堆栈中,跳向H标地址頂乂再全 部把它弹出到不同位置|卩去,这样就完成了一次 轮换。它比基本块内的寄存器轮转更麻烦,内为其屮涉 及到了二义性的问题2009中国软件安全峰会2 寄存器的二义性问题的 义件何遞肚 个狼严4:的列lit.闪为如聚不的分析和处即轲介巫以*fAWtn的屈面崙岳的 义竹山折令的 义nfiji.ih疋解决指令的义啊需吃先斛决的 义丫何&PushPop的二义性Pu$hPopAVMP中“在 冲.义性.即传/m;l用普通PushPop指令对: Push Ctx20(edx)Pop Ctx2

15、4(esi) 传值Fpop折令的竹川览传血时农冰格諒顶中的位放刘11杯项中民 传引用Xpop折令的作川爪传引川时.不何轲血从沖顷放到日标險f去. 的為恋也将帔讯盖.寄存器轮换: Push Ctx20(edx) Pop Ctx24(edx)Ktflli 般怖况.却编折令的p”hpop折令对.传引用足特怖况如Add与Lea等其他指令的二义性这期条折令广文的讲也足PshPop的:义性. 为Add指令时,pop播令的含义为传引用为Lea指令时,pop指令的含义为传值2009中国软件安全峰会2009中国软件安全峰会4识别寄存器的二义性的步骤1. 根据转换规则尽可能确定一些特性,缩小可能的寄存器范围2. 无法判断的寄存器将其加入此项的可能性列表中,并建立起传递链表3. 退出虚拟机时可知各项真实的寄存器,排除其他可能的寄存器4. 确定寄存器后,再重新排除有二

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论