从注入过程跟踪HDC

时间:2010-02-20 11:53:35

标签: c++ code-injection detours

我面临着两难的境地。我已经将我的DLL注入到其他进程中以及几个钩住了 从那里调用WinAPI,ExtTextOutW @ GDI32,DrawTextExW @ GDI32和AlphaBlend @ Msimg32是具体的。现在,问题是当另一个应用程序用这两个GDI32函数写入内容时,我不知道它出现的确切位置。这是因为包含文本的DC会被AlphaBlend处理,最终也会将它放到窗口的DC中。

那么,我该如何跟踪某些HDC?在伪代码中,这是另一个应用程序的绘制方式 文字到屏幕:


HDC h = DrawTextW("STRING")

Do something with h. The "STRING" gets new HDC, say h2.

Pass h2 to AlphaBlend, which draws it to the screen.

就像我说的那样,当字符串在AlphaBlend之前获得新DC时,我用原始h松散了轨道。 任何想法,我如何从h>建立连接; h2中有一定的字符串吗?

我不知道我是否能够正确解释问题,请问您是否有任何问题......

1 个答案:

答案 0 :(得分:0)

static BOOL (WINAPI *AlphaBlend_t)(
  HDC           hdcDest,
  int           nXOriginDest,
  int           nYOriginDest,
  int           nWidthDest,
  int           nHeightDest,
  HDC           hdcSrc,
  int           nXOriginSrc,
  int           nYOriginSrc,
  int           nWidthSrc,
  int           nHeightSrc,
  BLENDFUNCTION blendFunction
) = AlphaBlend;

BOOL MyAlphaBlend(
  HDC           hdcDest,
  int           nXOriginDest,
  int           nYOriginDest,
  int           nWidthDest,
  int           nHeightDest,
  HDC           hdcSrc,
  int           nXOriginSrc,
  int           nYOriginSrc,
  int           nWidthSrc,
  int           nHeightSrc,
  BLENDFUNCTION blendFunction
) 
{
    // modify hdcDest to hdcDest2
    return AlphaBlend_t(hdcDest2, ...);
}

这应该可以解决问题。放入任何代码来修改后一个函数中的HDC