Frage

Ich habe es geschafft, ein Semiworking EasyHook -Beispiel zu schreiben, das Recv -Funktion hasiert. Ich schrieb ein Formular, fügte eine Webbrowser -Komponente hinzu und startete die Anwendung. Das Problem ist, dass ich die HTTP -Pakete bekomme, aber wenn es einen Sockel gibt, scheint es, dass Recv "Hooking" aufhört. Das Problem ist, dass ich mit einer externen Anwendung Spystudio dazu bringen kann, Recv zu haben. Also, was fehlt mir?

using System;
using System.Collections.Generic;
using System.Data;
using System.Runtime.InteropServices;
using System.Threading;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using System.IO;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels.Ipc;
using EasyHook;

namespace flashing
{
    public partial class Form1 : Form,EasyHook.IEntryPoint
    {
        public LocalHook CreateRecvHook;

        public Form1()
        {
            InitializeComponent();
        }

        [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)
        {
            int bytesCount = recv(socketHandle, buf, count, socketFlags);
            if (bytesCount > 0)
            {
                byte[] newBuffer = new byte[bytesCount];
                Marshal.Copy(buf, newBuffer, 0, bytesCount);
                string s = System.Text.ASCIIEncoding.ASCII.GetString(newBuffer);
                TextWriter tw = new StreamWriter("log.txt");
                tw.Write(s);
                tw.Close();
                Debug.WriteLine("Hooked:>" + s);
            }
            return bytesCount;
        }


        private void bottonHook_Click(object sender, EventArgs e)
        {
            try
            {
                CreateRecvHook = LocalHook.Create(
                    LocalHook.GetProcAddress("Ws2_32.dll", "recv"),
                    new Drecv(recv_Hooked),
                    this);

                CreateRecvHook.ThreadACL.SetExclusiveACL(new Int32[] { 0 });
            }
            catch (Exception ExtInfo)
            {
                Debug.WriteLine("Error creating the Hook");
                return;
            }
            RemoteHooking.WakeUpProcess();
        }

        private void buttonLoader_Click(object sender, EventArgs e)
        {
            axShockwaveFlash1.LoadMovie(0, "test.swf");
        }
    }    
}

bearbeiten : Ich habe keinen Zweifel an Recv, hier ist es das, was Apimonitor mir sagt:

# TID Module API Return Error
5 2696 Flash10l.ocx recv ( 1992, 0x07080000, 65536, 0 ) 1

Kann mir jemand helfen?

War es hilfreich?

Lösung

Problem gelöst. Die Zeile, die Ärger verursachte, war

CreateRecvHook.ThreadACL.SetExclusiveACL(new Int32[] { 0 });

Ich habe es geändert in

CreateRecvHook.ThreadACL.SetInclusiveACL(new Int32[] { 0 });

Und jetzt funktioniert alles gut. Danke an alle :)

Andere Tipps

Es gibt viele verschiedene Funktionen, die mit Steckdosen verwendet werden. Vielleicht verwendet das Plugin die Funktion namens nicht recv. Ab meinem Kopf kann ich mir vorstellen recvfrom, recvmsg, WSARecv, WSARecvFrom, WSARecvMsg, ReadFile, ReadFileEx.

Anschließend könnte das Plugin Anfragen mit überlappter E/A (möglicherweise durch Abschlussroutinen oder Fertigstellungsports kompliziert) durchführen. In diesem Fall werden die Daten während des EG nicht gespeichert ReadFile Funktionsaufruf, aber zu einem späteren Zeitpunkt. Das Haken dieser Anhänger wäre erheblich schwieriger.

Ich habe ein Tool -Dumping HTTP mit Sharppcs in C#geschrieben. Es verwendet den WinPCap-Fahrer. Ich denke, es ist zuverlässigere braune Apihooks.

Httpsaver (mit Quellen)
Sharppcap
Winpcap

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