为什么程序不能写入特定的内存区域

逆向工程 ollydbg 例外
2021-07-01 23:34:08

我正在处理来自“实用恶意软件分析”的 Lab13-01.exe(您可以从这里下载)。

当我在我的 VMWare 中没有调试器的情况下运行它时,它运行没有错误。

我开始用 OllyDbg 2.01 分析它。

代码中有一点会收到异常,我不明白为什么。

它具有包含编码字符串的资源:

LLLKIZXORXZWVZWLZI^ZUZWBHRHXTV

该资源保存在地址0x408060
At0x4011C1它用以下内容覆盖字符串的第一个字节AL (0x77)

MOV BYTE PTR DS:[ECX], AL

然后我收到了:

写入时访问冲突 [00408060]

在此处输入图片说明

当我按 Shift+Run/Step 时,它成功运行。

这里有很多我不明白的事情。

  1. 如果它不能写入[00408060],为什么当我按下 Shift+Run/Step 时它会成功?
  2. 为什么它不能写入[00408060]是否有一些标志阻止写入此区域(如果是,我在哪里可以看到它?)?
2个回答

我去了内存映射窗口。
我搜索了 408060 的内存地址范围。
它在.rsrc(资源)下。
它只有读权限,我也设置了写权限,现在它可以工作了:

在此处输入图片说明

很可能是代码/数据隔离。

在 Windows 中,它被称为数据执行保护。

很多恶意软件会像加载数据一样加载它们的代码,然后可能会在解密后重写它,然后尝试执行它。

DEP 应该始终打开,但出于本演示的目的,也许您可​​以将其关闭,看看是否会得到不同的结果。

然后重新打开它。