//当Ring3调用OpenProcess

//1从自己的模块(.exe)的导入表中取值

//2Ntdll.dll模块的导出表中执行ZwOpenProcess(取索引 进入Ring0层)

//3进入Ring0 从Ntoskernel.exe模块的导出表中执行ZwOpenProcess(取索引 获得SSDT服务地址)

//4通过索引在SSDT表中取值(NtOpenProcess的地址)

//5真正调用NtOpenProcess函数

在真正调用OpenProcess后 可以通过修改里面跳转函数的地址 从而HookSSDT

     /*
kd> u NtOpenProcess
nt!NtOpenProcess:
fffff800`0415d2ec 4883ec38 sub rsp,38h
fffff800`0415d2f0 65488b042588010000 mov rax,qword ptr gs:[188h]
fffff800`0415d2f9 448a90f6010000 mov r10b,byte ptr [rax+1F6h]
fffff800`0415d300 4488542428 mov byte ptr [rsp+28h],r10b
fffff800`0415d305 4488542420 mov byte ptr [rsp+20h],r10b
fffff800`0415d30a e851fcffff call nt!PsOpenProcess (fffff800`0415cf60)
fffff800`0415d30f 4883c438 add rsp,38h
fffff800`0415d313 c3 ret
*/

win7_64中OpenProcess

 /*
u ZwOpenProcess
nt!ZwOpenProcess:
805016b4 b87a000000 mov eax,7Ah
805016b9 8d542404 lea edx,[esp+4]
805016bd 9c pushfd
805016be 6a08 push 8
805016c0 e88c0d0400 call nt!KiSystemService (80542451)
805016c5 c21000 ret 10h
nt!ZwOpenProcessToken:
805016c8 b87b000000 mov eax,7Bh
805016cd 8d542404 lea edx,[esp+4] */

WinXP中OpenProcess

首先获得SSDT的地址

在SSDT中查找OpenProcess的Index

保存原来函数地址 (在卸载驱动时要恢复回去);

修改ZwOpenProcess中的跳转函数

http://www.cnblogs.com/yifi/p/4968755.html

InLineHookSSDT的更多相关文章

  1. Resume InlineHookSSDT

    在InlineHook中修改了zwOpenProcess函数的中的指令 与Resume HookSSDT同理 找出一个正确的值覆盖上去就行. 突发奇想  有没有可能上去一个驱动或者程序  直接卸载掉I ...

随机推荐

  1. CISCO VPN出现网关报错

    今天尝试使用发现报错: 重启VPN服务即可

  2. Spring security3

    最近一直在学习spring security3,试着搭建了环境: 构建maven环境 项目配置pom.xml文件 <project xmlns="http://maven.apache ...

  3. iOS - OC NSCache 缓存

    前言 NSCache 是苹果提供的一个专门用来做缓存的类,当内存 "不足" 或超过限制的时候,会自动清理缓存,使用时可以指定缓存的数量和成本.用法与 NSMutableDictio ...

  4. mysql概要(三)having

    1.运算符 2.模糊查询 3.where 后的判断基于表(表的直接内容),而不是基于结果(运算之后的别名)如: 可改成在where后再次重新计算判断: 或者使用having对结果判断: having多 ...

  5. ps aux和ps ef的区别

    ps aux 是以BSD方式显示ps -ef 是以System V方式显示,该种方式比BSD方式显示的多一重要项--(具体哪项忘了 -_- ) ps aux的输出: USER PID %CPU %ME ...

  6. POJ 3468 线段树裸题

    这些天一直在看线段树,因为临近期末,所以看得断断续续,弄得有些知识点没能理解得很透切,但我也知道不能钻牛角尖,所以配合着刷题来加深理解. 然后,这是线段树裸题,而且是最简单的区间增加与查询,我参考了A ...

  7. C++——并发编程

    一.高级接口:async()和Future 1.1 async()和Future的第一个用例 假设需要计算两个操作数的总和,而这两个操作数是两个函数的返回值.寻常加法如下: func1() + fun ...

  8. 彻底理解ThreadLocal

    ThreadLocal是什么 早在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路.使用这个工具类可以很简洁地 ...

  9. 从linux系统mysql导出数据库

    原文:http://blog.csdn.net/lifuxiangcaohui/article/details/50763674 1.MySQL数据库导出 /usr/local/mysql/bin/m ...

  10. Spring MVC 入门基础(一)

    一.Spring Web MVC是什么? Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,使用了MVC架构模式的思想,将web层进行职责解 ...