电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

用Perl和xev创建连续击键力学监视器

11页
  • 卖家[上传人]:ldj****22
  • 文档编号:35915846
  • 上传时间:2018-03-22
  • 文档格式:PDF
  • 文档大小:350.98KB
  • / 11 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、 版权所有 IBM 公司 2008商标 用 Perl 和 xev 创建连续击键力学监视器第 1 页,共 11用 Perl 和 xev 创建连续击键力学监视器通过连续处理 X Window System 级别中的击键属性来分析谁在使用计算机Nathan Harrington 程序员 EMC2008 年 11 月 28 日了解如何使用 Perl、xev 和自定义算法,根据特有的键入模式监视当前使用键盘的人员。击键力学 是一个相对崭新的领域,可以通过对键入模式进行统计分析来识别使用键盘的人员。以前 发布在 developerWorks 中的文章已经展示了如何将击键力学的概念集成到应用程序中,以及修改 Gnome Display Manager(GDM)以要求使用正确密码及 “正确键入的” 密码的实际示例。本文提供 的代码和工具可以使您超越单一的击键力学应用,而是连续监视整个 X Window System 环境以掌握 键入者的特有模式。在阅读本文后,您将可以创建一个连续的击键力学监视器,该监视器可以在没有检测到特有键入模 式时锁定 X Window System 会话。所选方法的注意事项跟踪

      2、每个键按下情况的最有效方法也许就是使用内核级键盘记录工具(例如 THC-vlogger 或 ttyrpld)。不幸的是,这些程序是为较旧的内核级别设计的,或者目前很难在现代 Linux 发行版中 使用。键盘设备跟踪程序(例如 uberkey)是另外一种好方法,但是其释放击键和计时的不精确性使 其不适合本文介绍的应用。虽然不适用于控制台或远程会话,但是 xev 为检测在 X Window System 中运行的任意应用程序的键 盘事件提供了一种健壮且轻量级的方法。xev 会话中的每个事件都是随高精度的时间值一同输出的。在本文中,我们将在具体时窗内使用该 时间值记录 R、S 和 T 键的 “停顿” 时间。停顿时间是用户的手指按住按键的时间段。将为 X Window System 桌面中的每个应用程序记录这个相对简单的度量。在开发击键 “签名” 时,最好使用大量数据。使用模式需要匹配最常见的计算机使用情况。用下面介 绍的数据跟踪选项进行试验以获得各种样例使用数据。然后,开发的签名将被转换为密码散列并存 储到磁盘中,以供稍后在监视阶段中进行比较。developerW Perl 和 xev 创建

      3、连续击键力学监视器第 2 页,共 11硬件和软件要求2000 年以后生产的所有 PC 都应当能够处理本文中提供的代码。您将需要 X Window System 以及 xev 程序(请参阅 参考资料)。您需要使用 mkpasswd 程序(附带于大多数 Linux 分发版中)才能生成 击键签名的密码散列。需要 Perl 模块 X11:GUITest、threads 和 Thread:Queue。UNIX 和 Linux 用 户请注意:如果您刚开始安装 Perl 模块,使用 Andreas J. Konig 的 CPAN 模块可以自动安装其他模块 (请参阅 参考资料)。continuousKeystrokes.pl 程序记录在 X Window System 会话中按下的每个击键的简单方法是启动与 xwininfo -root -tree 所列出 的每个窗口绑定的 xev 程序。在理论上,这种方法将对于少量窗口有效,但是最终,将达到 X 客户 机的最大数目,并且需要重新编译 X Window System 才能增加允许的 X 客户机数目。更合理的解决 方案是跟踪持有焦点的当前窗口并把单个 x

      4、ev 程序与该窗口绑定起来。然后将记录当前持有焦点的 窗口的每个键盘事件。清单 1 显示了用于跟踪当前焦点并创建击键签名的 continuousKeystrokes.pl 程序的开头。清单 1. continuousKeystrokes.pl 变量声明#! perl -w # continuousKeystrokes.pl - monitor dwell time of r,s,t for all X Window System use strict; use X11:GUITest qw( :ALL ); use threads; use Thread:Queue; die “specify mode, minimum samples“ unless _cnnew1ARGV = 2 ;my $sleepTime = 5; # seconds between key event processing runs my %windows = (); # hash of window keystrokes my samp = (); # most recent sample averages

      5、 of keystrokes my $checkRng = 10; # fuzziness of dwell time matching my $userMatch = 0; # user or impostor? my %keys = (); # average of key dwell timesmy $mode = $ARGV0; # record baseline or monitor matches my $minSamples = $ARGV1; # required base samples to match with my ( $salt, $hash ) = “; # read from keystroke.Signaturesif( $mode eq “monitor“ ) loadSignatureFile() 在模块 include 语句和初始变量声明之后,进入主控制循环。在处于监视模式下时,将装入先前生成 的签名文件。清单 2 显示了主程序循环的开头。清单 2. 主程序循环的开始部分# ctrl-c to exit the program and drop t

      6、he threads without error while(1) my activeId = GetInputFocus();my $foundPipe = 0;for my $key ( keys %windows )if( $key eq “activeId“ $windows$key input = createPipe( $res ) or die “no pipe “;$windows$keypipeDef = 1;$foundPipe = 1;#if not a match#for each windows keyif( $foundPipe = 0 )# if pipe doesnt already exist, add a new onemy $key = “activeId“;if( !exists($windows$key) | $windows$keypipeDef = 0 )my $res = “xev -id $key |“;$windows$key input = createPipe( $res ) or die “no pipe “;$windows$

      7、keypipeDef = 1;#if pipe doesnt already exist#foundpipe check第一个 for 循环将搜索目前没有绑定管道的窗口散列中的已有条目。如果找到这样一个条目,则创 建一个管道。维护一个由目前拥有管道的窗口组成的可用工作列表,将允许在一段时间内收集 xev 输出。xev 输出是非缓冲的,这会造成较少使用的窗口无法以足够快的速度填充输出缓冲。为了让输 出数据在窗口失去焦点后继续保留,然后重新获得这些数据,窗口散列将记录输出。清单 3 显示了 主逻辑循环的其余部分。清单 3. 主逻辑循环结束# read any available date from a pipefor my $xevPipe( keys %windows )next unless( $windows$xevPipepipeDef = 1 );while( $windows$xevPipeinput-pending )my $line = $windows$xevPipeinput-dequeue or next;$windows$xevPipekeyString .= $l

      8、ine;#while data to be added to the buffernext unless( exists( $windows$xevPipekeyString ) );next unless( length( $windows$xevPipekeyString ) 8192 );compareSignature( getKeyAverages( $windows$xevPipekeyString ) );$windows$xevPipekeyString = “;#for windows keys# kill all xevs except currently monitoredfor my $key ( keys %windows )next unless( $key ne “activeId“ $windows$keypipeDef = 0;my $cmd = qqps -aef | grep $key | grep xev | perl -lane kill $F1;system($cmd);#for each windows keysleep( $sleepTi

      9、me );#while main loopdeveloperW Perl 和 xev 创建连续击键力学监视器第 4 页,共 11在创建了管道(或者如果已经存在一个管道)后,每个管道的输出将被读入到该窗口记录的事件 变量中。如果记录了足够的数据,则整个缓冲将被传递给 getKeyAverages 子例程,然后再传递给 compareSignature 子例程。接下来,如果焦点事件发生更改,则终止旧的 xev 程序。清单 4 显示了前两个子例程:loadSignatureFile 和 createPipe。清单 4. loadSignatureFile 和 createPipe 子例程sub loadSignatureFile open(INFILE,“keystroke.signatures“) or die “no signature file“;my $line =;die “empty file “ unless defined $line;chomp($line);( undef, undef, $salt, $hash ) = split $, $line;close(INFILE);#loadSignatureFilesub createPipe my $cmd = shift;my $queue = new Thread:Queue;asyncmy $pid = open my $pipe, $cmd or die $!;$queue-enqueue( $_ ) while ;$queue-enqueue( undef );-detach;# detach causes the threads to be silently terminated on program exitreturn $queue;#createPipeloadSigna

      《用Perl和xev创建连续击键力学监视器》由会员ldj****22分享,可在线阅读,更多相关《用Perl和xev创建连续击键力学监视器》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    监控施工 信息化课堂中的合作学习结业作业七年级语文 发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.