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

  1. 找出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

  1. 找出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

查看工具检测的结果

本人新博客网址为:http://www.hizds.com
本博客注有“转”字样的为转载文章,其余为本人原创文章,转载请务必注明出处或保存此段。c++/lua/windows逆向交流群:69148232
原文地址:https://www.cnblogs.com/zhangdongsheng/p/2804230.html