程序启动后,内存 (RAM) 中的某些字节会发生变化。为什么?

逆向工程 记忆 可执行程序 倾倒
2021-06-20 12:01:43

我的情况是我有一个可执行文件。当我在调试器 (x32dbg) 中启动它时,断点设置为每种情况(DLL 入口、DLL 加载、线程启动等),以限制在文件运行后立即执行的操作数量,

在转储中,我看到一些字节与 exe 文件中相同位置的字节不同。

为什么会发生这种情况以及如何防止这种情况发生? 右边是exe文件,改变的字节都在文件周围。 左边,runtime取出内存

我的想法是它与某种动态链接有关。这些值在以下情况下会发生变化: exe 已保存(即使内容与之前完全相同)并运行。因此,重新计算代码所在的偏移量和特定字节。然而,唯一加载的是ntdll.dll,然后第一个断点被命中。所以我猜 exe 的内容被复制到 ram,那个时候一切都好,然后神奇的部分发生了,子程序或什么知道要更改哪些字节并更改它们,然后调试器获得控制权。

1个回答

神奇之处可能是在到达入口点之前运行的 TLS 回调。这种行为有据可查,例如参见以下文章:

https://isc.sans.edu/diary/How+Malware+Defends+Itself+Using+TLS+Callback+Functions/6655