Skip to content

内存镜像法

Warning

The current page still doesn't have a translation for this language.

You can read it through Google Translate.

Besides, you can also help to translate it: Contributing.

内存镜像法是在加壳程序被加载时, 通过OD的ALT+M快捷键, 进入到程序虚拟内存区段. 然后通过加两次内存一次性断点, 到达程序正确OEP的位置.

内存镜像法的原理在于对于程序资源段和代码段下断点, 一般程序自解压或者自解密时, 会首先访问资源段获取所需资源, 然后在自动脱壳完成后, 转回程序代码段. 这时候下内存一次性断点, 程序就会停在OEP处.

要点

  1. 选择菜单的选项->调试选项->异常
  2. 勾选所有的忽略异常
  3. 按下ALT+M, 打开内存镜像, 找到程序的第一个.rsrc, 按F2下断点, 然后按SHIFT+F9运行到断点
  4. 再按ALT+M, 打开内存镜像, 找到程序的第一个.rsrc上面的.text(在示例中是00401000处), 按F2下断点. 然后按SHIFT+F9(或者是在没异常情况下按F9)

示例

示例程序可以点击此处下载: 4_memory.zip

OD载入程序, 在菜单栏的选项->调试设置->异常标签页中勾选所有的忽略异常

memory_01.png

按下Alt+M打开内存镜像, 找到资源段, 也就是地址=00407000, 大小=00005000.rsrc段, 选中F2下断

memory_02.png

回到CPU窗口, 按下F9运行, 程序断在了0040D75F

memory_03.png

再次按下Alt+M打开内存镜像, 对.text代码段下断

memory_04.png

再继续运行, 程序断在了004010CC处, 也就是OEP

memory_05.png