OllyMachine是调试器OllyDbg的一个插件。可以通过使用一套汇编语言——OllyMachine Script来编写脚本,并编译成字节码提交给OllyMachine虚拟机执行,以达到操纵OllyDbg的目的。
拷贝OllyMachine.dll到OllyDbg的Plugin目录下。
安装完毕后,在OllyDbg的Plugins目录中会出现OllyMachine的菜单项,选择里面的对应项即可。
默认的脚本文件的扩展名为“.oms”,表示“OllyMachine Script”。在运行时打开这种文件,就可以由汇编器把源代码汇编成字节码并送入虚拟机执行。
默认的字节码文件的扩展名为“.omb”,表示“OllyMachine Binary”。在运行时打开这种文件,就会由内置的Loader载入字节码并送入虚拟机执行。
值得注意的是:
OllyMachine会自动判断读入的文件是否为字节码文件,如果是的话,就会在内部走字节码文件的流程,否则就会走脚本文件的流程。
在执行脚本或字节码文件之前,必须要保证在OllyDbg中至少已经打开了一个PE文件进行调试,否则可能会导致OllyMachine产生运行期异常。
OllyMachine是免费软件,作者保留其版权,但不保留任何其他权利。
[2004-12-07] 0.20版。
新增:四个新的API:
WriteMemHexes
ReadFileIntoMem
VirtualAllocEx
VirtualFreeEx
新增:可以对标志位CF, PF, AF, ZF, SF, DF, OF进行操作,例如:
not cf mov zf, 0 mov pf, 1
新增:可以用别的插件调用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 } }
修正:在双引号中的双斜线的bug。
修正:在某些算术操作中没有对OllyDbg的寄存器进行操作的bug。
[2004-12-01] 0.19版。
新增:一个新的输出API:
UpdateDumpBuf
新增:三个新的跟断点相关的API:
EOBINT3
EOBHW
EOBMEM
[2004-11-30] 0.18版。
新增:两个新的搜索API:
ReverseFind
ReverseSearch
新增:两个新的替换API:
CopyBytesTo
ReplaceBytesEx
修正:在Search中的一个bug,有时会导致无法找到正确的地址。
[2004-11-29] 0.17版。
修正:内嵌汇编功能,我重写了内嵌汇编的词法和语法分析器,修正了几个bug。
修正:以前的版本中,OllyMachine.ini会保留在OllyDbg的主目录下,现在修正为放在OllyMachine.dll的同一目录下。
修正:对处理异常的同步错误。
[2004-11-28] 0.16版。
新增:内嵌汇编功能:__asm { }
新增:三个新的API:
IsWinNTKernel
GotoCpuAddr
GotoDumpAddr
[2004-11-27] 0.15版。
新增:一个新的搜索API:
Search
新增:两个新的运行API:
StepIntoS
StepOverS
新增:五个新的辅助调试API:
FindProcBegin
FindProcEnd
FindPrevProc
FindNextProc
FollowCall
[2004-11-26] 0.14版。
新增:两个新的输出API:
PrintBufToDump
PrintBufToNewDump
激活:DumpAsPE,但目前的版本还不能修正引入表。(special thanks to Blue)
修正:双引号字符串中的斜杠问题。
[2004-11-24] 0.13版。
新增:一系列的缓冲区API:
malloc
free
strcpy
strcat
strlen
ltoa
memcpy
新增:在Compile时,如果.omb文件已存在,提示是否覆盖。
修正:GetProcAddress这个API的返回地址错误。
修正:对int3和memory breakpoint的同步错误。
[2004-11-23] 0.12版。
新增:直接支持对双引号字符串的引用,例如:invoke Msg, "Hello!"
新增:Find,支持通配符。
新增:HideOD和UnHideOD,用来隐藏OllyDbg,在WinXP Sp2下同样有效。
修改:对ReadMemLong和WriteMemLong增加字节数的限制。
修正:最近文件列表退出时没有更新。
修正:FindOpcode和ReplaceBytes的bug。
[2004-11-21] 0.11版。
新增:invoke宏调用API方式。
新增:“最近文件”列表功能。(thanks to pll621)
修正:一个虚拟机同步的bug。
[2004-11-15] 0.10版。
作者:罗聪
地址:广东省珠海市吉大景山路莲山巷8号金山软件公司毒霸引擎组
邮编:519015
主页:http://www.luocong.com
E-Mail:admin[AT]luocong.com