kernel32.dll和kernelbase.dll之间令人困惑的基址



据说在struct PEB_LDR_DATA的偏移0x1C上存储了指向In InitializationOrderModuleList的头指针,对吗?

除此之外,In InitializationOrderModuleList的第二个节点应该是kernel32.dll,但是当我找到第二个节点时,发现它不是kernel32.dll的基址,而是类似kernelbase.dll的地址,这怎么解释呢?

谢谢!

您依赖于未记录的实现细节,并且您遇到了较新的实现。

实现细节不能保证保持不变。

这个特定的细节似乎已经被改变,以提供针对使用缓冲区溢出漏洞的代码注入攻击的深度防御。

这里的注释是正确的,您正在运行到动态加载kernel32.dll的Windows的新(实际上在这一点上相当老)更改。你正在尝试的策略在Vista之后停止工作。

当然,这并不意味着你不能。这个策略对我来说很有效: http://blog.harmonysecurity.com/2009_06_01_archive.html

最新更新