0

私は 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
                  );

        }

そして、もしよろしければ別の質問です。焦点が合っていない、または最小化されているウィンドウを常に監視するにはどうすればよいですか (このアプローチを使用すると、正しく機能しません)

どうもありがとう!

4

1 に答える 1

1

「文字列がスクランブルされ、行が混ざり合う」とはどういう意味かを正しく理解していれば、次の2つの問題が解決する可能性があります。

  1. 文字列は、CharではなくGlyphsインデックスとして出力される可能性があります(したがって、スクランブルされたテキストとして表示されます)。

  2. cbCountparamによって提供される文字の量のみを参照する必要があります。文字列内の他の文字は「ガベージ」文字である可能性があります。

お役に立てば幸いです。

于 2010-12-07T16:03:36.873 に答える