首页
社区
课程
招聘
[原创]用symbol来获得ShadowSSDT的原始地址和函数名
发表于: 2009-7-30 17:26 17018

[原创]用symbol来获得ShadowSSDT的原始地址和函数名

2009-7-30 17:26
17018

在网上看了下,获得ShadowSSDT的函数名和原始地址的方法和文章不是很多。比较简单的应该算是设计张函数名表和用symbol的方法。

个人觉得用symbol来获得ShadowSSDT还是比较方便的,而且自己也不用去创建一张表,何乐而不为。^_^

这办法简单的原因是我只需要一个win32.sys,win32.pdb,以及调用不到10个的API就能完成工作。

好,来看看怎么调用这些函数。

1.调用SymInitialize初始化Dbghelp这系列的函数。
2.调用ImageLoad读取文件win32.sys。
3.调用SymLoadModule来读取pdb文件。
4.调用SymEnumSymbols枚举符号,其中一个参数是回调函数SymEnumSymbolsProc,that's the key。
SymEnumSymbolsProc中有一个系统会帮忙填充一个为PSYMBOL_INFO结构的参数。在这个结构中我主要用到的是Name和Address。
5.调用ImageUnload和SymCleanup做一些清理工作。

OK,看一下我的思路。

首先是获得W32pServiceTable的地址。熟悉ShadowSSDT都知道,W32pServiceTable是在内核初始化用来填充ShadowSSDT的表。
然后,知道了W32pServiceTable的地址,后面的事情也很容易。用SymEnumSymbolsProc把ShadowSSDT每个函数的地址和函数名保存下来。

说起来有点复杂,但代码很简单的。


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

上传的附件:
收藏
免费 7
支持
分享
最新回复 (19)
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
2

2009-7-30 18:28
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
3
太牛逼了,无法学习,只能膜拜
2009-7-30 18:39
0
雪    币: 268
活跃值: (95)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
4
学习!
2009-7-30 18:51
0
雪    币: 86
活跃值: (56)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
5
菜鸟一只而已~~~
2009-7-30 18:56
0
雪    币: 342
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
我看行,再顶L
2009-7-30 19:09
0
雪    币: 296
活跃值: (89)
能力值: ( LV15,RANK:340 )
在线值:
发帖
回帖
粉丝
7
SymLoadModule加载PDB啊,头一次见到这个方法。
之前我还手动复制了一份ShadowSSDT的函数名表到程序里... 学习了。
2009-7-30 20:12
0
雪    币: 635
活跃值: (101)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
8
太谦虚了,你写的不是代码,是寂寞
2009-7-30 21:31
0
雪    币: 105
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
无语            123456
2009-7-30 21:51
0
雪    币: 2362
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
MJ回的不是贴,是寂寞
2009-7-30 23:29
0
雪    币: 412
活跃值: (30)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
11
寂寞
2009-7-31 10:48
0
雪    币: 1233
活跃值: (907)
能力值: ( LV12,RANK:750 )
在线值:
发帖
回帖
粉丝
12
唉 ,每个系统的pdb文件都不一样,你还不如硬编码呢
2009-8-2 08:13
0
雪    币: 170
活跃值: (45)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
13
太强大了,如果没有pdb文件是不是可以从微软服务器下载下来再用呢?
2009-8-2 12:51
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
14
传说某工具就是那样的从服务器下载的~

但是万一我不小心把file给改了,就下载不到符号了~
2009-8-2 13:21
0
雪    币: 8192
活跃值: (3861)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
15
强悍啊 这样也可以
2010-2-14 13:02
0
雪    币: 101
活跃值: (144)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
16
偶没有成功,是全0.。
出错在SymLoadModule,总是不能成功
2010-2-18 19:04
0
雪    币: 242
活跃值: (89)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
17
KERNEL_PROCESS_HANDLE = 0xF0F0F0F0;
  KERNEL_64Value_HIGH       = 0xFFFFFFFF;
2010-9-21 18:15
0
雪    币: 517
活跃值: (64)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
18
SymLoadModule
顶上来
2011-1-12 20:32
0
雪    币: 485
活跃值: (78)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
19
收下 ,感谢分享
2011-1-14 15:57
0
雪    币: 29
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
ShadowSSDT到底是什么SSDT
2011-1-14 16:16
0
游客
登录 | 注册 方可回帖
返回
//