Release
我这里使用的是Release的版本,Debug的版本分析没有多少的必要,因为程序发布过之后就是Release的,我们先看一下这个文件
原程序分析
使用OD打开VMProtectDemo1.exe
原版程序
因为在我们的程序使用到了MessageBox
,所以这里我们就下bp MessageBoxW
断点。为什么是MessageBoxW
这是因为我刚开始是用的VS2008生成的默认工程,默认工程是Unicode
的程序,所以这里就断MessageBoxW
运行程序
使用F9
运行程序,让程序跑起来,这时会断到我们的MessageBoxW
的断点上,我们按Alt+F9
返回到用户代码。
013D1000 >/$ 68 B8213D01 PUSH OFFSET VMProtec.??_C@_0BH@NEBMIKLA@>; ASCII "VMProtec Tag By Sollyu"
013D1005 |. FF15 B0203D01 CALL DWORD PTR DS:[<&VMProtectSDK32.VMPr>; VMProt_1.VMProtectBeginVirtualizationLockByKey
013D100B |. 6A 40 PUSH 40 ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
013D100D |. 68 D0213D01 PUSH OFFSET VMProtec.??_C@_1BE@GCDIBBA@?>; |Title = "By:Sollyu"
013D1012 |. 68 E4213D01 PUSH OFFSET VMProtec.??_C@_1CA@BBLPMEIO@>; |Text = "VMProtect Test."
013D1017 |. 6A 00 PUSH 0 ; |hOwner = NULL
013D1019 |. FF15 A4203D01 CALL DWORD PTR DS:[<&USER32.MessageBoxW>>; \MessageBoxW
013D101F |. FF15 AC203D01 CALL DWORD PTR DS:[<&VMProtectSDK32.VMPr>; VMProt_1.VMProtectEnd
可以很清除的看到我们的MessageBoxW
。
保护程序分析
使用OD分析
和原程序分析
一样,下bp MessageBoxW
断点,F9运行调试
当执行到MessageBoxW
的时候,我们可以发现完全不是我们想要的代码了,而且出现了错误调试。
我们可以在VMProtect
找到这段文本的说明,首先要开启专家模式
可以看到这是在说文件损坏
,禁止调试的一种
IDA分析
使用OD动态调试不行,我们在使用IDA看一下效果。这里是两个程序的对比图
原程序
保护程序
可以看到,已经改的面目全非
了。