问一下大家!
我是个驱动小白,
一个驱动程序 后缀是sys的
在别的电脑上 正常加载
在我的电脑上就 蓝屏了,
问一下大家 问题怎么解决呢?
还有 我贴一下我自己写的代码
大神看看有没有错误
头文件:
#include <ntddk.h>
#include <windef.h>
void UnloadDriver(PDRIVER_OBJECT pDriver);
ULONG Old_SSDT,Current_SSDT;
LONG *SSDT_Addr,STB_Addr,OpenProcess_Addr;
typedef struct JMPDATE
{
BYTE E9;
ULONG JmpAddr;
}JMPDATE;
JMPDATE JmpDate;
typedef struct SSDT
{
PVOID ServiceTableBase;
PVOID ServiceCounterTable;
unsigned int NumberofServices;
PVOID ParamTableBase;
}*pSSDT;
pSSDT pKeSSDT;
ULONG Get_Old_SSDTAddr()
{
UNICODE_STRING Old_NtOpenProcess;
ULONG Old_SSDTAddr;
RtlInitUnicodeString(&Old_NtOpenProcess,"NtOpenProcess");
Old_SSDTAddr=(ULONG)MmGetSystemRoutineAddress(&Old_NtOpenProcess);
return Old_SSDTAddr;
}
LONG Get_Current_SSDTAddr()
{
STB_Addr=(LONG)pKeSSDT->ServiceTableBase;
SSDT_Addr=(PLONG)(STB_Addr+0x7A*4);
OpenProcess_Addr=*SSDT_Addr;
return OpenProcess_Addr;
}
源文件:
#include "PassDNFDriver.h"
//入口函数
NTSTATUS DriverEntry(PDRIVER_OBJECT pDriver,PUNICODE_STRING pstr)
{
DbgPrint("Loading【过DNF驱动保护(By:吴佳泽)】\n\r");
//加载驱动
__asm
{
int 3
}
DbgPrint("OpenProcess的当前地址为:%x \n\r" ,Get_Current_SSDTAddr());
//if (Current_SSDT!=Old_SSDT)
//{
// DbgPrint("OpenProcess已被【TP】Hook!");
// JmpDate.JmpAddr=Old_SSDT-Current_SSDT-5;
//}
pDriver->DriverUnload=UnloadDriver;
return 1;
}
void UnloadDriver(PDRIVER_OBJECT pDriver)
{
DbgPrint("UnLoad【过DNF驱动保护(By:吴佳泽)】\n\r");
//卸载驱动
}
求各位大神了!
你们就是我的希望啊!!!
------解决方案--------------------
别人的系统和你的系统 SDK 版本是一样的吗
------解决方案--------------------
就冲这行代码,如果不挂接内核调试器的话就会蓝屏的。