2010-04-30 16 views
0

Je travaille sur une injection de dll soft en C#, la dll injectée est aussi en C# et j'utilise pinvoke pour certaines fonctions du système. Lorsque j'utilise extTextOut, j'obtiens la chaîne brouillée et les lignes se mélangent Accrocher des problèmes extTextOut

I accroché ExtTextOut en utilisant EasyHook de codeplex.com comme ceci:

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

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

      } 

et ma méthode de ExtTextOut est

[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 
       ); 

     } 

Et une autre question, si je peux me permettre. Comment puis-je surveiller en permanence une fenêtre qui est floue ou minimisée (en utilisant cette approche, il ne fonctionne pas correctement)

Merci beaucoup!

Répondre

1

Si je comprends bien ce que vous vouliez dire par « chaîne brouillée et les lignes se mélangent » que, il y a deux questions qui pourraient vous aider:

  1. La chaîne pourrait être sortie comme indices de Glyphes et non comme Chars (apparaîtra donc comme texte brouillé).

  2. Vous devez vous référer uniquement à la quantité de caractères fournis par cbCount param les autres caractères de la chaîne peuvent être des caractères "garbage".

Espérons que cela a aidé.

+0

Pour l'instant j'expire le même problème. Même quand je passe juste les paramètres à la fonction ExtTextOutW, j'ai toujours des problèmes dans le programme hooké - il montre des hiéroglyphes au lieu du texte latin. Je suis sûr, le problème est que MarshalA change quelque chose dans les données sources lors de la conversion en chaîne CLR. Le problème se manifeste uniquement lorsque l'indicateur Glyphes est défini, sinon le crochet fonctionne correctement et le texte accroché n'est pas endommagé. –