【问题标题】:Hooking extTextOut problems挂钩 extTextOut 问题
【发布时间】:2013-09-25 00:56:16
【问题描述】:

我正在 c# 中进行 dll 注入软件,注入的 dll 也在 c# 中,并且我正在将 pinvoke 用于某些系统功能。

当使用 extTextOut 时,我得到了字符串加扰并且行混合在一起 我做错了什么?

我使用来自 codeplex.com 的 EasyHook 连接了 extTextOut,如下所示:

try
            {                
                CreateFileHook = LocalHook.Create(
                    LocalHook.GetProcAddress("gdi32.dll", "ExtTextOutW"),
                    new DExtTextOutW(ExtTextOutW_Hooked),
                   this);

                CreateFileHook.ThreadACL.SetExclusiveACL(new Int32[1]);

            }

而我的 extTextOut 方法是

[DllImport("gdi32.dll", CharSet = CharSet.Auto, SetLastError = true, CallingConvention = CallingConvention.StdCall)]
        static extern bool ExtTextOutW(IntPtr hdc,
                                       int X,
                                       int Y,
                                       uint fuOptions,
                                       [In] ref RECT lprc,
                                       string lpString,
                                       uint cbCount,
                                       [In] IntPtr lpDx);

static bool ExtTextOutW_Hooked(
            IntPtr hdc,
            int X,
            int Y,
            uint fuOptions,
            [In] ref RECT lprc,
            string lpString,
            uint cbCount,
            [In] IntPtr lpDx)
        {


            try
            {
                DemoInjection This = (DemoInjection)HookRuntimeInfo.Callback;

                lock (This.Queue)
                {                    
                    This.Queue.Push(lpString);

                }
            }
            catch
            {
            }           

            return ExtTextOutW(
                 hdc,
                 X,
                 Y,
                 fuOptions,
                 ref lprc,
                 lpString,
                 cbCount,
                 lpDx
                  );

        }

如果可以,还有一个问题。如何持续监控失焦或最小化的窗口(使用这种方法无法正常工作)

非常感谢!

【问题讨论】:

    标签: c# hook gdi dll-injection easyhook


    【解决方案1】:

    如果我正确理解您所说的“字符串乱码和线条混杂”的意思,那么有两个问题可能会对您有所帮助:

    1. 字符串可以输出为 Glyphs 索引而不是字符(因此将显示为乱码)。

    2. 您应该只参考 cbCount 参数提供的字符数量,字符串中的其他字符可能是“垃圾”字符。

    希望有所帮助。

    【讨论】:

    • 现在我遇到了同样的问题。即使我只是将参数传递给 ExtTextOutW 函数,我仍然在挂钩程序中遇到问题 - 它显示一些象形文字而不是拉丁文本。我敢肯定,问题是 MarshalAs 在转换为 CLR 字符串时会更改源数据中的某些内容。问题只有在设置 Glyphs 标志时才会出现,否则钩子可以正常工作并且钩子文本不会损坏。
    猜你喜欢
    • 2011-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多