紫水晶编程技术论坛 - 努力打造成全国最好的编程论坛

 找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 6728|回复: 8

TA . 在Shadow SSDT Hook .里遇到问题。请指教。3Q

  [复制链接]

9

主题

126

帖子

0

精华

银牌会员

Rank: 3Rank: 3Rank: 3

积分
422
发表于 2012-3-30 02:54:32 | 显示全部楼层 |阅读模式
本帖最后由 xmlpull 于 2012-3-30 03:09 编辑

这是老大的。SSSDT HOOK。 Sys部分的截图。

QQ截图20120330025030.png



好了。结果我也去仿照。
  1. mov rax,rcx           ; rcx = ID - 0x1000;
  2. mov r10,rdx          ;   rdx = Shadow SSDT;
  3. mov r10,[r10+20h]           
  4. mov eax,[r10+rax*4]     ;<- 运行到这步就蓝屏了。
  5. sar eax,4
  6. movsxd r11,eax
  7. add r11,rdx
  8. mov rax,r11
  9. ret
复制代码
。还有个奇怪问题。
QQ截图20120330030439.png


如图。明明SSSDT就为红线所画。可以 dp 看到的内容。好神奇。


QQ截图20120330030457.png


用了老大的工具。


QQ截图20120330030528.png



dp .dd 该地址还是 。神奇的符号。




QQ截图20120327190154.png

9

主题

126

帖子

0

精华

银牌会员

Rank: 3Rank: 3Rank: 3

积分
422
 楼主| 发表于 2012-3-30 13:54:48 | 显示全部楼层
{:soso__6235880048239246314_3:}{:soso__6235880048239246314_3:}

结贴吧。


原来非GUI程序不能访问野。

854

主题

3481

帖子

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

Rank: 125Rank: 125Rank: 125Rank: 125Rank: 125

积分
36100
发表于 2012-3-30 18:36:25 | 显示全部楼层
刚刚看到这个帖子。。。

我估计你也是把代码写到DRIVER_ENTRY里了。。。

纠正一个错误,只有IDLE进程和SMSS不能访问WIN32K的内存空间,普通的CUI进程是可以的。

9

主题

126

帖子

0

精华

银牌会员

Rank: 3Rank: 3Rank: 3

积分
422
 楼主| 发表于 2012-3-30 22:10:27 | 显示全部楼层
Tesla.Angela 发表于 2012-3-30 18:36
刚刚看到这个帖子。。。

我估计你也是把代码写到DRIVER_ENTRY里了。。。


嗯。后来解决了。!!!!  

把代码写到 IOCTL 里面。!


3Q。 TA。


最近写代码 遇到个效率问题。不知道TA。怎么解决这样的问题的。例如


在自己的 Inline Hook OpenProcess 里面。我需要从R3 传入 多个 自己想要输出 消息的进程名/句柄。


if(HANDLE == handle[0] || HANDLE == handle[1] || HANDLE == handle[2]...........HANDLE == handle[n] )
{
     Dbgprintf("XXX");
}

OpenProcess 系统是频繁调用的。

所有感觉这样的效率非常不高。所以有什么 艺术 代码 ? 求指教、




854

主题

3481

帖子

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

Rank: 125Rank: 125Rank: 125Rank: 125Rank: 125

积分
36100
发表于 2012-4-1 07:58:46 | 显示全部楼层
xmlpull 发表于 2012-3-30 22:10
嗯。后来解决了。!!!!  

把代码写到 IOCTL 里面。!

用for循环遍历数组

23

主题

140

帖子

1

精华

银牌会员

Rank: 3Rank: 3Rank: 3

积分
400
发表于 2012-4-2 19:13:50 | 显示全部楼层
Tesla.Angela 发表于 2012-4-1 07:58
用for循环遍历数组

for循环。。。。这个与他那个遍历有啥区别。。。。。bitmap就好了
一个bit代表一个pid
要判断某个pid是不是自己感兴趣的。。。。直接算相应pid值得bit是不是被置位的就好了
比如,pid5543,那你只要算一下你的相应bitmap的第5543bit是不是1.这个是O(1)的速度了。。。

854

主题

3481

帖子

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

Rank: 125Rank: 125Rank: 125Rank: 125Rank: 125

积分
36100
发表于 2012-4-2 21:07:59 | 显示全部楼层
xmlpull 发表于 2012-3-30 22:10
嗯。后来解决了。!!!!  

把代码写到 IOCTL 里面。!

另外我记得以前有人说过OpenProcess(pid+0)、OpenProcess(pid+1)、OpenProcess(pid+2)、OpenProcess(pid+3)都是可以的,反OpenProcess最好是打开之后用ObRefObj来反查PEPROCESS,如果是的话就关闭句柄并返回失败。

854

主题

3481

帖子

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

Rank: 125Rank: 125Rank: 125Rank: 125Rank: 125

积分
36100
发表于 2012-4-3 16:27:29 | 显示全部楼层
sb666 发表于 2012-4-3 13:59
在64位的系统搞进程保护何必ssdthook呢?挂了也白挂,反正都要日pG
不如用ObRegisterCallbacks还防得严密 ...


我也觉得,到了X64时代要改变思想,不能老是HOOK了。

7

主题

421

帖子

1

精华

铂金会员

Rank: 5

积分
2173
发表于 2013-4-11 21:34:11 | 显示全部楼层
xmlpull 发表于 2012-3-30 22:10
嗯。后来解决了。!!!!  

把代码写到 IOCTL 里面。!

得要留心一下這個問題
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

手机版|Archiver|紫水晶工作室 ( 粤ICP备05020336号 )

GMT+8, 2024-4-29 13:20 , Processed in 0.032352 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表