ssdt 表结构及hook的一般理解
1 Ssdt表的基本结构
KeServiceDescriptorTable 首地址:8055D700
0: kd> dd KeServiceDescriptorTable
8055d700 80505460 00000000 0000011c 805058d4
8055d710 00000000 00000000 00000000 00000000
8055d720 00000000 00000000 00000000 00000000
8055d730 00000000 00000000 00000000 00000000
8055d740 00000002 00002710 bf80c349 00000000
8055d750 f7aeaa80 863d0340 863650f0 806f70c0
8055d760 025d954c 00000000 c136d144 00000001
8055d770 04a0f484 01cdcd68 00000000 00000000
KeServiceDescriptorTable的起始地址为:80505460
第n个函数地址为:80505460 + 4 * N
第1个函数地址为:80505460 + 4 * 1
2 Ssdt hook的基本原理
HookOpenProcess测试从Windbg
- 找出KeServiceDescriptorTable起始地址
0: kd> dd KeServiceDescriptorTable
8055d700 80505460 00000000 0000011c 805058d4
8055d710 00000000 00000000 00000000 00000000
8055d720 00000000 00000000 00000000 00000000
8055d730 00000000 00000000 00000000 00000000
8055d740 00000002 00002710 bf80c349 00000000
8055d750 f7aeaa80 863d0340 863650f0 806f70c0
8055d760 025d954c 00000000 1ffd4a44 00000004
8055d770 63676d84 01cdcd6a 00000000 00000000
- 找出OpenProcess的地址
首先找出他的序号为 0x7a
则地址为: 80505460 + 4 * 0x7a = 80505648
修改OpenProcess的地址 为00001234(乱改的)
0: kd> ed 80505648 00001234
查看修改后的地址
0: kd> dd 80505648
80505648 00001234 805ee730 805ee394 805ab3d0
80505658 80615828 805c4baa 805cc696 805ee74e
80505668 805ee504 80617770 80646176 805ca4bc
80505678 805f8b10 805f473a 805f4926 805b93e8
80505688 8060f7e6 80577ed6 80617110 80617110
80505698 80540bc6 806113d8 80612038 8057ae64
805056a8 805bf61c 8057b1b2 8060f8ae 8057802a
805056b8 806168ac 8057ba1e 805d6c28 805a63c8
查看工具检测的结果