Ошибка подключения к функции recv в ws2_32.dll под CefSharp.Wp - PullRequest
0 голосов
/ 24 марта 2019

Когда я пытаюсь подключиться к функции recv ws2_32.dll, под CefSharp.Wpf.Когда я начал отлаживать программу, я больше не буду подключаться после получения нескольких пакетов, но я вижу пакеты recv в редакторе пакетов Winsock. Похоже, перехват работает.Я не знаю, что случилось.Посмотрите код:

enter image description here

using CefSharp;
using EasyHook;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Runtime.InteropServices;
using System.Threading;
using System.Windows;

namespace HookTest
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            // Thread.Sleep(20 * 1000);
            InitBrowser();
            InstallHook();
        }

        void InitBrowser()
        {
            var settings = new CefSharp.Wpf.CefSettings();

            Cef.Initialize(settings);
            var cefBrowser = new CefSharp.Wpf.ChromiumWebBrowser
            {
                Address = "https://github.com"
            };
            panel.Children.Add(cefBrowser);
        }

        void InstallHook()
        {
            List<LocalHook> hooks = new List<LocalHook>
            {
                LocalHook.Create(LocalHook.GetProcAddress("Ws2_32.dll", "recv"), new Ws2_32.Drecv(RecvHook), null),
            };
            foreach (LocalHook hook in hooks)
            {
                hook.ThreadACL.SetExclusiveACL(new int[] { 0 });
            }
        }

        public int RecvHook(IntPtr s, IntPtr buf, int len, int flags)
        {
            int num = 0;
            try
            {
                num = Ws2_32.recv(s, buf, len, flags);
                Debug.WriteLine("recv buffer:" + num);
            }
            catch (Exception e)
            {
                Debug.WriteLine(e.Message);
            }
            return num;
        }
    }

    class Ws2_32
    {
        [DllImport("WS2_32.dll")]
        public static extern int recv(IntPtr s, IntPtr buf, int len, int flags);

        [UnmanagedFunctionPointer(CallingConvention.StdCall, SetLastError = true)]
        public delegate int Drecv(IntPtr s, IntPtr buf, int len, int flags);
    }
}
...