windbg 帮助缺少 kernel32 函数

windbg help missing kernel32 function

我正在尝试按照这里的教程进行操作 https://www.microsoftpressstore.com/articles/article.aspx?p=2201303 特别是其中提到 x kernel32 的部分!writeprocessmemory

我找不到方法 kernel32!WriteProcessMemory = 尽管文档提到了它,但我可以找到 kernel32!_imp__WriteProcessMemory 和 kernel32!WriteProcessMemoryStub。我是 windbg 的新手,正在尝试按照教程进行操作,所以我不确定这种方法是否已被弃用,如果是,它的替代品是什么以及我们如何实现类似的功能。

谢谢

导出的 WriteProcessMemory 函数实际上指向 kernel32!WriteProcessMemoryStub 存根,它本身跳转到 kernel32!__imp_WriteProcessMemory 上,后者重定向到 kernelbase DLL,即 "real" 这个函数的位置。

让我们检查一下 link 转储:

C:>link /dump /exports c:\windows\system32\kernel32.dll | findstr /I WriteProcess
       1579  62A 00036C50 WriteProcessMemory

0x36C50 是函数 "WriteProcessMemory" 驻留在 kernel32 中的 RVA(由导出 table 给出)。现在在 windbg 中:

0:007> ln kernel32 + 0x36c50
Browse module
Set bu breakpoint

(00007ff9`4a6e6c50)   KERNEL32!WriteProcessMemoryStub   |  (00007ff9`4a6e6c60)   KERNEL32!ZombifyActCtxStub

我们有一个精确匹配,实际上是 KERNEL32!WriteProcessMemoryStub 函数。如果我们看一下:

0:007> u KERNEL32!WriteProcessMemoryStub
KERNEL32!WriteProcessMemoryStub:
00007ff9`4a6e6c50 48ff2599150400  jmp     qword ptr [KERNEL32!_imp_WriteProcessMemory (00007ff9`4a7281f0)]
00007ff9`4a6e6c57 cc              int     3

我们可以看到它只是跳转到 KERNEL32!_imp_WriteProcessMemory(位于 kernel32 的 .idata 部分的某处)。

现在,如果我们查看此位置包含的内容,我们有一个指针:

0:007> dp KERNEL32!_imp_WriteProcessMemory L1
00007ff9`4a7281f0  00007ff9`496f0ca0

如果我们问windbg这个指针是什么:

0:007> ln 00007ff9`496f0ca0
Browse module
Set bu breakpoint

(00007ff9`496f0ca0)   KERNELBASE!WriteProcessMemory   |  (00007ff9`496f0dc4)   KERNELBASE!OpenWow64CrossProcessWorkConnection
Exact matches:
    KERNELBASE!WriteProcessMemory (void)

我们可以看到 WriteProcessMemory 的 "real" 位置实际上在 kernelbase.dll.


注意:您实际上可以使用 dps:

将最后两个命令合而为一
0:007> dps KERNEL32!_imp_WriteProcessMemory L1
00007ff9`4a7281f0  00007ff9`496f0ca0 KERNELBASE!WriteProcessMemory

使用的 Windbg 命令: