目前常见的保护壳,多为VMProtect,Safengine。其主要保护核心为“代码虚拟化”功能
功能主要将被保护的代码抹去后以其独特的体系去执行被抹去的代码【注:相当于一句chinese的句子里面插入了English
,或者other外语,以一种不被理解的字义来代替原始文字】,常称之为:VMCODE,被VM的代码
下文共以两例讲解这套“独特的体系”
(一例为论坛用户suno 所发帖子demoVMcrackme)(一例自写CrackMe+VMProtect)
例一http://www.52pojie.cn/forum.php?mod=viewthread&tid=572327
感谢suno ,先以此贴demo讲解【请一定将帖子看完,最好动手一试再来看】
首先可以看到CrackMe要求输入NAME KEY进行注册。
输入错误信息可以看到会弹出信息框提示 Wrong OD载入,找按钮的派发事件(不解释,这都不会就没必要继续看了)
可以看到账号密码验证都CALL了401060,MesageBox TEXT参数为固定地址4014F4
账号验证CALL处步进看看
一般到这里可能都懵了What the fk shit?
这就是一段被VM的代码了,现在进入的代码段可以称呼为VM代码虚拟机(原指令已经不可视化,由代码虚拟机将原指令
实现执行)现在需要分析代码虚拟机得出原始指令,修改实现破解。这里说一下这个VM代码虚拟机的结构
那么看完后明白了,现在要破解就需要找到比较账号密码的Handler,将其修改就OK。现在怎么找?看堆栈 4017C4,
执行完Handler后他还是会VMretn回去的,下断
选项-调试设置
设置一下,CTRL+F11 然后断在4017C4,现在跟踪功能已经记录了,账号验证CALL的代码(不过是被VM的)
这是账号验证所执行的”代码块”
很明显,第一条就是dispatch第二条进去看看
先定义一下,方便理解[EBP-F]=A [EBP-1C]=B [EBP-14]=C [EBP-10]=D [EBP-B]=F [EBP-18]=XAdd a,4Mov b,aInc [c]Mov al,
[c]Mov D,alMov F,DMov X,DMov [B],D *一条MOV的HANDLER 。 并不是类似test cmp的命令 下一条
也是MOV一堆参数之类的下一条
Sub Sete Sets sub改变标志位,sete sets保存标志位 相当于test cmp之类指令的HANDLER很明显这是一条比较的HANDLER。
401196先记录下来。下一条
不是比较的,略过下一条
不是比较的,略过下一条
有一条cmp,不过并不是比较的HANDLER下一条
也不是比较的HANDLER下一条
VM RETN~ 那么比较的HANDLER就是401196,调试一下看看
账号验证处,断下。CTRL+G 401196. 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载入,找按钮派发事件
剩下的有人看再补上去吧, 乱 ~ 懒~
word.zip (1.73 MB, 下载次数: 2, 售价: 5 CB吾爱币) 打包.rar (1.69 MB, 下载次数: 3)
|