OllyDbg内存插件:RestoreMemory.dll
Restore Memory plugin v1.10
Writen by BeamDot
一、关于插件功能的几个说明:
1. “保留”选项
勾选“保留”选项以后进行分配或释放,内存块的状态变成MEM_RESERVE,不能被使用,所以不会在OllyDbg内存窗口显示。对于这种状态的内存块可以不勾“保留”选项然后再分配(状态变成MEM_COMMIT,可以使用)或释放(状态变成MEM_FREE)。
注意:当内存状态处于MEM_RESERVE(即勾选“保留”选项分配和释放成功的),不能访问,所以不能实施转储、回存和修正代码以及改变它的页保护这四项操作。
2. “随机”选项
如果分配时指定地址为0就相当于勾选“随机”选项,如果同时勾选“颠倒”选项就会从高地址开始随机分配一块可用内存。分配和释放内存的地址大小是以节对齐为单位(释放内存不需要指定大小,它将从AllocationBase地址开始释放整块内存)。分配或释放后可以按查询钮或者刷新OllyDbg内存窗口查看结果。
3. 转储、回存与修正代码
在把内存里的东西转储到文件,或者把文件写回内存的时候,可以精确指定地址和大小,不受节对齐影响。
在把转储的代码写回内存的时候,如果写入地址与原来转储时的地址不同,可能需要修正代码,这个插件能够修正CALL,JXX,JX三类长转移指令,你只须在地址框指定代码开始地址、在大小框指定内存大小、以及在原地址框给出转储时代码的开始地址,然后按“修正代码”钮即可。
所使用的长转移修正公式是:newjumpdata=oldjumpdata+(oldaddr-newaddr),如果偏差(即 oldaddr-newaddr)等于0则不需要修正。原地址就是――转储文件名一般取为“地址(大小).mem”。
4. 页保护选择
页保护列表可以多选,但不是所有组合有效,它也不能所有情况下都有效改变保护。一般只选择PAGE_EXECUTE_READWRITE这一条就可以了。
5. 信息
用这个插件分配和释放的内存,如果成功会在LOG窗口记录,也显示信息栏,但不记录在.udd文件。
二、插件用法:
有效的操作需要先打开一个调试进程。最后一次操作选项被记录做为下次启动OllyDbg时这个插件的默认值。
从OllyDbg主菜单 插件->RestoreMemory-> Show/Hide Mini 或者 Full Window
前者其实是创建/销毁迷你窗口,可以分配(A)、释放(F)、转储(D)、回存(R)、修正代码(I),这个窗口象一条工具栏,宽度将近达到屏宽,不过右半部分操作会被记录,并不需要经常改变,因此这个窗口嵌入CPU窗口在DUMP子窗口下方,一般只显示左半部分够了;当你拖拉CPU分栏改变宽高的时候它会自动暂时隐藏自动显示;在它的最右侧显示页保护参数(这里仅与分配内存有关),只能在完整窗口设置。
后者打开完整窗口,除了有以上五项功能之外,这里还可以查询指定内存块的若干属性状态、改变内存块的页保护、指定分配内存时的页保护参数(列表中选择即可)、设置自动开启迷你栏(当OD打开第一个调试程序时自动)。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课