设为首页
加入收藏
联系我们
   
   
文章搜索
精品推荐
分类导航
操作系统 佳软推介
冲浪宝典 办公专区
网页制作 网络安全
应用安全 黑客攻防
QQ空间
热门文章
· 怎样降低网吧运行成本
· 可免费升级一年的卡巴
· 只读更新全程图解教程
· 迅闪v4.5破解版[附教程
· 非主流18禁淫荡图片_非
· 网吧母盘的制作
· [西安]孙清云专门批示
· 详的XP母盘制作
· 网吧推出女性专区(图)
· 非主流梦幻少女的鞋鞋
· 可爱公主_FZL糖果胸针
· 少女可爱零钱包挂件
· 个性非主流挂坠
· 韩式Feizl_可爱发饰
· 经典-唯美花儿银饰
· 玩酷FZL_彩绘酷型帽子
· 甜美可爱的公主鞋
· 新年绝美款日系Party鞋
推荐赞助商
与本文相关的

百度探索联合运营 即将进

交通银行探索IT服务管理

一名网管对网吧盈利模式

北京海林之星连锁网吧:

巨头博弈即时通信

为探索网吧管理新途径叫

一黑网吧11岁孩子民房里

IIS 7.0探索用于

探索最隐秘之处 封

海尔与思科战略合

探索linux系统中限制对目

图:《探索》国产引

探索之门开启 超舞

探索Linux 内核虚

探索中前行,武汉

图:探索的脚步《新

微软的图谋:探索

[经管]网吧的盈利探索之

网吧的盈利探索之网吧超

深度探索 OpenBSD

多核时代对并发程序设计

深入探索:揭开微软实验

网游新贵寻宝“大

《真知探索》寓教于乐 一

实时查询《探索》首推游

图:《真知探索》新

玩《真知探索》 告别王小

图文:奇迹世界(SU

《真知探索》内测

《探索》烹饪 将厨师特级

奇迹世界中文探索

手机搜索市场渐升

《奇迹世界》中文

奇迹世界中文探索

《奇迹世界》中文

图:《真知探索》精

商业性wiki网站如

图:《真知探索》女

武汉:在探索中前行,网

和讯网收购财经客
您当前的位置:西安网吧在线 -> 电脑技巧 -> 网络安全 -> 文章内容

探索NDIS HOOK新的实现方法(1)

作者:佚名  来源:IT专家网  发布时间:2008-4-28 0:37:01  发布人:Cn029.Com

减小字体 增大字体

作者: zhouxiaoyong,  出处:xfocus.net, 责任编辑: 韩博颖, 
2008-04-25 09:46
  NDIS HOOK是专业级防火墙使用的一种拦截技术,NDIS HOOK的重点是获得了该指针,接下来就可以替换该协议所注册的收发函数,而达到拦截网络数据的目的。

  NDIS HOOK是专业级防火墙使用的一种拦截技术,NDIS HOOK的重点是如何获得特定协议对应NDIS_PROTOCOL_BLOCK指针,获得了该指针,接下来就可以替换该协议所注册的收发函数,而达到拦截网络数据的目的。

  获得NDIS_PROTOCOL_BLOCK指针的方法一般是用NdisRegisterProtocol注册一个新的协议,所获得的协议句柄实际上就是一 个NDIS_PROTOCOL_BLOCK指针,顺着该指针遍历NDIS_PROTOCOL_BLOCK链表,就可以找到你所要挂钩的协议所对应的 NDIS_PROTOCOL_BLOCK.之所以可以这样做,是因为每注册一个协议,系统都会把该协议对应的NDIS_PROTOCOL_BLOCK放置 在协议链表的开头,该协议链表每个元素都是NDIS_PROTOCOL_BLOCK类型,代表一个已经注册的协议。

  事实上我们需要的只是TCPIP协议族的NDIS_PROTOCOL_BLOCK指针,毕竟TCP,IP,ARP,ICMP等等几乎所有我们感兴趣的协议, 都是在tcpip.sys协议驱动里面实现的。如果我们只需要TCPIP协议所对应的NDIS_PROTOCOL_BLOCK,那么上面的方法就有点繁琐 了。我们可以试着寻找更简便的方法来获得TCPIP协议的NDIS_PROTOCOL_BLOCK.

  于是我对tcpip.sys驱动进行了反汇编,发现NDIS_PROTOCOL_BLOCK指针存放在一个名为_ARPHandle的全局变量里面,所以如 果能找到_ARPHandle的地址,我们就成功了,我们完全可以把该全局变量的偏移量作为一个常量来使用,但这里纯粹为了拓宽思路,我介绍另一种找到该 全局变量的方法。

  Tcpip.sys有个导出函数叫IPDelayedNdisReEnumerateBindings,该函数内部曾经出现过_ARPHandle 的地址,为什么会出现它的地址呢,因为该函数内部调用过NdisReEnumerateProtocolBindings函数,懂得反汇编的应该知道,在 用call指令调用函数之前,必然会用到push指令将函数的参数压到栈里面去,不巧的是, NdisReEnumerateProtocolBindings函数只有一个参数,而该参数恰恰是一个NDIS_PROTOCOL_BLOCK指针类 型,在这里,实际上就是把_ARPHandle当作参数传给了

  NdisReEnumerateProtocolBindings,所以_ARPHandle的地址必然会出现在push指令的后面,说具体一点,紧跟push指令的四个字节就是_ARPHandle的地址。

  所以具体的思路就是这样,先找到IPDelayedNdisReEnumerateBindings函数的地址,然后从该函数的地址开始搜索push指令的特征码,搜到了以后,把紧跟push指令的四个字节作为指向NDIS_PROTOCOL_BLOCK指针的指针返回。

  也许有的人会问,如果IPDelayedNdisReEnumerateBindings函数体内部出现过多次push指令,岂不是会搜出不正确的地址,事实上,虽然都叫push指令,然而在机器码级别是不同的,push指令的机器码表示有十几种之多,用来区别不同的寻址方式,调用NdisReEnumerateProtocolBindings 时用的push指令字节序列是0xff35,这个push指令表示后面紧跟的四个字节是一个内存地址,而不是一个立即数或者寄存器之类的。知道了这些,我 们就可以清楚,在一个有限的地址范围,0xff35的唯一性是可以得到满足的。根据我的观察,在win2000,winxp,win2003上面,IPDelayedNdisReEnumerateBindings本身是一个很短的函数,0xff35指令确实只出现过一次,所以该方法是很可靠的。

  思路已经出来了,下面我把详细的代码给大家贴出来,理解这些代码需要对windows Pe格式有所了解,如果你不想理解也行,代码可以直接拿来用。

  以下是我写的一个 获取内核模块某个导出函数地址的 通用例程。这里主要是为了获取tcpip.sys模块的导出函数IPDelayedNdisReEnumerateBindings  

void* GetRoutineAddress(char* ModuleName,char* RoutineName)
  {
  PIMAGE_DOS_HEADER dos_hdr;
  PIMAGE_NT_HEADERS nt_hdr;
  PIMAGE_EXPORT_DIRECTORY export_dir;
  ULONG *fn_name, *fn_addr, i;
  char* base;
  base=(char*)FindModule(ModuleName);//该函数用来获得内核模块的基地址
  if(!base)
  return NULL;
  DbgPrint("tcpip address:%p",base);
  dos_hdr = (PIMAGE_DOS_HEADER)base;
  if (dos_hdr->e_magic != IMAGE_DOS_SIGNATURE)
  return NULL;
  nt_hdr = (PIMAGE_NT_HEADERS)(base + dos_hdr->e_lfanew);
  export_dir = (PIMAGE_EXPORT_DIRECTORY)(base + nt_hdr->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress);
  fn_name = (ULONG *)(base + export_dir->AddressOfNames);
  fn_addr = (ULONG *)(base + export_dir->AddressOfFunctions);
  for (i = 0; i < export_dir->NumberOfNames; i++, fn_name++, fn_addr++)
  {
  if (strcmp(RoutineName, base + *fn_name) == 0)
  {
  return base + *fn_addr;
  }
  }
  return NULL;
  }

  

  • 本文关键字:

网友评论

笔名 
请您注意:遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。    IT专家网友拥有管理笔名和留言的一切权利。

[1] [2]  下一页

[发表评论] [返回上一页] [打 印] [收 藏] [论坛讨论]
最新更新
· 春季送惊喜 买致铭780G主板送自行车
· 廉价酷睿整合板 杰微N73VM主板破400
· 总线大超1333MHz 富士康G31主板破500
· 一线难抵降价趋势 技嘉MCP73板再降100
· 945终结者 致铭P31特价399还有大奖送
· HT3.0超传输平台 磐正AK780U低价入市
· 最便宜790X平台 双敏UR790XA-CF仅599
· 杰微炎夏送凉风 购主板做礼享主义者
· 入门高清机型首选 映泰GF8200 M2+到货
· 廉价双卡G31平台 盈通战警版跌破400
· 699元热管超频板 映泰TA780G M2+热卖
· 板载X1250显示核心 富士康690G卖到468
· 全固态6相热管P35 杰微陆虎杀至899元
· 全固态热管790X 超磐手AK790GTR到货
· 抢先体验1080P视觉享受 双敏780G到货
· 支持720P高清视频 入门酷睿板仅售460
· 横扫中端平台市场 杰微热管550暴跌200
· 黑盒超频只要599元 映泰TA770市场热卖
· 学生廉价超频整合板 升技AN-68SV到货
· 游戏玩家的平台 升技顶级590主板到货
24小时热点
· 不再批新网吧“网吧证”成香饽饽
· 学校周边200米内禁开网吧 净化校园
· 临潼网吧外 初中生惨丧命 追踪
· [西安]15岁初中生网吧外被打死 5嫌疑人落
· 网吧外被打1小时15岁初中生惨丧命
· 三次接纳未成年人 吊销网吧许可证
· 电子阅览室变“网吧” 停业整顿
· 网吧实名制上网成为社会风气
· 男子频频网吧内作案获死刑
· 取缔黑网吧100多家 建设农家书屋230间
· 建农民网吧搭致富平台
· 净化文化市场大港区严厉查处黑网吧
· 两年轻人网吧内演"双簧"
· 网吧管理员邀你来当
· 设农民网吧 帮助农民了解市场
· 47家网吧承诺文明自律经营
· 集体涨价失败后 个别网吧再拉涨价大幕
· 巡路公司获高新技术企业认证
· 神秘黑网吧 躲在神柜后
· 今年网吧、典当行将安监控设备