第一章

概述

1.1  简介

OllyMachine是调试器OllyDbg的一个插件。可以通过使用一套汇编语言——OllyMachine Script来编写脚本,并编译成字节码提交给OllyMachine虚拟机执行,以达到操纵OllyDbg的目的。

1.2  主页

OllyMachine

1.3  安装

拷贝OllyMachine.dll到OllyDbg的Plugin目录下。

1.4  运行

安装完毕后,在OllyDbg的Plugins目录中会出现OllyMachine的菜单项,选择里面的对应项即可。

1.4.1  运行脚本

默认的脚本文件的扩展名为“.oms”,表示“OllyMachine Script”。在运行时打开这种文件,就可以由汇编器把源代码汇编成字节码并送入虚拟机执行。

1.4.2  运行字节码文件

默认的字节码文件的扩展名为“.omb”,表示“OllyMachine Binary”。在运行时打开这种文件,就会由内置的Loader载入字节码并送入虚拟机执行。

值得注意的是:

  1. OllyMachine会自动判断读入的文件是否为字节码文件,如果是的话,就会在内部走字节码文件的流程,否则就会走脚本文件的流程。

  2. 在执行脚本或字节码文件之前,必须要保证在OllyDbg中至少已经打开了一个PE文件进行调试,否则可能会导致OllyMachine产生运行期异常。

1.5  关于

OllyMachine是免费软件,作者保留其版权,但不保留任何其他权利。

1.6  历史

[2004-12-07] 0.20版。

  1. 新增:四个新的API:

  2. 新增:可以对标志位CF, PF, AF, ZF, SF, DF, OF进行操作,例如:

    not cf
    mov zf, 0
    mov pf, 1
    

  3. 新增:可以用别的插件调用OllyMachine,调用方式:

    HMODULE hOMDll;
    typedef void (__cdecl *RUNOMFILE)(const char *);
    RUNOMFILE RunOMFile;
    
    hOMDll = GetModuleHandle("OllyMachine.dll");
    // Check that the other plugin is present and loaded
    if (hOMDll)
    {
        // Get address of exported function
        RunOMFile = (RUNOMFILE)GetProcAddress(hOMDll, "RunOMFile");
        // Check that the other plugin exports the correct function
        if (RunOMFile)
        {
            RunOMFile("test.oms");  // Execute script
            RunOMFile("test.omb");  // Execute binary
        }
    }
    

  4. 修正:在双引号中的双斜线的bug。

  5. 修正:在某些算术操作中没有对OllyDbg的寄存器进行操作的bug。

[2004-12-01] 0.19版。

  1. 新增:一个新的输出API:

  2. 新增:三个新的跟断点相关的API:

[2004-11-30] 0.18版。

  1. 新增:两个新的搜索API:

  2. 新增:两个新的替换API:

  3. 修正:在Search中的一个bug,有时会导致无法找到正确的地址。

[2004-11-29] 0.17版。

  1. 修正:内嵌汇编功能,我重写了内嵌汇编的词法和语法分析器,修正了几个bug。

  2. 修正:以前的版本中,OllyMachine.ini会保留在OllyDbg的主目录下,现在修正为放在OllyMachine.dll的同一目录下。

  3. 修正:对处理异常的同步错误。

[2004-11-28] 0.16版。

  1. 新增:内嵌汇编功能:__asm { }

  2. 新增:三个新的API:

[2004-11-27] 0.15版。

  1. 新增:一个新的搜索API:

  2. 新增:两个新的运行API:

  3. 新增:五个新的辅助调试API:

[2004-11-26] 0.14版。

  1. 新增:两个新的输出API:

  2. 激活:DumpAsPE,但目前的版本还不能修正引入表。(special thanks to Blue)

  3. 修正:双引号字符串中的斜杠问题。

[2004-11-24] 0.13版。

  1. 新增:一系列的缓冲区API:

  2. 新增:在Compile时,如果.omb文件已存在,提示是否覆盖。

  3. 修正:GetProcAddress这个API的返回地址错误。

  4. 修正:对int3和memory breakpoint的同步错误。

[2004-11-23] 0.12版。

  1. 新增:直接支持对双引号字符串的引用,例如:invoke Msg, "Hello!"

  2. 新增:Find,支持通配符。

  3. 新增:HideOD和UnHideOD,用来隐藏OllyDbg,在WinXP Sp2下同样有效。

  4. 修改:对ReadMemLong和WriteMemLong增加字节数的限制。

  5. 修正:最近文件列表退出时没有更新。

  6. 修正:FindOpcode和ReplaceBytes的bug。

[2004-11-21] 0.11版。

  1. 新增:invoke宏调用API方式。

  2. 新增:“最近文件”列表功能。(thanks to pll621)

  3. 修正:一个虚拟机同步的bug。

[2004-11-15] 0.10版。

1.7  联系方式

作者:罗聪
地址:广东省珠海市吉大景山路莲山巷8号金山软件公司毒霸引擎组
邮编:519015
主页:http://www.luocong.com
E-Mail:admin[AT]luocong.com