65.9K
CodeProject 正在变化。 阅读更多。
Home

拦截 Web 服务中的调用(工作进程)

starIconstarIconstarIconstarIconstarIcon

5.00/5 (3投票s)

2011年11月7日

CPOL

2分钟阅读

viewsIcon

18419

如何在工作进程中直接拦截 Web 服务调用。

引言

本文不是关于 Web 服务及其用法的教程。该技术的使用在软件行业中广为人知。

本文的目的是展示一种“如何拦截 Web 服务调用并在屏幕上显示”的方法。我们将直接在工作进程上操作。不幸的是,使用嗅探器,我们无法获取来自 localhost 的流量。

好的,我们开始吧

假设你有一个正在调用 Web 服务的应用程序。

  1. 打开 Windows 调试器:windbg.exe 进程。
  2. 按 F6 并附加 w3wp.exe 进程。
  3. 一旦附加了进程,执行命令(对于 .NET Framework < 4.0,使用 .loadby sos mscorwks):.loadby sos mscoreei
  4. 经过深入研究,我发现一个有趣的功能,可能很有用:System.Web.HttpRequest.GetEntireRawContent
  5. 让我们尝试查看此函数在何时 JIT 编译
  6. !name2ee * System.Web.HttpRequest.GetEntireRawContent

  7. JIT 编译后的地址是 5241cfd0,所以让我们在该地址设置一个断点:bp 5241cfd0
  8. 使用你的应用程序,它将被冻结,因为断点已被触发。
  9. 经过调查,此函数运行并返回 System.Web.HttpRawUploadedContent 类。为了运行此方法直到结束,让我们使用 pt 命令。
  10. 通过简单检查,我们可以看到它在 @eax 寄存器中返回所有具有 HttpRawUploaded 类的变量。让我们查看 _data 字段。
  11. 很好,我们在 byte[] 中获得了 Web 服务调用的整个内容。如何每次调用此函数时都将其转储到屏幕上? .printf "%ma",poi(eax+4)+8,其中 4 是获取此类中数据的偏移量,eax 是此方法的返回地址,8 是 Web 服务中第一个字符的地址。%ma 表示 ANSI 字符。
  12. 让我们删除第一个断点,并在该函数的末尾设置一个新的断点:bc *
  13. 让我们设置:Bp eip “.printf \"\\n%ma\",poi(eax+4)+8;gc”
  14. 现在我们有了所有 Web 服务的调用,用于监控。

© . All rights reserved.