【问题标题】:windbg help missing kernel32 functionwindbg 帮助缺少 kernel32 功能
【发布时间】:2020-05-13 07:54:57
【问题描述】:

我正在尝试在这里https://www.microsoftpressstore.com/articles/article.aspx?p=2201303 关注本教程,特别是它提到 x kernel32 的部分!writeprocessmemory

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

谢谢

【问题讨论】:

  • 0:000> .foreach (place { x /1 kernel32!*wrprme*} ) { dps place l1 } 从 Windows 7 开始,许多函数已被移动进入不同的 dll 并使用 API-SET 将所有这些旧函数解析为新的 dll,您可能正在使用 xp 时代的 tut / doc

标签: windbg kernel32


【解决方案1】:

导出的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:

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 的“真实”位置实际上是在kernelbase.dll


注意:您实际上可以使用dps 将最后两个命令合二为一:

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

使用的 Windbg 命令:

【讨论】:

  • 非常感谢!您是否有机会推荐一些用于学习 windbg 的资源,似乎数量众多,但没有一个可以让您付诸实践!
  • 还有一个问题,当我检查堆栈时,我注意到在某些示例中它的格式为 CHILD EBP 返回地址,然后是信息。虽然在我的它显示 CHILD SP 返回地址和信息,但是否有一些带有 k 命令的堆栈显示不同的原因?
  • @Mohamed341 1) 我能想到的唯一“教程”在Practical Reverse Engineering Reversing 书中(免责声明:它是由我的朋友写的)有一个专门的关于使用windbg练习的章节。 2)这取决于你使用的windbg'flavor':x86版本显示“Child EBP”而x64版本显示“Child SP”(即使在调试x86代码时)。
猜你喜欢
  • 2015-03-09
  • 2011-02-12
  • 1970-01-01
  • 1970-01-01
  • 2016-06-11
  • 1970-01-01
  • 2017-10-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多