Frage

Ich habe eine Anwendung, die eine Webbrowser -Komponente anzeigt, die eine Flash -Anwendung enthält, die ein XMLSocket mit einem Server erstellt. Ich versuche jetzt, Recv (zum Glück ein Lokalhook) für Protokollzwecke zu haken, aber wenn ich versuche, den Socket -Inhalt zu lesen, bekomme ich nur seltsame Zeichen, aber wenn ich den Haken mit Spystudio setze, bekomme ich lesbare Saiten. Hier ist der Code, den ich verwende:

  1. Ich stelle den Haken mit

    CreateRecvHook = LocalHook.Create(
        LocalHook.GetProcAddress("ws2_32.dll", "recv"),
        new Drecv(recv_Hooked),
        this);
    
    
    CreateRecvHook.ThreadACL.SetExclusiveACL(new Int32[] { 0 });
    
  2. Ich habe alles eingerichtet, was ich brauche, mit

    [DllImport("ws2_32.dll")]
    static extern int recv(
                IntPtr socketHandle,
                IntPtr buf,
                int count,
                int socketFlags
        );
    
    
    [UnmanagedFunctionPointer(CallingConvention.StdCall,
        CharSet = CharSet.Unicode,
        SetLastError = true)]
    
    
    delegate int Drecv(
                IntPtr socketHandle,
                IntPtr buf,
                int count,
                int socketFlags
        );
    
    
    static int recv_Hooked(
                IntPtr socketHandle,
                IntPtr buf,
                int count,
                int socketFlags)
    {
        byte[] test = new byte[count];
        Marshal.Copy(buf, test, 0, count);
    
    
    
    IntPtr ptr = IntPtr.Zero;
    
    
    ptr = Marshal.AllocHGlobal(count);
    Marshal.Copy(test, 0, ptr, count);
    
    
    string s = System.Text.UnicodeEncoding.Unicode.GetString(test);
    Debug.WriteLine(s);
    System.IO.StreamWriter file = new System.IO.StreamWriter("log.txt");
    file.WriteLine(s);
    
    
    file.Close();
    return recv(socketHandle, buf, count, socketFlags);;
    
    }

Ich habe bereits versucht, verschiedene Codierung ohne Erfolg zu verwenden. Als Randnotiz scheint der Webbrowser kein Problem zu haben.

War es hilfreich?

Lösung

Sie speichern den Inhalt des nicht initialisierten Puffers, kein Wunder, dass es sich um Müll handelt.

Bis nach danach ist nichts in diesem Puffer recv (der reale) füllt es aus. Sie können auch nicht wissen recv.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top