关于hook地疑难

来源:互联网
更新时间:2016/12/10 11:24:50
责任编辑:王亮
字体:

14black" id=text> 看哪本书可以使我深入了解hook技术
本问题第1个回答

google “hook技术",一点点学。


本问题第2个回答

good


本问题第3个回答

啥东西?

不懂


本问题第4个回答

E


本问题第5个回答

引用 3 楼 jklcp 的回复:

啥东西?

不懂

这是木马和杀软现在的必争之地,你查查rootkit就知道了。


本问题第6个回答

有win32应用级别的hook,也有内核级的hook


本问题第7个回答

#include<ntddk.h>

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();

VOID Unhook();

VOID OnUnload(IN PDRIVER_OBJECT DriverObject);

//////////////////////////////////////

ULONG JmpAddress;//跳转到NtOpenProcess里的地址

ULONG OldServiceAddress;//原来NtOpenProcess的服务地址

//////////////////////////////////////

__declspec(naked) NTSTATUS __stdcall MyNtOpenProcess(PHANDLE ProcessHandle,

  ACCESS_MASK DesiredAccess,

  POBJECT_ATTRIBUTES ObjectAttributes,

  PCLIENT_ID ClientId) 

{

  DbgPrint("NtOpenProcess() called");

  __asm{

  push 0C4h

  push 804eb560h //共十个字节

  jmp [JmpAddress]  

  }

}

///////////////////////////////////////////////////

NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,PUNICODE_STRING RegistryPath)

{

  DriverObject->DriverUnload = OnUnload;

  DbgPrint("Unhooker load");

  Hook();

  return STATUS_SUCCESS;

}

/////////////////////////////////////////////////////

VOID OnUnload(IN PDRIVER_OBJECT DriverObject)

{

  DbgPrint("Unhooker unload!");

  Unhook();

}

/////////////////////////////////////////////////////

VOID Hook()

{

  ULONG Address;

  Address = (ULONG)KeServiceDescriptorTable->ServiceTableBase + 0x7A * 4;//0x7A为NtOpenProcess服务ID

  DbgPrint("Address:0x%08X",Address);

  OldServiceAddress = *(ULONG*)Address;//保存原来NtOpenProcess的地址

  DbgPrint("OldServiceAddress:0x%08X",OldServiceAddress);

  DbgPrint("MyNtOpenProcess:0x%08X",MyNtOpenProcess);

  JmpAddress = (ULONG)NtOpenProcess + 10; //跳转到NtOpenProcess函数头+10的地方,这样在其前面写的JMP都失效了

  DbgPrint("JmpAddress:0x%08X",JmpAddress);

   

  __asm{//去掉内存保护

  cli

  mov eax,cr0

  and eax,not 10000h

  mov cr0,eax

  }

  *((ULONG*)Address) = (ULONG)MyNtOpenProcess;//HOOK SSDT

  __asm{//恢复内存保护  

  mov eax,cr0

  or eax,10000h

  mov cr0,eax

  sti

  }

}

//////////////////////////////////////////////////////

VOID Unhook()

{

  ULONG Address;

  Address = (ULONG)KeServiceDescriptorTable->ServiceTableBase + 0x7A * 4;//查找SSDT

  __asm{

  cli

  mov eax,cr0

  and eax,not 10000h

  mov cr0,eax

  }

  *((ULONG*)Address) = (ULONG)OldServiceAddress;//还原SSDT

  __asm{  

  mov eax,cr0

  or eax,10000h

  mov cr0,eax

  sti

  }

  DbgPrint("Unhook");

}


www.xue163.com true /5/51318.html report 4922 关于hook地疑难,14blackid=text看哪本书可以使我深入了解hook技术本问题第1个回答google“hook技术",一点点学。本问题第2个回答good本问题第3个回答啥东西?不懂本问题第4个回答E本问题第5个回答引用3楼jklcp的回复:啥东...
最近关注
首页推荐
热门图片
最新添加资讯
24小时热门资讯
关于疑难杂症 关于法律的疑难问题 hook hookup hook是什么意思 scripthookv gta5scripthookv hook效应 
精彩资讯
精彩推荐
热点推荐
真视界
精彩图片
社区精粹
关于本站 | 广告服务 | 手机版 | 商务合作 | 免责申明 | 招聘信息 | 联系我们
Copyright © 2004-2016 Xue163.com All Rights Reserved. 学网 版权所有
京ICP备10044368号-1 京公网安备11010802011102号
荐闻 | 学网头条知识问答 | 装修 | 作业 | 荐闻 | 学网头条精彩微信 | 新闻中心 | 软件教室 | 设计大全 | 网络相关 | 英语学习 | 开发编程 | 考试中心 | 参考范文 | 管理文库 | 营销中心 | 站长之家 | IT信息中心 | 商学院 | 数码大全 | 硬件DIY | 企业服务 | 网吧在线 | 问吧 | 百科 | 硬件知识 | 本网视点 | 文库 | 手机 | 平板 | 汽车 | 游戏 | 家电 | 精彩摄影 | 时尚科技 | 现代家居 | IT女人 | 经验 | 每日新闻 | 健康养生 | 图书馆 | 猎奇 | 精彩看点 | 图库 | 新闻中心 | 软件教室 | 设计大全 | 网络相关 | 英语学习 | 开发编程 | 考试中心 | 参考范文 | 管理文库 | 营销中心 | 站长之家 | IT信息中心 | 商学院 | 数码大全 | 硬件DIY | 企业服务 | 网吧在线 | 问吧 | 百科 | 硬件知识 | 本网视点 | 文库 | 手机 | 平板 | 汽车 | 游戏 | 家电 | 精彩摄影 | 时尚科技 | 现代家居 | IT女人 | 经验 | 每日新闻 | 健康养生 | 图书馆 | 精彩微信 | 猎奇 | 精彩看点 | 图库编程 方案 信息windows方案windows answer文档机构教育文档问答中心IT编程数码信息解决方案信息中心IT科技