x86的hook 其实很简单 其实我们在od里就可以知道 E9+(跳转的地址-现在的地址-5)
然后 跳来跳去就可以 而 缓冲区读写有个很重要的概念就是
#define sub_code CTL_CODE(FILE_DEVICE_UNKNOWN, 0x801, METHOD_BUFFERED,FILE_ANY_ACCESS)
(这是比喻一下 这个是我们的code 值 比如)
PIO_STACK_LOCATION stack = IoGetCurrentIrpStackLocation(pIrp);
ULONG ml = stack->MajorFunction;
switch (ml)
{
case IRP_MJ_DEVICE_CONTROL:
{
KdPrint(("Enter myDriver_DeviceIOControl\n"));
NTSTATUS status = STATUS_SUCCESS;
//得到输入缓冲区大小
ULONG cbin = stack->Parameters.DeviceIoControl.InputBufferLength;
//得到输出缓冲区大小
ULONG cbout = stack->Parameters.DeviceIoControl.OutputBufferLength;
//得到IOCTL码
ULONG code = stack->Parameters.DeviceIoControl.IoControlCode; //这个码就是区别缓冲区的信息的
switch (code)
{
case add_code:
然后 应用层的话 应该是
DeviceIoControl(hDevice, add_code , &port, 8, &bufret, 4, &dwWrite, NULL);//写上码
这样就可以了 。。
如果想保护某个进程的话 需要对 NtOpenProcess 进行hook 打开的话 直接返回 NULL 然后 应用层 传入一个pid 值就可以了
经过缓冲区pid 然后调用hook 函数就可以了 然后就可以保护 我们想要保护的进程了
后面如果代码实现了 就把源码粘贴出来