zoukankan      html  css  js  c++  java
  • [原创]用Oreans UnVirtualizer还原VM代码

    标题:【原创】用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

    先观察下源码中准备加密的部分
    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 
  • 相关阅读:
    近期C#小问题总结
    Arcgis由栅格数据提取等值线
    Arcgis由离散点制作核密度图
    用Arcgis为离散点区域生成格网(渔网)
    Arcengine合并面要素
    对离散点进行抽稀
    对离散点进行区域分割
    关于异常来自 HRESULT:0x80040351
    分布式缓存---Memcached 入门
    Mongodb安装 for windows7 64位
  • 原文地址:https://www.cnblogs.com/kuangke/p/7590684.html
Copyright © 2011-2022 走看看