刚才那帖我问的不够详细 抱歉噢 再开个帖请教如何用DDK编写一个恢复HOOK NTOPENPROCESS的驱动?
非硬编码 在网上找到的都是硬编码。请问哪位大神可以指教一下非硬编码的应该怎么写?
我想表达的是SSDT HOOK 对抗Inline hook 我参考过一篇文章 上面是
__declspec(naked) NTSTATUS __stdcall MyNtOpenProcess(PHANDLE ProcessHandle,
ACCESS_MASK DesiredAccess,
POBJECT_ATTRIBUTES ObjectAttributes,
PCLIENT_ID ClientId)
{
DbgPrint("NtOpenProcess() called");
__asm{
push 0C4h //xp sp2
push 804eb410h
jmp [JmpAddress]
}
}NTOPENPROCESS +10字节处 jmp到MyNtOpenProcess 但是MyNtOpenProcess里面为硬编码 此代码为XP SP2里面的值 我是想怎么能让他所有系统都适用 XP系统都适用也OK
非硬编码 在网上找到的都是硬编码。请问哪位大神可以指教一下非硬编码的应该怎么写?
我想表达的是SSDT HOOK 对抗Inline hook 我参考过一篇文章 上面是
__declspec(naked) NTSTATUS __stdcall MyNtOpenProcess(PHANDLE ProcessHandle,
ACCESS_MASK DesiredAccess,
POBJECT_ATTRIBUTES ObjectAttributes,
PCLIENT_ID ClientId)
{
DbgPrint("NtOpenProcess() called");
__asm{
push 0C4h //xp sp2
push 804eb410h
jmp [JmpAddress]
}
}NTOPENPROCESS +10字节处 jmp到MyNtOpenProcess 但是MyNtOpenProcess里面为硬编码 此代码为XP SP2里面的值 我是想怎么能让他所有系统都适用 XP系统都适用也OK
解决方案 »
- 如何手动让编译器输出警告信息.vs 2005
- ADO,对二进制字段,GetActualSize返回-1可能是什么原因??
- 关于邮件,怎么检测OUTLOOK,怎么知道有新的邮件了,怎么操作邮件,读取内容等,谢谢,急用,而且我觉得很难
- 求教高手,VC++ 6调试问题(50分)
- CMainFrame继承于CFrameWnd,CMainFrame构建函数不可以重载吗?
- 如何理解这段代码?(数据库中存取图象字段)
- 类似资源管理器的目录树控件怎么做呀?
- 求教高人及微软专家,VC6 IDE的add-ins Dll问题
- 请教:关于VC++编译错误提示的问题?
- 关于DevStudio Add-in 的问题
- 关于windows xp下的ClipCursor
- MFC中怎么创建Dialog继承其他Dialog ?
68 60b54e80 push 804eb560
| | |
opcode 操作数 这里的数字,即前面的操作数。
文章中的例子,你读取到的10个字节为
68 c4 00 00 00 68 60 b5 4e 80
typedef unsigned char BYTE;
VOID Hook();
VOID Unhook();
ULONG OldServiceAddress;
ULONG JmpAddress;
typedef struct _SERVICE_DESCRIPTOR_TABLE
{
PVOID ServiceTableBase;
PULONG ServiceCounterTableBase;
ULONG NumberOfService;
ULONG ParamTableBase;
}SERVICE_DESCRIPTOR_TABLE,*PSERVICE_DESCRIPTOR_TABLE; //由于KeServiceDescriptorTable只有一项
extern PSERVICE_DESCRIPTOR_TABLE KeServiceDescriptorTable;//KeServiceDescriptorTable为导出函数VOID Hook()
{
ULONG Address;
BYTE data[20] = {0};
Address= (ULONG)KeServiceDescriptorTable->ServiceTableBase + 0x7A * 4;//0x7A为;
OldServiceAddress=*(ULONG*)Address;
JmpAddress = (ULONG)NtOpenProcess + 15; __asm{//去掉内存保护
cli
mov eax,cr0
and eax,not 10000h
mov cr0,eax
}
memcpy(NtOpenProcess,data,15);
*((ULONG*)Address) = (ULONG)data;//HOOK SSDT
__asm{//恢复内存保护
mov eax,cr0
or eax,10000h
mov cr0,eax
sti
}
}
VOID OnUnload(IN PDRIVER_OBJECT DriverObject);
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,PUNICODE_STRING RegistryPath)
{
DriverObject->DriverUnload = OnUnload;
Hook();
return STATUS_SUCCESS;
}VOID OnUnload(IN PDRIVER_OBJECT DriverObject)
{
DbgPrint("Unhooker unload!");}此代码会蓝屏 请各位指点一二
windbg直接打开生成的dump就会有提示了。