一个hook NtOpenProcess出现的诡异问题

[复制链接]
查看11 | 回复6 | 2021-1-27 07:04:30 | 显示全部楼层 |阅读模式
我hook掉这个内核函数。。然后每次加载驱动就BSOD晕怎么回事啊。代码好象没什么问题。
这里是驱动部分的改NtOpenProcess前5个字节的代码
HookCodedb0e9h
HookAddressdd?
_Hookproc
.iflpNtOpenProcess
cli
moveax,cr0
andeax,0FFFEFFFFH
movcr0,eax
movesi,lpNtOpenProcess;这个变量存放的NtOpenProcess地址
leaedi,RawNtOpenProcess;保存前5个字节的变量一会在hookproc里面用来恢复
movecx,5
repmovsb
moveax,lpNtOpenProcess
addeax,5
movedx,offsetMy_NtOpenProcess;这个是准备跳到的地址改NtOpenProcess跳进My_NtOpenProcess里面来
subedx,eax
movHookAddress,edx
leaesi,HookCode
movedi,lpNtOpenProcess
movecx,5
repmovsb
moveax,cr0
oreax,00010000H
movcr0,eax
sti
.endif
ret
_Hookendp

这里是让NtOpenProcess准备掉进来的代码
My_NtOpenProcess:
pushad
cli
moveax,cr0
andeax,0FFFEFFFFH
movcr0,eax
movesi,offsetRawNtOpenProcess
movedi,lpNtOpenProcess
movecx,5
@@:
moval,BYTEptr[esi]
movBYTEptr[edi],al
incesi
incedi
loop@B
moveax,cr0
oreax,00010000H
movcr0,eax
sti
popad
jmplpNtOpenProcess
简单的把前5个字节恢复然后jmp回去这样也出错?SHIT
分 -->
回复

使用道具 举报

千问 | 2021-1-27 07:04:30 | 显示全部楼层
还有我的这两个子程序全在我的驱动里面。。驱动是用汇编写的kmd驱动。。
我用同样的方法改掉其他函数比如一个不常用的函数memchr这个函数不会死
应为这个函数没人用但是NtOpenProcess这个函数估计一直有程序在用。
所以我hook马上被调用但是都是蓝屏。会不会是IRQL中断优先级的问题???
回复

使用道具 举报

千问 | 2021-1-27 07:04:30 | 显示全部楼层
还有我的这两个子程序全在我的驱动里面。。驱动是用汇编写的kmd驱动。。
我用同样的方法改掉其他函数比如一个不常用的函数memchr这个函数不会死
应为这个函数没人用但是NtOpenProcess这个函数估计一直有程序在用。
所以我hook马上被调用但是都是蓝屏。会不会是IRQL中断优先级的问题???
回复

使用道具 举报

千问 | 2021-1-27 07:04:30 | 显示全部楼层
修改这种NtApi的时候,注意不能被打断,否则兰屏是肯定的。
你可以提升IRQL级别,然后降回。
回复

使用道具 举报

千问 | 2021-1-27 07:04:30 | 显示全部楼层
接分先!
回复

使用道具 举报

千问 | 2021-1-27 07:04:30 | 显示全部楼层
lz要干嘛?
回复

使用道具 举报

千问 | 2021-1-27 07:04:30 | 显示全部楼层
记得看过一份代码,是先下了中断再改,改了后再恢复中断.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行