ssdt与shadowssdt区别
2015-08-23 21:41
429 查看
[align=center][/align] (ring3) (NtOpenProcess) ssdt层 实现 OpenProcess->ntdll!ZwOpenProcess->ntos!ZwOpenProcess->ntos!NtOpenProcess (内核中有2套函数 ,zw,nt,nt才是真正的执行函数,zw只是一个过渡函数,可用ida察看ntoskrnl.exe得知) SSDT:主要处理 Kernel32.dll中的系统调用,如openProcess,ReadFile等,主要在ntoskrnl.exe中实现(微软有给出 ntoskrnl源代码) ShadowSSDT: 1.主要处理,user32.dll,GDI32.dll中调用的函数,如postMessage,SendMessage,FindWindow,主要在win32k.sys中实现.(微软未给出win32k代码) 2.需要注意的是shadowSSDT并未导出,可用ida在win32k.sys中的导出表搜索,且结构与ssdt相似,但是不能通过windbg dd命令查看值 3.ShadowSSDT表只能在GUI(即有界面的程序进程)环境下才有值,故我们需要调用KeAttachProcess来切换到GUI线程里。 4.用windbg 命令 .process 861ff020 (861ff020 是通过 命令 !process 0 0得到的)切换到GUI线程上下文 过程:1)(输入windbg命令 ) !process 0 0得到其中一个有 图形界面的程序 (数据如下) PROCESS 861ff020 SessionId: 0 Cid: 0b58 Peb: 7ffde000 ParentCid: 05e4 DirBase: 10080380 ObjectTable: e1dd2808 HandleCount: 73. Image: windbg.exe 2) (输入命令) lkd> .process 861ff020 Implicit process is now 861ff020 (切换成功 ) 3) 切换成功后,使用dd KeServiceDescriptorTableShadow即可得到该表数据,否则无法得到,得到数据如下 lkd> dd KeServiceDescriptorTableShadow 80553f60 80502b8c 00000000 0000011c 80503000--〉SSDT 80553f70 bf999b80 00000000 0000029b bf99a890 --〉ShadowSSDT 80553f80 00000000 00000000 00000000 00000000 80553f90 00000000 00000000 00000000 00000000 80553fa0 80502b8c 00000000 0000011c 80503000 80553fb0 00000000 00000000 00000000 00000000 80553fc0 00000000 00000000 00000000 00000000 80553fd0 00000000 00000000 00000000 00000000 其实KeServiceDescriptorTableShadow 包含4个系统服务表,但是我们只用前2个(SSDT,ShadowSSDT) 4) 总结: 1) ShadowSSDT在KeServiceDescriptorTableShadow[1]中,而KeServiceDescriptorTableShadow[0]为ssdt 2)如果要查看win32k服务,必须要切换到GUI线程上下文 5.如何得到ShadowSSDT地址:在insight source中可查询到wrk中有KeAddSystemServiceTable函数,里面有对KeServiceDescriptorTableShadow a197 的调用 思路:利用搜索特征码的方式搜索KeAddSystemServiceTable,取出KeServiceDescriptorTableShadow ssdt表的结构可用windbg察看: |
相关文章推荐
- 安装与配置windbg的symbol(符号)
- 【机器学习系列】机器学习界大牛林达华推荐的书籍
- Visual Studio 2015 密钥
- 32 bit hardware buffers are not allowed in OpenGL ES
- ictclas分词系统的使用,java调用,附带连接mysql进行读写。
- iOS中使用RegexKitLite来试用正则表达式 使用ARC 20个错误解决办法
- 每天一个Linux命令-22(关闭防火墙)
- 使用supervisord管理python进程
- 基于对话框的应用程序,点击按钮打开一个网页
- c & c++中const
- 枚举实现工厂模式
- IAT和JMP方式的HOOK
- win7下用windbg进行本地内核调试
- UITextField的总结
- seaside
- ARM处理器比较:A8/A9
- 用JavaScript实现表单按回车自动提交
- 快学Scala习题解答—第十四章 模式匹配和样例类
- VirtualBox Windbg 双机调试配置
- 【cocos2d-x 3.7 飞机大战】 决战南海I (三) 敌机实现