标题:【原创】用Oreans UnVirtualizer还原VM代码实验
作者:sungy
时间:2014-09-18
对VM一直很头痛,在逆向实践一般尽量想办法避开它,当黑盒来处理。有时候不面对她又不行,正好在论坛上看了Oreans UnVirtualizer插件,拿来实践学习下。新手可以了解下恢复VM代码的过程,高手可以帮助纠正错误并指导深入
相关工具可在看雪及网上找到:
Oreans UnVirtualizer VM恢复插件
Code Virtualizer v1.3.8 加密工具
OD 调试工具
加密目标程序源码选择Code Virtualizer v1.3.8中自带的例子
路径:ExamplesCVC32-bitVia API
编译环境 VC6.0
先观察下源码中准备加密的部分
用Code Virtualizer 载入编译链接后生成的目标程序:vc_example.exe
保护选项就默认吧:
代码虚拟选项:
点击相应的加密块,下面的汇编代码窗口出现对应的汇编代码,这个也可以在OD中得到验证
点Protect按钮实施保护,生成VM过的程序,我们叫vmtest.exe吧
现在用OD载入VM过的程序vmtest.exe,Ctrl+G 来到0040111C ,看到了吗,被VM蹂躏的实景如此! 到00401167时结束,又变成能看懂的汇编代码了
同理可以观察另一代VM过的代码:0040117F - 004011CD
好,现在来看看怎么用Oreans UnVirtualizer 1.8插件(OreansUnVirtualizer.dll)来恢复吧
解压插件后放到od-plug目录,用OD载入vmtest.exe,Ctrl+G 来到0040111C,此行右击鼠标选择Oreans UnVirtualizer - Find References,
填写vm开始地址和大小,大小可以放大些,如果不清楚的话。
出现下面的窗口,最小化它
在0040111C右键选择下面
确定后出现一个记事本,里面是已经还原了的VM汇编代码
对照VM加密前的汇编代码发现基本一致。
到此终于对VM代码还原有一个初步的接触,这个插件我也是刚玩,细节的东西还不了解,请高手回复指导,指正错误,推荐其它好用的VM修复插件及使用方法,谢谢。交流南鹅:659076544
作者:sungy
时间:2014-09-18
对VM一直很头痛,在逆向实践一般尽量想办法避开它,当黑盒来处理。有时候不面对她又不行,正好在论坛上看了Oreans UnVirtualizer插件,拿来实践学习下。新手可以了解下恢复VM代码的过程,高手可以帮助纠正错误并指导深入
相关工具可在看雪及网上找到:
Oreans UnVirtualizer VM恢复插件
Code Virtualizer v1.3.8 加密工具
OD 调试工具
加密目标程序源码选择Code Virtualizer v1.3.8中自带的例子
路径:ExamplesCVC32-bitVia API
编译环境 VC6.0
先观察下源码中准备加密的部分
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
////////////////////////////////////////////////////////////////////////////////////////////////////// if (LOWORD(wParam) == IDC_BUTTON_ENCODE1) { // the following code, inside the VIRTUALIZER macro, will be converted // into virtual opcodes VIRTUALIZER_START //VM 开始标志宏 for (int i = 0; i < 10; i++) { value += value * i; } MessageBox(NULL, "This is the Virtualizer macro #1" , "Virtualizer Macro" , MB_OK + MB_ICONINFORMATION); VIRTUALIZER_END //VM 结束标志宏 } else if (LOWORD(wParam) == IDC_BUTTON_ENCODE2) { // the following code, inside the VIRTUALIZER macro, will be converted // into virtual opcodes VIRTUALIZER_MUTATE2_START //VM 开始2 for (int i = 0; i < 10; i++) { value += value * i * 3; } MessageBox(NULL, "This is the Virtualizer with mutation level 2" , "Virtualizer Macro" , MB_OK + MB_ICONINFORMATION); VIRTUALIZER_END //VM 结束2 } /////////////////////////////////////////////////////////////////////////////////////////////////////// |
用Code Virtualizer 载入编译链接后生成的目标程序:vc_example.exe
保护选项就默认吧:
代码虚拟选项:
点击相应的加密块,下面的汇编代码窗口出现对应的汇编代码,这个也可以在OD中得到验证
点Protect按钮实施保护,生成VM过的程序,我们叫vmtest.exe吧
现在用OD载入VM过的程序vmtest.exe,Ctrl+G 来到0040111C ,看到了吗,被VM蹂躏的实景如此! 到00401167时结束,又变成能看懂的汇编代码了
同理可以观察另一代VM过的代码:0040117F - 004011CD
好,现在来看看怎么用Oreans UnVirtualizer 1.8插件(OreansUnVirtualizer.dll)来恢复吧
解压插件后放到od-plug目录,用OD载入vmtest.exe,Ctrl+G 来到0040111C,此行右击鼠标选择Oreans UnVirtualizer - Find References,
填写vm开始地址和大小,大小可以放大些,如果不清楚的话。
出现下面的窗口,最小化它
在0040111C右键选择下面
确定后出现一个记事本,里面是已经还原了的VM汇编代码
对照VM加密前的汇编代码发现基本一致。
到此终于对VM代码还原有一个初步的接触,这个插件我也是刚玩,细节的东西还不了解,请高手回复指导,指正错误,推荐其它好用的VM修复插件及使用方法,谢谢。交流南鹅:659076544
jpg改 rar