首页
社区
课程
招聘
手写ARK笔记: 1.KiFastCallEntry
发表于: 2013-12-22 21:27 6323

手写ARK笔记: 1.KiFastCallEntry

2013-12-22 21:27
6323
手写ARK笔记: 1.KiFastCallEntry

求职:qq->1815349357[DeDf]

ARK - anti-rootkit
先知道rootkit喜欢做什么,才能想办法anti.
这里是combojiang的:Rootkit的学习与研究:
  http://bbs.pediy.com/showthread.php?t=56817
可以看到:
   1)object hook
   2)ssdt hook
   3)inline-hook
   4)idt hook
   5)IRP hook
   6)SYSENTER hook
   7)IAT HOOK
   8)EAT HOOK

首先anti SYSENTER hook。
前置知识:
-内核重载:http://bbs.pediy.com/showthread.php?t=177555
-简易反汇编引擎 ldasm,可获取指令长度及粗估函数长度

  KiFastCallEntry作为内核入口,本身可以被hook与InlineHook,
  anti首先要找出真实的KiFastCallEntry的地址,
  KiFastCallEntry没有被导出
  IDA ntoskrnl(我的输入法(ntoskrnl)->女同事看热闹了),先查找KiFastCallEntry,查询调用(快捷键X),看

到有两处,其中一处KiTrap01眼熟,这不是IDT里的么。
  来到KiTrap01,X,就找到了(原始的IDT表)_IDT。点选_IDT,按X,来到KiSystemStartup,这个其实是ntoskrnl的入

口点。点击后可见:
mov     esi, offset _IDT
mov     ecx, 800h
shr     ecx, 2

目测在KiSystemStartup中,mov ecx, 800h是唯一的,以它为特征,结合ldasm可以准确定位_IDT。
在_IDT里进入_KiTrap01,cmp ecx, offset _KiFastCallEntry附近可见:
mov     ecx, [ebp+68h]
cmp     ecx, offset _KiFastCallEntry
jz      loc_4075E1
同样经过目测,KiTrap01只有一处mov ecx, [ebp+68h],结合ldasm可以准确定位KiFastCallEntry。

这样就得到了一条完整的路径,只需要在重载内核后顺着进入点去查就能获得。粗测也支持ntkrnlpa.

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 1839
活跃值: (4065)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
目测在KiSystemStartup中,mov ecx, 800h是唯一的,以它为特征,结合ldasm可以准确定位_IDT。

建议不要用硬编码,硬编码无法写出美观的代码,用符号表。
2013-12-22 21:39
0
雪    币: 59
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
哎,没人来定啊,我给你顶下
2013-12-22 21:59
0
雪    币: 257
活跃值: (67)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
就获取KiFastCallEntry的地址嘛,哪用这么麻烦
2013-12-23 01:03
0
雪    币: 284
活跃值: (3624)
能力值: ( LV5,RANK:75 )
在线值:
发帖
回帖
粉丝
5
不用符号的情况下,有什么简单的方式吗?
2013-12-23 11:37
0
游客
登录 | 注册 方可回帖
返回
//