wlrwx
驱动小牛
驱动小牛
  • 注册日期2002-04-05
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望11点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1686回复:8

关于在核心驱动中Hook函数?

楼主#
更多 发布于:2002-05-09 11:21
哪位朋友有在Kernel Mode Driver中 Hook 以Ndis开头的这些函数的经验??愿不吝有以教在下

有帮助就会有分略表谢意

OS:W2K


 :P :P :P

最新喜欢:

linwnlinwn
真正的浪子―――― 是掠过城市的微风,每个人都能感到他的清新,可没有人能留住...... 亦是划过天际的流星,所有人都能仰望他夺目的光芒,没有人能触及...... 风止于森林,流星损于黄土......非凡浪子归于他的最爱......
xdjm
驱动中牛
驱动中牛
  • 注册日期2001-04-02
  • 最后登录2024-01-25
  • 粉丝0
  • 关注0
  • 积分34分
  • 威望25点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2002-05-09 13:03
1。列举所有调用了NDIS.SYS中的例程的模块,可以试试ZwQuerySystemInformation例程。
2。根据PE文件格式查找以上模块调用的NDIS例程的引入地址。
3。用你自己的入口地址修改这个引入地址,OK!
4。做完你自己的事情之后,用JMP指令将控制转移到原NDIS例程返回。
bible
驱动牛犊
驱动牛犊
  • 注册日期2001-09-03
  • 最后登录2009-04-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-05-09 16:51
xdjm,
你试过没?
做完你自己的事情之后,用JMP指令将控制转移到原NDIS例程返回。
这句话什么意思 ?
贴点代码吧,老大。





xdjm
驱动中牛
驱动中牛
  • 注册日期2001-04-02
  • 最后登录2024-01-25
  • 粉丝0
  • 关注0
  • 积分34分
  • 威望25点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2002-05-09 20:36
举个例子说吧。

_declspec(dllimport) int Func1(); // Exported functions from another module
_declspec(dllimport) int Func2();
_declspec(dllimport) int Func3();
_declspec(dllimport) int Func4();

int INTTTT()
{
  Func1();
  Func2();
  Func3();
  Func4();
  return 0;
}

这个例子编译之后,代码如下:

  10001000: E8 21 00 00 00     call        10001026h // Call Func1
  10001005: E8 16 00 00 00     call        10001020h // Call Func2
  1000100A: E8 23 00 00 00     call        10001032h // Call Func3
  1000100F: E8 18 00 00 00     call        1000102Ch // Call Func4
  10001014: B8 2B 02 00 00     mov         eax,00h
  10001019: C3                 ret
  1000101A: 90                 nop
  1000101B: 90                 nop
  1000101C: 90                 nop
  1000101D: 90                 nop
  1000101E: 90                 nop
  1000101F: 90                 nop
  10001020: FF 25 04 20 00 10  jmp         dword ptr ds:[10002004h]
  10001026: FF 25 00 20 00 10  jmp         dword ptr ds:[10002000h]
  1000102C: FF 25 10 20 00 10  jmp         dword ptr ds:[10002010h]
  10001032: FF 25 0C 20 00 10  jmp         dword ptr ds:[1000200Ch]

大家看到了,在10001020h、10001026h、1000102Ch、10001032h地址处分别是一个跳转指令,跳转的目标地址即分别是引入函数Func1、Func2、Func3、Func4的引入地址。也就是说,在地址10002000h、10002004h、1000200Ch、10002010h处分别定义了引入函数Func1、Func2、Func3、Func4的引入地址。

现在我们来看看在地址10002000h、10002004h、1000200Ch、10002010h处的内容,这个实际上就是引入地址表(Import Address Table)。

  10002000: 76 20 00 00 6C 20 00 00 00 00 00 00 96 20 00 00  v ..l ....... ..
  10002010: 8C 20 00 00 00 00 00 00 54 20 00 00 00 00 00 00  . ......T ......
  10002020: 00 00 00 00 80 20 00 00 00 20 00 00 60 20 00 00  ....
wlrwx
驱动小牛
驱动小牛
  • 注册日期2002-04-05
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望11点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-05-10 08:59
xdjm,你的回答真是太精彩了,我为你鼓掌~~~~~太感谢了~~~~真是太好了~~~~
  ;)
真正的浪子―――― 是掠过城市的微风,每个人都能感到他的清新,可没有人能留住...... 亦是划过天际的流星,所有人都能仰望他夺目的光芒,没有人能触及...... 风止于森林,流星损于黄土......非凡浪子归于他的最爱......
bible
驱动牛犊
驱动牛犊
  • 注册日期2001-09-03
  • 最后登录2009-04-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-05-10 09:05
还没看,先谢xdjm了。
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2002-05-10 11:11
厉害厉害 :D
Netguy
驱动牛犊
驱动牛犊
  • 注册日期2001-04-02
  • 最后登录2012-05-25
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望17点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-05-10 15:38
DLL加载到内核去运行?那DLL调用到的API、DLL所引用到的其它DLL的怎么解决的?

举个例子说吧。
我自己就是利用上述的方法写了一段加载PE模块的代码,将一个DLL加载到内核去运行。
xdjm
驱动中牛
驱动中牛
  • 注册日期2001-04-02
  • 最后登录2024-01-25
  • 粉丝0
  • 关注0
  • 积分34分
  • 威望25点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
  • 社区居民
8楼#
发布于:2002-05-10 17:50
DLL加载到内核去运行?那DLL调用到的API、DLL所引用到的其它DLL的怎么解决的?


不能调用Win32函数,可以调用其他不依赖于Win32的DLL函数,外部DLL函数的引用我自己解决重定位问题。
游客

返回顶部