本文讲述了c# 使用easyhook 实现钩子注入!具有很好的参考价值,希望对大家有所帮助。一起跟随六星小编过来看看吧,具体如下:
1、项目右键盘 nuget包
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp5
{
class Program
{ //C#中要调用MessageBeep函数必须这样写,没辙
[DllImport("user32.dll")]
static extern bool MessageBeep(uint uType);
//二.----------------------匹配委托------------------------------
[UnmanagedFunctionPointer(CallingConvention.StdCall, SetLastError = true)]
delegate bool MessageBeepDelegate(uint uType);
//声明一个用来替换替换原来MessageBeep的函数 也就是hook函数
//三.----------------------编写hook函数------------------------------
static private bool MessageBeepHook(uint uType)
{
Console.WriteLine();
Console.WriteLine("----我们自定义的MessageBeepHook函数,- -无声MessageBeep----");
return true;
}
static void Main(string[] args)
{
//一.----------------------找函数------------------------------
IntPtr messageBeep = EasyHook.LocalHook.GetProcAddress("user32.dll", "MessageBeep");
MessageBeepDelegate messageBeepDelegate = new MessageBeepDelegate(MessageBeepHook);
Console.WriteLine("1.当程序载入的时候就调用一次MessageBeep函数,这里的MessageBeep还没有被hook");
MessageBeep(0xFFFFFFFF);
Console.Write("\n按下回车键,将会hook MessageBeep(也就是程序调用MessageBeep时,会替换成我们自定义的MessageBeepHook函数):");
Console.ReadLine();
// 创建local hook 使用我们自己定义的 MessageBeepDelegate and MessageBeepHook 函数
//四.----------------------创建hook------------------------------
var hook = EasyHook.LocalHook.Create(messageBeep, messageBeepDelegate, null);
hook.ThreadACL.SetInclusiveACL(new Int32[] { 0 });
MessageBeep(0xFFFFFFFF);
Console.Write("\n按下回车键 禁用当前的hook(也就是还原MessageBeep函数,调用的时候就是原本的MessageBeep函数了):");
Console.ReadLine();
hook.ThreadACL.SetExclusiveACL(new int[] { 0 });
//再次调用再次调用PlayMessageBeep 这个是原生的了
MessageBeep(0xFFFFFFFF);
Console.Write("\n按下回车键 卸载hook并退出");
Console.ReadLine();
hook.Dispose();
}
}
}
更多相关技术内容咨询欢迎前往并持续关注六星社区了解详情。
想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!