windbg帮助丢失内核32函数

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

我正试图按照这个教程在这里 https:/www.microsoftpressstore.comarticlesarticle.aspx?p=2201303 特别是提到x kernel32的部分!kernel32!

我找不到kernel32!WriteProcessMemory =这个方法,尽管文档中提到了,但是我可以找到kernel32!_imp__WriteProcessMemory和kernel32!WriteProcessMemoryStub。我是windbg的新手,正试图按照教程去做,所以我不确定这个方法是否已经被废弃,如果是的话,它的替代品是什么,我们如何实现类似的功能。

谢谢你

windbg kernel32
1个回答
2
投票

输出的 WriteProcessMemory 事实上,函数指向的是 kernel32!WriteProcessMemoryStub 存根,它本身也会跳到 kernel32!__imp_WriteProcessMemory 它重定向到 kernelbase DLL是这个函数的 "真正 "位置。

让我们用链接转储检查一下。

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

0x36C50是函数 "WriteProcessMemory "在kernel32中的RVA位置(如导出表所示). 现在在windbg中,我们有一个完全匹配的函数,它在内核32中(由导出表给出)。

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

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

我们有了一个完全匹配的函数,它实际上是 "WriteProcessMemory"。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 (位于某地) .idata kernel32的一部分)。)

现在如果我们看一下这个位置包含了什么,我们有一个指针。

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 其实 kernelbase.dll.


注意:实际上,你可以在最后两个命令中使用 dps:

0:007> dps KERNEL32!_imp_WriteProcessMemory L1
00007ff9`4a7281f0  00007ff9`496f0ca0 KERNELBASE!WriteProcessMemory

使用Windbg命令

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