首页
社区
课程
招聘
[下载]内核层获取SSDT中函数原始地址
发表于: 2011-8-30 20:32 19381

[下载]内核层获取SSDT中函数原始地址

2011-8-30 20:32
19381

昨天在看雪看到《【下载】发个获得SSDT函数名和索引号的代码》,一时兴起整理了一份内核层根据ntdll.dll和nt模块文件来获取SSDT函数原始的地址的代码,可以用来检测和恢复SSDT hook。

没什么技术含量,不过这却是我第一次规规矩矩地写代码,花费了一下午的时间调整代码格式,填写注释。希望能够尽可能地使代码易读易用易维护,当然,现在依旧感觉有很多不如意的地方,包括安全性与函数的封装,都有很大的修改空间,不过还是选择了先贴出来,如果感觉不爽的,可以自己修改一下。

因为感觉中文混在代码中看起来很别扭,所以注释都使用的英文,这对一个六级没有通过的人来说,真不是件容易的事情(),如果发现什么语法错误,请无视~~

最后,欢迎各位对代码的格式,注释的填写以及函数的封装等工程性的问题上提出建议~~


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 6
支持
分享
最新回复 (18)
雪    币: 146
活跃值: (182)
能力值: ( LV13,RANK:220 )
在线值:
发帖
回帖
粉丝
2
支持下QEver
2011-8-30 22:50
0
雪    币: 233
活跃值: (285)
能力值: ( LV12,RANK:270 )
在线值:
发帖
回帖
粉丝
3
谢谢~~
刚看过了你的kernel star,近期也在写一个相似的程序,写了一部分后感觉代码太混乱,现在把以前写的都抛弃了,正在学习编程规范,并重新规划整个项目。不得不感慨,一个项目中,code连一半的成分都占不住啊~~~
2011-8-30 23:30
0
雪    币: 146
活跃值: (182)
能力值: ( LV13,RANK:220 )
在线值:
发帖
回帖
粉丝
4
呵呵 我现在也是 写个代码前想办法 通用性啊 扩展性啊 易用性啊 然后.. 然后..就不想写了
2011-8-30 23:39
0
雪    币: 1685
活跃值: (704)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
代码结构挺漂亮的
2011-8-31 00:07
0
雪    币: 414
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
这代码...漂亮
2011-8-31 00:15
0
雪    币: 220
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
嗯 不错 不错
2011-8-31 02:34
0
雪    币: 9
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
正需要,下了看看。
2011-11-20 16:56
0
雪    币: 9
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
用3790。1830的DDK编译,缺文件啊,没有nttifs.h,  楼主用什么编译的

在虚拟机的XP用原来编译好的驱动,蓝屏。。没在真实机上测了
2011-11-20 22:11
0
雪    币: 34
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
代码提供漂亮的了
2012-3-31 15:04
0
雪    币: 183
活跃值: (55)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
11
LZ出现了!!!
2012-3-31 15:22
0
雪    币: 238
活跃值: (55)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
12
手机版没有收藏功能
2012-3-31 15:39
0
雪    币: 71
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
这代码...漂亮
2012-3-31 16:55
0
雪    币: 44
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
14
mark一下。//
2012-7-6 10:28
0
雪    币: 2314
活跃值: (2205)
能力值: (RANK:400 )
在线值:
发帖
回帖
粉丝
15
连注释都参照微软的,哈哈哈。
2012-7-6 15:24
0
雪    币: 22
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
觉得 LoadFile 的编码太防御性了。。。。
每个调用后面都 NT_SUCCESS 。。。。 给我的感觉是 畏首畏脚的。

我喜欢一眼就 hold 住整个函数、我改成这样了:

VOID LoadFile(IN PWCH FilePath, OUT PVOID * FileBuffer)
{
        NTSTATUS Status;
        UNICODE_STRING ImagePath;
        OBJECT_ATTRIBUTES ObjectAttributes;
        IO_STATUS_BLOCK IoStatusBlock;
        HANDLE hFile;
        FILE_STANDARD_INFORMATION FileSize;
        PVOID Buffer;

        RtlInitUnicodeString(&ImagePath, FilePath);
        InitializeObjectAttributes(&ObjectAttributes, &ImagePath, OBJ_CASE_INSENSITIVE, NULL,NULL);

        Status = ZwCreateFile( &hFile, GENERIC_READ, &ObjectAttributes, &IoStatusBlock, NULL, FILE_ATTRIBUTE_NORMAL,
                                                                        FILE_SHARE_READ, FILE_OPEN, FILE_SYNCHRONOUS_IO_NONALERT, NULL, 0);

        //        Get file size
        Status = ZwQueryInformationFile( hFile, &IoStatusBlock, &FileSize, sizeof(FileSize), FileStandardInformation);

        //        Allocate buffer
        Buffer = ExAllocatePoolWithTag(        NonPagedPool, (SIZE_T)FileSize.AllocationSize.QuadPart, 'Dll ');

        //        Read file
        Status = ZwReadFile( hFile, NULL, NULL, NULL, &IoStatusBlock, Buffer,
                                                                (LONG)FileSize.AllocationSize.QuadPart, NULL, NULL);

        if( hFile != NULL)
        {
                if ( Buffer && NT_SUCCESS(Status))
                {
                        // Success
                        *FileBuffer = Buffer;
                }
                ZwClose(hFile);
        }
}
2012-12-25 13:34
0
雪    币: 111
活跃值: (113)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
17
好东西,我需要的,谢谢分享~~~
2012-12-26 18:07
0
雪    币: 111
活跃值: (113)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
18
蓝屏了。。。。。在分析问题中。
2012-12-26 23:04
0
雪    币: 284
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
mark一下,慢慢看
2012-12-26 23:32
0
游客
登录 | 注册 方可回帖
返回
//