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





5.00/5 (3投票s)
如何在工作进程中直接拦截 Web 服务调用。
引言
本文不是关于 Web 服务及其用法的教程。该技术的使用在软件行业中广为人知。
本文的目的是展示一种“如何拦截 Web 服务调用并在屏幕上显示”的方法。我们将直接在工作进程上操作。不幸的是,使用嗅探器,我们无法获取来自 localhost 的流量。
好的,我们开始吧
假设你有一个正在调用 Web 服务的应用程序。
- 打开 Windows 调试器:windbg.exe 进程。
- 按 F6 并附加 w3wp.exe 进程。
- 一旦附加了进程,执行命令(对于 .NET Framework < 4.0,使用 .loadby sos mscorwks):.loadby sos mscoreei。
- 经过深入研究,我发现一个有趣的功能,可能很有用:
System.Web.HttpRequest.GetEntireRawContent
。 - 让我们尝试查看此函数在何时 JIT 编译
- JIT 编译后的地址是 5241cfd0,所以让我们在该地址设置一个断点:
bp 5241cfd0
。 - 使用你的应用程序,它将被冻结,因为断点已被触发。
- 经过调查,此函数运行并返回
System.Web.HttpRawUploadedContent
类。为了运行此方法直到结束,让我们使用 pt 命令。 - 通过简单检查,我们可以看到它在
@eax
寄存器中返回所有具有HttpRawUploaded
类的变量。让我们查看_data
字段。 - 很好,我们在
byte[]
中获得了 Web 服务调用的整个内容。如何每次调用此函数时都将其转储到屏幕上? .printf "%ma",poi(eax+4)+8,其中 4 是获取此类中数据的偏移量,eax
是此方法的返回地址,8 是 Web 服务中第一个字符的地址。%ma 表示 ANSI 字符。 - 让我们删除第一个断点,并在该函数的末尾设置一个新的断点:
bc *
。 - 让我们设置:Bp eip “.printf \"\\n%ma\",poi(eax+4)+8;gc”。
- 现在我们有了所有 Web 服务的调用,用于监控。
!name2ee * System.Web.HttpRequest.GetEntireRawContent