kernel32.dll中存在看似无限循环的反向转发

问题描述 投票:0回答:1

我正在为 Windows 10 编写 x86 手动地图注入器。

在编写负责解析导入的代码时,我发现了

kernel32.dll
(
windows\syswow64\kernel32.dll
) 中的一个名为
"SleepConditionVariableSRW"
的函数,它是
"api-ms-win-core-synch-l1-2-0.SleepConditionVariableSRW"
的转发器。我一直在测试我的注入器的 DLL 依赖于它并从
kernel32.dll
导入它。

当我加载模块(从

windows\syswow64\downlevel
)并查看导出时,
SleepConditionVariableSRW
再次成为转发器,但又变为
kernel32.dll
。如果是常规反向转发并且 API 设置转发到
kernelbase.dll
或其他什么,我会理解,但这对我来说毫无意义。

我正在测试的 DLL,从

kernel32.dll
导入函数:

image

kernel32.dll
将函数作为转发器导出到 API 集:

image

将函数作为转发器导出回

kernel32.dll
的API集,它首先转发到API集:

image

我查看了整个驱动器上该 API 集的每个副本,并检查了导出,看看其中是否有任何一个(甚至是 x64)将该函数转发到除

kernel32.dll
之外的任何模块。他们没有。

我使用

LoadLibraryA
注入了我一直在测试的 DLL,并检查了对该函数的引用,它从
SleepConditionVariableSRW
调用了
kernelbase.dll
。 Windows 图像加载器如何确定它位于哪个模块中?我认为函数的转发器名称总是包含正确的模块来查找导出。

c++ windows x86 windows-10 reverse-engineering
1个回答
0
投票

Windows\System32\ApiSetSchema.dll 有一个名为 .apiset 的部分,其中包含将所有 API 集映射到其主机模块的数据。更多信息请访问 https://www.geoffchappell.com/studies/windows/win32/apisetschema/index.htm

© www.soinside.com 2019 - 2024. All rights reserved.