吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 9712|回复: 43

[原创逆向图文] 也玩一把VMP爆破

  [复制链接]
李沉舟 发表于 2018-2-25 19:26 | 显示全部楼层 |阅读模式

本帖最后由 李沉舟 于 2018-2-25 19:48 编辑

看了PEDIY天易LOVE的《深入浅出VMP爆破》,https://bbs.pediy.com/thread-127020.htm,受益匪浅,之前一直搞不懂万用闸的概念。不过天易LOVE的演示程序是VMP1.2,我用VMP2.08(这个版本是X爱工具箱里提出来的版本,话说我们论坛的工具箱我个人感觉精简过度了……)对文章中的示例加壳以进行一次实战。如果你对VMP没有概念,建议先看看我在看雪的一篇文章,https://bbs.pediy.com/thread-224204.htm。


我简单观察了一下VMP2.X版本虚拟流程(无变异)后的代码,目测代码混淆只使用了数据流的插入死码,以及控制流的间接转移,算是吃了一颗定心丸。


原版未加密的程序很简单。
[Asm] 纯文本查看 复制代码
00453F18  |.  E8 87FFFFFF   call VMP原版.00453EA4
00453F1D  |.  84C0          test al,al
00453F1F  |.  74 0C         je short VMP原版.00453F2D
00453F21  |.  B8 743F4500   mov eax,VMP原版.00453F74                   ;  Good job!
00453F26  |.  E8 458AFDFF   call VMP原版.0042C970
00453F2B  |.  EB 0A         jmp short VMP原版.00453F37
00453F2D  |>  B8 883F4500   mov eax,VMP原版.00453F88                   ;  Try again!
00453F32  |.  E8 398AFDFF   call VMP原版.0042C970
00453F37  |>  33C0          xor eax,eax



[Asm] 纯文本查看 复制代码
00453EA4  /$  83F8 7B       cmp eax,0x7B
00453EA7  |.  74 06         je short VMP原版.00453EAF
00453EA9  |.  B8 00000000   mov eax,0x0
00453EAE  |.  C3            retn
00453EAF  |>  B8 01000000   mov eax,0x1
00453EB4  \.  C3            retn



VMP是如何实现减法指令的?
可以看看PEDIY海风月影前辈的帖子https://bbs.pediy.com/thread-82618.htm,我简单说下我的理解。
水平有限,如有错误,还望指正。
VMP的逻辑运算指令只有一条,记为VM_NOR。
VM_NOR的一般结构如下:
[Asm] 纯文本查看 复制代码
POP EDX
NOT EDX //NOTa
NOT DWORD PTR SS:[ESP] //NOTa
AND DWORD PTR SS:[ESP],EDX // NOT(a) and NOT(a)= not(a)
PUSHFW

NOT指令不影响标志位,可是AND指令影响标志位,我们一般爆破找JZ/JNZ指令,这些指令测试的是ZF标志位。
怎么测试EFLAGS里的ZF标志位?VM_ NOR (NOT(EFLAGS),NOT(0x40)),其结果就是把EFLAGS里面除ZF位以外的标志位全部清0了。ZF标志位在第6位,然后把结果再右移(shr)6位,就可以把ZF位移动到最低位,结果就变成了0和1,然后,再使用VMP里面的唯一一条跳转指令,VM_JUMP根据结果计算出转移地址。ZF为1时,EFLAGS的值是0x40。如果不能理解,找一张EFLAGS的布局图,把0x40转换为二进制,低位对低位的填上去看看即可。这里稍微注意一下,天易LOVE前辈说取出的ZF标志位是反的,可是我个人觉得取出的就是一样的,差别就在于传VM_NOR参数时EFLAGS是否取反。(如有错误,望指正)
所以,JZ跳转成立的条件可以这样表达:
VM_NOR(NOT(EFLAGS), NOT(0x40)) == 0x40
SHR(VM_NOR(EFLAGS, NOT(0x40)), 6) == 0x1
至于上文提到的VM_JUMP,一般形式为。
[Asm] 纯文本查看 复制代码
mov e?x,[ebp]
add ebp,4
mov esi, e?x

