;**************************************
;程序运行平台
.MODEL TINY,STDCALL
;**************************************
;**************************************
;段说明
.CODE
rt_shift EQU 01H
ctrl_key EQU 04H
alt_key EQU 08H
del_key EQU 0D3H
all EQU 04h
kybd_port EQU 60H
ORG 100H
start:
jmp setup;
;内存驻留代码
int9_handler proc far
sti;允许硬件中断
pushf;保存标志寄存器
push es
push ax
push di
;ES: Di指向DOS键盘标志字节
L1:
mov ax,40h
mov es,ax
mov di,17h
mov ah,es:[di];复制键盘标志到AH,417位置上是第一个键盘子http://blog.csdn.net/x86ipc/article/details/5303760
;测试Ctrl和Alt
L2:
test ah,ctrl_key;检测左边的Ctrl键是否按下
jnz L5;否则退出
and ah,not ctrl_key
mov es:[di],ah
comment!
test ah,alt_key;检测alt键是否按下
jnz L5;否则退出
;测试
;测试Del和右shift
L3:
in al,kybd_port
cmp al,del_key;
jne L5;
test ah,rt_shift
jnz L5;
!
L4:
and ah,not ctrl_key;否 关闭Ctrl
mov es:[di],ah
L5:
pop di;
pop ax
pop es
popf
;进行默认的中断处理
jmp cs:[old_interrupt9];
old_interrupt9 dword ?
int9_handler endp
end_ISR label BYTE
setup:
;保存orignal int9 中断
mov ax,3509h
int 21h
mov word ptr old_interrupt9,bx
mov word ptr old_interrupt9+2,es
;设置新的int9中断
mov ax,2509h
mov dx,offset int9_handler
int 21h
;设置驻留程序
mov ax,3100h
mov dx,offset end_ISR
sub dx,cx
mov cl,4
;shr dx,cl
inc dx
int 21h
end start;
参考文件:http://wenku.baidu.com/link?url=zzCaAYN75TBoS-wKHfkDJ7EKNuM5rzcrpp4rVpiA-8ls00V56uu-M5PujyzcgaUZcqRe72W9lLXZCVfZDWJvrC-2SauNzzGj1yTQVcHmKp7
http://blog.csdn.net/x86ipc/article/details/5303760
实验环境:WIN7 旗舰版
实验结果:失败
分析,其实也可以算是成功了,经过测试在执行过TSR.COM的控制台中是成功的,并已经可以加以过滤,但是如果焦点移出该控制台,则过滤无效,是否是因为我们的程序,只读取了,改程序下
的内容???并不能截取全局的键盘操作内容,笔者自己认为,其实已经成功了,但是基于win7或者winxp下的控制台,也就是cmd命令后的开启的进程都只是一个虚拟机,并未真正进入我们当前系统的内存,经测试在该虚拟机下确实键盘中断被安装了,但是如何使用到当前系统中区,还有待于研究
;程序运行平台
.MODEL TINY,STDCALL
;**************************************
;**************************************
;段说明
.CODE
rt_shift EQU 01H
ctrl_key EQU 04H
alt_key EQU 08H
del_key EQU 0D3H
all EQU 04h
kybd_port EQU 60H
ORG 100H
start:
jmp setup;
;内存驻留代码
int9_handler proc far
sti;允许硬件中断
pushf;保存标志寄存器
push es
push ax
push di
;ES: Di指向DOS键盘标志字节
L1:
mov ax,40h
mov es,ax
mov di,17h
mov ah,es:[di];复制键盘标志到AH,417位置上是第一个键盘子http://blog.csdn.net/x86ipc/article/details/5303760
;测试Ctrl和Alt
L2:
test ah,ctrl_key;检测左边的Ctrl键是否按下
jnz L5;否则退出
and ah,not ctrl_key
mov es:[di],ah
comment!
test ah,alt_key;检测alt键是否按下
jnz L5;否则退出
;测试
;测试Del和右shift
L3:
in al,kybd_port
cmp al,del_key;
jne L5;
test ah,rt_shift
jnz L5;
!
L4:
and ah,not ctrl_key;否 关闭Ctrl
mov es:[di],ah
L5:
pop di;
pop ax
pop es
popf
;进行默认的中断处理
jmp cs:[old_interrupt9];
old_interrupt9 dword ?
int9_handler endp
end_ISR label BYTE
setup:
;保存orignal int9 中断
mov ax,3509h
int 21h
mov word ptr old_interrupt9,bx
mov word ptr old_interrupt9+2,es
;设置新的int9中断
mov ax,2509h
mov dx,offset int9_handler
int 21h
;设置驻留程序
mov ax,3100h
mov dx,offset end_ISR
sub dx,cx
mov cl,4
;shr dx,cl
inc dx
int 21h
end start;
参考文件:http://wenku.baidu.com/link?url=zzCaAYN75TBoS-wKHfkDJ7EKNuM5rzcrpp4rVpiA-8ls00V56uu-M5PujyzcgaUZcqRe72W9lLXZCVfZDWJvrC-2SauNzzGj1yTQVcHmKp7
http://blog.csdn.net/x86ipc/article/details/5303760
实验环境:WIN7 旗舰版
实验结果:失败
分析,其实也可以算是成功了,经过测试在执行过TSR.COM的控制台中是成功的,并已经可以加以过滤,但是如果焦点移出该控制台,则过滤无效,是否是因为我们的程序,只读取了,改程序下
的内容???并不能截取全局的键盘操作内容,笔者自己认为,其实已经成功了,但是基于win7或者winxp下的控制台,也就是cmd命令后的开启的进程都只是一个虚拟机,并未真正进入我们当前系统的内存,经测试在该虚拟机下确实键盘中断被安装了,但是如何使用到当前系统中区,还有待于研究