首页
社区
课程
招聘
[原创]详谈内核三步走Inline Hook实现
发表于: 2009-9-25 18:52 100294

[原创]详谈内核三步走Inline Hook实现

2009-9-25 18:52
100294
收藏
免费 7
支持
分享
最新回复 (75)
雪    币: 492
活跃值: (53)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
51
原来是ImageFileName
+0x174 ImageFileName    : [16] UChar

上面是XP SP3看到的,
可是我在Windows7上看到是

+0x16c ImageFileName    : [15] UChar

位置不一样了,
请问有什么通用的办法取到ImageFileName吗?
2010-1-29 12:24
0
雪    币: 102
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
52
不错的文章讲的很细
2010-1-29 17:34
0
雪    币: 186
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
53
学习.
2010-3-11 09:47
0
雪    币: 808
活跃值: (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
54
[QUOTE=fhurricane;753896]原来是ImageFileName
+0x174 ImageFileName    : [16] UChar

上面是XP SP3看到的,
可是我在Windows7上看到是

+0x16c ImageFileName    : [15] UChar

位置不一样了,
请问有什么通...[/QUOTE]

WIN7是这样的。。。。。

总之文章对新手理解inline hook没错的,能引起大牛关注更好了,能把问题讨论的更清楚。感谢楼主,也感谢对这个题目提出正解的大牛。。。。。论坛有此风,更上一层楼啊。。。。
BS一些用‘囧’之类的打击别人,这样的回帖楼主大可不必放在心上。。。。
楼主的很多文章写的很不错的。。。
2010-3-11 10:28
0
雪    币: 1074
活跃值: (160)
能力值: ( LV13,RANK:760 )
在线值:
发帖
回帖
粉丝
55
呵呵,支持先,研究才会进步
2010-3-11 10:33
0
雪    币: 6790
活跃值: (4441)
能力值: (RANK:600 )
在线值:
发帖
回帖
粉丝
56
附件里的错误没有改过来,错误好像还不少,不过还是谢了。
2010-3-11 16:23
0
雪    币: 247
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
57
问下为什么同样是修改内存SSDT HOOK就不需要操作IRQL,而INLINE HOOK就需要?
2010-3-11 22:49
0
雪    币: 149
活跃值: (128)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
58
感谢楼主分享
2010-3-21 19:07
0
雪    币: 217
活跃值: (45)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
59
文章相当的到位。

一点疑惑:

如果单CPU上跑,这个问题出现的几率比较少,但是多CPU上跑有可能出问题吧?(概率上会更多)

写.text内存的时候,
1.假设按字节写内存,写到一半别的线程冲入,那进来的线程肯定会JMP到半正确的地址,会导致CRASH吧?
2.假设写内存是走DMA,写入过程可能有硬件回调通知,意味着虽然写入执行是完了,但是有未写入的可能吧?

另外CPU有缓存,尤其是多核CPU各自有自己的,如果不清除这个缓存会发生啥?

钻了一下牛角,以上问题能否有个解决方案??
2010-6-23 15:01
0
雪    币: 364
活跃值: (91)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
60
感谢lz的分享精神,大师才有明示自己错误的勇气。不必太在意。支持下LZ!!
2010-6-23 17:56
0
雪    币: 103
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
61
学习下!!!!!!!!!!!!!!!
2010-6-28 23:20
0
雪    币: 49
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
62
记得我高中一位语文老师说过“学生中,无论对知识点完全不明了,或者明白部分,或者完全掌握的。切莫做沉默不语高深状却又故意露出些许踪迹引起人注意的。你懂不懂是你个人之举,但是那种凸显自己的行为对我授课质量简直是一幅毒药。”
一个公司除非老板,其他的也不过都是打工。销售有因为开发部门无盈利迹象就大加鄙视么?财务的因为开发部门不懂成本核算而进行指责其智商低么?我是没遇到的。那么开发部门内部应该互相指责么?我想也不应该。
公司内部都应该有个互相尊重的底线,何况我们这个交流的论坛,对同学之人何必大加囧言。你不过先行一步,毕竟也没做到老板的层次,对不对? 何必呢!
2010-6-29 15:12
0
雪    币: 324
活跃值: (113)
能力值: ( LV15,RANK:280 )
在线值:
发帖
回帖
粉丝
63
楼主文笔一流,调理清晰,看懂了。达到了传到授业的效果。
2010-7-22 21:08
0
雪    币: 274
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
64
收藏,谢谢!!!!!
2010-7-27 21:34
0
雪    币: 179
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
65
//关闭内存写保护
  _asm
   
  {
    push eax
      
      mov eax, cr0
      mov CR0VALUE, eax
      and eax, 0fffeffffh  
      mov cr0, eax
      pop eax
  }
执行时出错!
2010-8-14 23:15
0
雪    币: 88
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
66
大神,请问你是不是使用了堕落天使发的 SSDT巧用对抗 INLINE HOOK的方法?
2010-8-16 01:34
0
雪    币: 71
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
67
不错的贴子

谢谢lz
2010-9-23 13:46
0
雪    币: 141
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
68
膜拜+学习~
2010-10-25 23:08
0
雪    币: 1312
活跃值: (5164)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
69
收藏了!!!!!
2011-1-11 12:58
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
70
E9短跳转 JMP X是相对于当前指令的下一条指令。
当前指令为EIP = Orig
Orig+5+X = Hook。因此x = Hook-Orig -5。即
*( (ULONG*)(JmpAddress + 1) ) = (ULONG)DetourMyKiInsertQueueApc - (ULONG)g_KiInsertQueueApc - 5;
2011-10-20 13:41
0
雪    币: 176
活跃值: (206)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
71
楼主辛苦了,思路清晰,非常适合初学者。
2011-10-20 14:35
0
雪    币: 278
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
72
主楼的一个地方的地址是:uf  KeInsertQueueApc
nt!KeInsertQueueApc+0x3b:
804e6d0a 8b450c          mov     eax,dword ptr [ebp+0Ch]
804e6d0d 8b5514          mov     edx,dword ptr [ebp+14h]
804e6d10 894724          mov     dword ptr [edi+24h],eax
804e6d13 8b4510          mov     eax,dword ptr [ebp+10h]
804e6d16 8bcf            mov     ecx,edi
804e6d18 894728          mov     dword ptr [edi+28h],eax
804e6d1b e8523fffff        call    nt!KiInsertQueueApc (804dac72)
804e6d20 8ad8 (错误)  mov     bl,al

我这个地方却是:
nt!KeInsertQueueApc+0x3b:
804fd4b5 8b450c          mov     eax,dword ptr [ebp+0Ch]
804fd4b8 8b5514          mov     edx,dword ptr [ebp+14h]
804fd4bb 894724          mov     dword ptr [edi+24h],eax
804fd4be 8b4510          mov     eax,dword ptr [ebp+10h]
804fd4c1 8bcf            mov     ecx,edi
804fd4c3 894728          mov     dword ptr [edi+28h],eax
804fd4c6 e8dd340000      call    nt!KiDeliverApc+0x218 (805009a8)
804fd4cb 8ad8            mov     bl,al

你的函数是:nt!KiInsertQueueApc ,我这里变成了nt!KiDeliverApc+0x218 ,是怎么回事啊 ?难道nt!KiDeliverApc+0x218 =nt!KiInsertQueueApc?请高手给小弟指点一下。。谢谢
2011-12-20 22:47
0
雪    币: 9
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
73
MARK,以备后看
2011-12-20 23:00
0
雪    币: 350
活跃值: (87)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
74
老大,你的程序很强大啊,你的这个程序支持多核心么?DPC级别只能在一个CPU核心运行,要是不能同时让所有CPU核心都处于DPC级别的话,那么你的HOOK过程中,很可能会BOSD,因为这样的话,有可能你在HOOK的时候,另外的CPU核心又调用你坐在HOOK的程序的话,你想想看,一个被破坏的指令,你想看会怎么样?总之,你的程序怎样写是不支持多核心的,因为你的程序在多核心系统上运行,有一定的几率BOSD,至于为什么,我已经解释了,情楼主写这样的程序的时候一定要注意程序是否支持多核心!
2011-12-20 23:08
0
雪    币: 673
活跃值: (278)
能力值: ( LV15,RANK:360 )
在线值:
发帖
回帖
粉丝
75
收益挺多 顶一下
2012-3-22 14:41
0
游客
登录 | 注册 方可回帖
返回
//