浅析-VM虚拟机保护
本帖最后由 材鸟 于 2017-7-10 16:23 编辑目前常见的保护壳,多为VMProtect,Safengine。其主要保护核心为“代码虚拟化”功能
功能主要将被保护的代码抹去后以其独特的体系去执行被抹去的代码【注:相当于一句chinese的句子里面插入了English,或者other外语,以一种不被理解的字义来代替原始文字】,常称之为:VMCODE,被VM的代码
下文共以两例讲解这套“独特的体系”
(一例为论坛用户suno 所发帖子demoVMcrackme)(一例自写CrackMe+VMProtect)
例一http://www.52pojie.cn/forum.php?mod=viewthread&tid=572327
感谢suno ,先以此贴demo讲解【请一定将帖子看完,最好动手一试再来看】
首先可以看到CrackMe要求输入NAMEKEY进行注册。
输入错误信息可以看到会弹出信息框提示 Wrong OD载入,找按钮的派发事件(不解释,这都不会就没必要继续看了)
可以看到账号密码验证都CALL了401060,MesageBoxTEXT参数为固定地址4014F4
账号验证CALL处步进看看
一般到这里可能都懵了What the fk shit?
这就是一段被VM的代码了,现在进入的代码段可以称呼为VM代码虚拟机(原指令已经不可视化,由代码虚拟机将原指令实现执行)现在需要分析代码虚拟机得出原始指令,修改实现破解。这里说一下这个VM代码虚拟机的结构
那么看完后明白了,现在要破解就需要找到比较账号密码的Handler,将其修改就OK。现在怎么找?看堆栈 4017C4,执行完Handler后他还是会VMretn回去的,下断
选项-调试设置
设置一下,CTRL+F11 然后断在4017C4,现在跟踪功能已经记录了,账号验证CALL的代码(不过是被VM的)
这是账号验证所执行的”代码块”
很明显,第一条就是dispatch第二条进去看看
先定义一下,方便理解=A=B =C=D=F =XAdd a,4Mov b,aInc Mov al, Mov D,alMov F,DMov X,DMov ,D*一条MOV的HANDLER 。 并不是类似testcmp的命令 下一条
也是MOV一堆参数之类的下一条
Sub Sete Sets sub改变标志位,setesets保存标志位 相当于testcmp之类指令的HANDLER很明显这是一条比较的HANDLER。401196先记录下来。下一条
不是比较的,略过下一条
不是比较的,略过下一条
有一条cmp,不过并不是比较的HANDLER下一条
也不是比较的HANDLER下一条
VM RETN~ 那么比较的HANDLER就是401196,调试一下看看
账号验证处,断下。CTRL+G401196. F4
35比0?在4011AB再按一下F4
32比0?继续F4
70比0?继续F4
正在对账号进行验证~不过这个0是什么鬼?就是说并没有正确的账号咯?不管他,也不打算逆推,直接在4011AB改 SUB EAX,EAX,将VM中进行比较的HANDLER改成比较什么都说对, - -
OK!(因为密码比较也是经过这条HANDLER的,可以自己去调试看看,我已经改成他说什么都对了,密码比较经过也说对,所以OK)
例二自写一个CrackMe ,然后加个VM
OK,源码都贴上了,CM就不介绍了。直接OD载入,找按钮派发事件
剩下的有人看再补上去吧,乱 ~ 懒~
SharsDela 发表于 2017-7-10 19:40
学习了~~多谢,期待下一贴~
有cmp不过并不是比较这是看出来的~~还是试出来的~~
筛选请看例一的原文,cmp是比较一个固定值。例二后续在附件word,懒得贴。自行下载!例二的cmp并没有被vm,得到结果后会继续进入vm的!也就是说可以在vm外改,也可以在vm内改。随意 材鸟 发表于 2017-7-10 22:10
筛选请看例一的原文,cmp是比较一个固定值。例二后续在附件word,懒得贴。自行下载!例二的cmp并没有被vm ...
text edx,0x3也就易语言能用~~
下载word附件去~~ 不懂,帮顶 好复杂 假装能看懂的样子 完全看不懂的样子 来跟楼主学习下,谢谢分享 进来凑热闹嘀 虽然看不懂,还是支持一下 看不懂 帮顶!!! 不明觉厉,假装学习