当前位置: 技术问答>linux和unix
高分提问 高手请进 有关键盘监控的问题
来源: 互联网 发布时间:2016-03-24
本文导语: 我希望实现监控别人系统输入的功能,按照开源项目Sebek的说法可以直接hook sys_read 我就是这么做的 代码如下 asmlinkage ssize_t NewRead (unsigned int fd, char *buf, size_t count) { static unsigned int i = 0; ssize_t nRes; //...
我希望实现监控别人系统输入的功能,按照开源项目Sebek的说法可以直接hook sys_read
我就是这么做的
代码如下
asmlinkage ssize_t NewRead (unsigned int fd, char *buf, size_t count)
{
static unsigned int i = 0;
ssize_t nRes;
//----- run original sys_read....
nRes = pOldRead(fd, buf, count);
//----- check for error and interest
if(nRes 1)
{
memcpy(Buffer,buf,1023>count?count:1023);
Buffer[1023>count?count:1023]=0;
klib_fprintf(pFile,"%u :SysRead %u bytes: "%s" .rn",i,(unsigned long)count,Buffer);
i++;
}
}
OUT:
return nRes;
}
但是每次这个模块安装之后几秒钟必定挂掉
然后查看的输出信息很复杂
根本和用户输入无关
我想问
1 如何判断这个read函数调用的初始进程是谁
2 我的代码为什么会造成系统崩溃
第一次来这个论坛发贴
希望各位牛人多帮忙
btw klib_fprintf是我自己写的内核态写文件的函数代码
再给大家贴一些我在日志文件中读到的信息片段 谁知道这些究竟是什么东西
如何过滤掉
71 :SysRead 129 bytes: "Name: hald-addon-keyb
State: S (sleeping)
SleepAVG: 78%
Tgid: 4139
Pid: 4139
PPid: 4125
TracerPid: 0
Uid: 107 107 107 107
Gid: 11" .
72 :SysRead 129 bytes: "Name: hald-addon-acpi
State: S (sleeping)
SleepAVG: 78%
Tgid: 4131
Pid: 4131
PPid: 4125
TracerPid: 0
Uid: 107 107 107 107
Gid: 11" .
73 :SysRead 129 bytes: "Name: hald-runner
State: S (sleeping)
SleepAVG: 47%
Tgid: 4125
Pid: 4125
PPid: 4124
TracerPid: 0
Uid: 0 0 0 0
Gid: 0 0 0 0
FDSize" .
74 :SysRead 129 bytes: "Name: hald
State: S (sleeping)
SleepAVG: 89%
Tgid: 4124
Pid: 4124
PPid: 1
TracerPid: 0
Uid: 107 107 107 107
Gid: 114 114 114 114
" .
75 :SysRead 129 bytes: "Name: dbus-daemon
State: S (sleeping)
SleepAVG: 60%
Tgid: 4108
Pid: 4108
PPid: 1
TracerPid: 0
Uid: 103 103 103 103
Gid: 106 106 1" .
76 :SysRead 129 bytes: "Name: klogd
State: S (sleeping)
SleepAVG: 78%
Tgid: 4087
Pid: 4087
PPid: 1
TracerPid: 0
Uid: 102 102 102 102
Gid: 103 103 103 103" .
我就是这么做的
代码如下
asmlinkage ssize_t NewRead (unsigned int fd, char *buf, size_t count)
{
static unsigned int i = 0;
ssize_t nRes;
//----- run original sys_read....
nRes = pOldRead(fd, buf, count);
//----- check for error and interest
if(nRes 1)
{
memcpy(Buffer,buf,1023>count?count:1023);
Buffer[1023>count?count:1023]=0;
klib_fprintf(pFile,"%u :SysRead %u bytes: "%s" .rn",i,(unsigned long)count,Buffer);
i++;
}
}
OUT:
return nRes;
}
但是每次这个模块安装之后几秒钟必定挂掉
然后查看的输出信息很复杂
根本和用户输入无关
我想问
1 如何判断这个read函数调用的初始进程是谁
2 我的代码为什么会造成系统崩溃
第一次来这个论坛发贴
希望各位牛人多帮忙
btw klib_fprintf是我自己写的内核态写文件的函数代码
再给大家贴一些我在日志文件中读到的信息片段 谁知道这些究竟是什么东西
如何过滤掉
71 :SysRead 129 bytes: "Name: hald-addon-keyb
State: S (sleeping)
SleepAVG: 78%
Tgid: 4139
Pid: 4139
PPid: 4125
TracerPid: 0
Uid: 107 107 107 107
Gid: 11" .
72 :SysRead 129 bytes: "Name: hald-addon-acpi
State: S (sleeping)
SleepAVG: 78%
Tgid: 4131
Pid: 4131
PPid: 4125
TracerPid: 0
Uid: 107 107 107 107
Gid: 11" .
73 :SysRead 129 bytes: "Name: hald-runner
State: S (sleeping)
SleepAVG: 47%
Tgid: 4125
Pid: 4125
PPid: 4124
TracerPid: 0
Uid: 0 0 0 0
Gid: 0 0 0 0
FDSize" .
74 :SysRead 129 bytes: "Name: hald
State: S (sleeping)
SleepAVG: 89%
Tgid: 4124
Pid: 4124
PPid: 1
TracerPid: 0
Uid: 107 107 107 107
Gid: 114 114 114 114
" .
75 :SysRead 129 bytes: "Name: dbus-daemon
State: S (sleeping)
SleepAVG: 60%
Tgid: 4108
Pid: 4108
PPid: 1
TracerPid: 0
Uid: 103 103 103 103
Gid: 106 106 1" .
76 :SysRead 129 bytes: "Name: klogd
State: S (sleeping)
SleepAVG: 78%
Tgid: 4087
Pid: 4087
PPid: 1
TracerPid: 0
Uid: 102 102 102 102
Gid: 103 103 103 103" .
|
code虽少,问题多多。kernel的coding和应用程序的coding有很多不同。
pFile和Buffer是什么?
memcpy(Buffer,buf,1023>count?count:1023);
不能直接用memcpy拷贝用户进程的东西到kernel.
还有,你若只想监控别人系统输入,保存所有文件的read是不是有点太多了。
pFile和Buffer是什么?
memcpy(Buffer,buf,1023>count?count:1023);
不能直接用memcpy拷贝用户进程的东西到kernel.
还有,你若只想监控别人系统输入,保存所有文件的read是不是有点太多了。
|
handle_scancode()
函数是所有键盘必须调用的函数。参数就是扫描码。楼主可以在这个函数里做文章。
在这个函数里掉用你的函数。就可以实现了。
函数是所有键盘必须调用的函数。参数就是扫描码。楼主可以在这个函数里做文章。
在这个函数里掉用你的函数。就可以实现了。
|
关注~~~
|
赞
|
什么呀
|