可是EFLAGS是怎么来的?这个就涉及到VMP模拟减法的知识了。我看了海风月影前辈的帖子,可惜百度空间现在已经被百度下架了,找不到关于减法的内容,侥幸在天易LOVE前辈的帖子里面捡到宝了。
NOT(a) = -a - 1
a - b = NOT(NOT(a) + b)
推到过程如下:
a -  b = NOT(a - b) + 1 = NOT(a - b - 1) = NOT(NOT(a) + 1 - 1 + b) = NOT(NOT(a) + b)
VM_NOR是怎么模拟NOT的呢?
NOT(a) = VM_NOR(a,a)
那么,刚刚推导出的NOT模拟减法公式可以用VM_NOR表达。
a - b = VM_NOR(VM_NOR(a,a) + b, VM_NOR(a,a) + b)
至于EFLAGS是由EFLAGS1和EFLAGS2运算产生的。
在运算VM_NOR(a,a) + b时,得到EFLAG1。运算完VM_NOR(VM_NOR(a,a) + b, VM_NOR(a,a) + b)的最外层的那条VM_NOR时,得到EFLAG2。
EFLAGS = VM_ NOR(NOT(EFLAG1),NOT(0x815)) + VM_NOR(NOT(EFLAG2),0x815)
0x815,转换成二进制,对应的是AF、OF、CF、PF标志位为1,也就是说,把SF、ZF标志位清0了。大家考虑一下,运算a - 1 + b时得到的EFLAG1,与最终结果的EFLAGS有哪些差别呢?首先ZF肯定不同,SF因情况而有异数。
接着计算EFLAG2,此时得出了ZF、SF位。最后得出最终结果EFLAGS。
=========================原理分析完,开始实战搞一波==============================
首先,关键点在于我们能不能找到VM_NOR这条Handler,找到了的话基本可以说是万事OK了。
这里的思路参考了半斤八两前辈的一篇文章,http://www.cnblogs.com/BjblCracked/p/4152193.html。(.......原来我的傻逼方法是找到VM Dispatcher,记录下每一个调用的Handler,记录后有上千个,去重复后有几十个,一个一个找…………)
首先,搜索字符串引用,在0x00453EA4这个地方下一个断点(这样做是为了少记录一点无用代码)。
点击菜单,查看——RUN跟踪。打开RUN TRACE窗口,右键,记录到文件,选择你的记录保存在哪里。然后一直跟踪到VM Dispatch,也就是,0045E670    8B1485 A3DE4500 mov edx,dword ptr ds:[eax*4+0x45DEA3](强迫症)
然后点击,调试——跟踪步入,或者按CTRL+F11。等有提示框弹出的时候,打开你保存的记录文件,进行搜索工作。(有点卡哦,我测试应该有1s左右的延迟)
打开记录文件,搜索EAX=00000040(应该也有可能是EDX=00000040)
2.png
若干次查找后,来到此处。
3.png
这里找到了VM_NOR闸。
接着我们试试看直接查找0045E88D 主       not eax                                   ; EAX=00000040
若干次后,来到此处。
4.png
结果是0,EDX是EFLAGS,EAX是0x40。在OllyDbg里面下一个条件断点试试看。
在0045E8A0 >  9C              pushfd
下一个条件断点,EAX==0。
若干次中断后,发现有EDX==286的情况。
把EAX修改为0x40。
把断点删除,F9运行。
5.png
刚刚ESI的值是49375B,可以改进一下这个硬件断点。
条件改为ESI == 0x49375B
中断时把EAX修改为0x40即可。

要打补丁很简单,用VEH机制即可。可能需要注意的地方就是KiUserExceptionDispatcher有没有被HOOK拿来反调试。

评分

参与人数 38威望 +1 HB +151 THX +22 收起 理由
longge188 + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
一路走来不容易 + 1
消逝的过去 + 1
冷亦飞 + 1
小黑白又白 + 1
我是好人 + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
weiran324 + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
二百来斤 + 1
白给小侠客 + 1
飘呀飘 + 1
拿着雪糕 + 1
boot + 2 + 1
h112233h456 + 1
hotD + 2 + 1
zxbadboy + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
wxlaigl + 1 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
EMT + 1
谈心123 + 1
求求你放过我 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
liugu0hai + 1 + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
上你个大当了 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
zmalskqp + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
成丰羽 + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
bnjzzheng + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
lies + 1
pengyuwa1122 + 1 [快捷评语]--2021年,我们爱0爱1
mazhengyu + 1 + 1 [快捷评语]--吃水不忘打井人,给个评分懂感恩!
aimee400 + 1 + 1 [快捷评语] - 吃水不忘打井人,给个评分懂感恩!
RIO + 2 + 1 [快捷评语] - 2018,狗年发发发,狗年旺旺旺!
wq0351 + 3 + 1 [快捷评语] - 2018,狗年发发发,狗年旺旺旺!
2lht_love + 2 + 1 [快捷评语] - 2018,狗年发发发,狗年旺旺旺!
轮回v + 6 + 1 膜拜大神,看了您的帖子发现真的很低调!在下惭愧。
皆笑谈 + 1 + 1 [快捷评语] - 吃水不忘打井人,给个评分懂感恩!
ladybe + 3 + 1 前排膜拜大佬
w623433018 + 1 + 1 大佬啊~!
LYQingYe + 6 + 1 [快捷评语] - 2018,狗年发发发,狗年旺旺旺!
syzh802618 + 3 + 1 [快捷评语] - 2018,狗年发发发,狗年旺旺旺!
Shark恒 + 1 + 100 + 1 赞,喜欢这种主题!

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
 楼主| 李沉舟 发表于 2018-2-25 19:27 | 显示全部楼层

补上试炼品: VMP原版.vmp.rar (631.45 KB, 下载次数: 23)
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
syzh802618 发表于 2018-2-25 19:45 | 显示全部楼层

感谢楼主分享,先收藏了
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
 楼主| 李沉舟 发表于 2018-2-25 19:49 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
LYQingYe 发表于 2018-2-25 20:19 | 显示全部楼层

和这帖子思路有点像  https://bbs.pediy.com/thread-224732.htm
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
 楼主| 李沉舟 发表于 2018-2-25 20:26 | 显示全部楼层

LYQingYe 发表于 2018-2-25 20:19
和这帖子思路有点像  https://bbs.pediy.com/thread-224732.htm

我怀疑我和作者都是看了天易love的帖子写的。我的思路是按照天易的写的,不过我浏览了一下,作者的没我的详细。自恋一把
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
LYQingYe 发表于 2018-2-25 20:29 | 显示全部楼层

李沉舟 发表于 2018-2-25 20:26
我怀疑我和作者都是看了天易love的帖子写的。我的思路是按照天易的写的,不过我浏览了一下,作者的没我的 ...

哈哈, 强悍
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
ladybe 发表于 2018-2-25 21:13 | 显示全部楼层

非常牛B  帅得一批 不过可惜我看不懂
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
ladybe 发表于 2018-2-25 21:14 | 显示全部楼层

这么好的帖子才那么点回复量啊 可惜可惜
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
头像被屏蔽
minquan800 发表于 2018-2-25 21:51 | 显示全部楼层

可以忙逆向个游戏FZ吗
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层
4层
5层
6层
7层
8层
9层
10层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

快速回复 返回顶部 返回列表