当我尝试连接到CefSharp.Wpf下的ws2_32.dll的recv函数时。当我开始调试程序时,在接收到一些数据包后我将不再钩子,但是我可以在Winsock数据包编辑器中看到recv数据包,看起来钩子停止了工作。我不知道发生了什么看一下代码:
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);
}
}