网络考试系统中防止U盘作弊方法研究

时间:2011-05-10来源:网络

3.3 锁键盘设计
锁键盘模块的执行结果呈现在考生面前的是键盘处于失效。本模块被调用后,将封锁键盘上的所有字母键、功能键和组合键,唯一开放的键是F12键,是输入解锁密码的入口键。
其功能是:
(1)封锁键盘上的所有单键,只留F12键。
  (2)封锁Ctrl-Alt-Delete组合键,禁止打开Windows任务管理器。
  (3)封锁Windows-Key(微软键),禁止打开开始菜单。
  (4)封锁Alt-F4组合键,禁止用此键关闭本程序。
  (5)封锁Alt-Tab、Alt-Esc组合键,禁止切换任务窗体。
  在封锁键盘模块设计中使用到了钩子(Hook)技术。系统使用键盘钩子截获键盘消息,在钩子函数中判断键盘消息中的键是否需要屏蔽键,如果需要屏蔽键,则不将此消息发送到窗体,从而达到屏蔽键盘的目的。由于系统需要屏蔽的键中有Windows-Key,而使用普通的键盘钩子不能捕捉到Windows-Key键。所以系统使用了底层键盘钩子,即全局键盘钩子。
  安装键盘钩子:
  [DllImport(user32, EntryPoint = SetWindowsHookExA, CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
  public static extern int SetWindowsHookEx(int idHook, // 钩子的类型,即其处理的消息类型。
  GlobalKeyboardProcDelegate lpfn, // 如果dwThreadId参数为0 或是一个由别的进程创建的线程的标识,lpfn必须指向DLL中的钩子子程。
  int hMod, // 应用程序实例的句柄。标识包含lpfn所指的子程的DLL。
  int dwThreadId);
  其中:GlobalKeyboardProcDelegate是处理键盘钩子截获的键盘消息的代理函数。设计如下:
public int GlobalKeyboardProc(int nCode, int wParam, ref KBDLLHOOKSTRUCT lParam)
{
bool keyEven = false;
switch (wParam)
{
case WM_KEYDOWN:
case WM_KEYUP:
case WM_SYSKEYDOWN:
case WM_SYSKEYUP:
keyEven = (((lParam.vkCode == 0x09) (lParam.
flags == 0x20)) | // Alt+Tab
((lParam.vkCode == 0x1B) (lParam.flags ==
0x20)) | // Alt+Esc
((lParam.vkCode == 0x1B) (lParam.flags ==
0x00)) | // Ctrl+Esc
((lParam.vkCode == 0x5B) (lParam.flags ==
0x01)) | // Left Windows Key
((lParam.vkCode == 0x5C) (lParam.flags ==
0x01)) | // Right Windows Key
((lParam.vkCode == 0x73) (lParam.flags ==
0x20)) | // Alt+F4
);
break;
}
if (keyEven == true)
{
return 1;
}
else
{
return CallNextHookEx(0, nCode, wParam, ref lParam);
}
  }
  卸载键盘钩子:
  [DllImport(user32, EntryPoint = UnhookWindowsHookEx, CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
  public static extern int UnhookWindowsHookEx(int hHook);
  转到下一个钩子:
[DllImport(user32,EntryPoint=CallNextHookEx, CharSet=
CharSet.Ansi, SetLastError=true,ExactSpelling= true)]
public static extern int CallNextHookEx(int hHook, int nCode, int wParam, ref KBDLLHOOKSTRUCT lParam);
4 系统自身保护及运行
由于考生在考试过程中的作弊现象时有发生,因此监考和作弊考生是一对不可避免的矛盾,相互存在着一
定斗智斗勇现象。系统在一定程度上也充当了监考的角色,因此它就需要具有一定的自身保护能力,而不被考生终止运行。系统采用如下几种保护:
(1)用户终止保护
  系统被设计成一个后台运行系统,运行后不显示任何窗体,只在系统的托盘中显示一个图标,而且不提供右击弹出菜单和双击显示主程序窗体的功能。从而使考生不能直接终止本程序,实现终止保护。
  (2)进程保护
  采用了进程保护技术,使得在Windows的任务管理器中无法终止本进程。防止考生在使用U盘前先终止本进程。
(3)卸载保护
  系统在第一次运行时会自动在添加/删除程序列表中找到自己的列表项,并将其隐藏起来,这样本系统就无法从Windows中卸载。
系统目前已经运行在本校进行的“试点高校网络教育部分基础课程统一考试”的客户端上,取得了良好的效果。该系统不但能运行在网络考试客户端上,也可以运行于各种无纸化考试系统的客户端上。系统目前还有一些不足之处需要改进,如目前只是单机版,过程状态数据没有记录,不利于监考老师的集中管理,还有待于升级成网络版。
参考文献
[1] 李英伟.USB2.0原理与工程开发(第2版)[M].北京:国防工业出版社,2007
[2] 陈启美,丁传锁.计算机USB接口技术[M]. 南京:南京大学出版社,2003.
[3] 薛园园. USB应用开发技术大全[M].北京: 人民邮电出版社,2007.
[4] 肖踞雄,翁铁成. USB技术及应用设计[M].北京:清华大学出版社,2003.

1 2 3

关键词: 作弊 方法研究 防止 系统 考试 网络

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版