飞禽走兽网络版神仙窝

文章來源:http://www.autooo.net/autooo/elec/tech/2011-05-06/70020.html  |  回到首頁

網絡考試系統中防止U盤作弊方法研究

作者: 發布時間:2011-05-06 09:41:10 來源: 繁體版 訪問數: 5

要: 目前越來越多的高校、教學培訓機構和各種社會考試,采用了網絡考試、網絡在線考試等網絡考試形式的無紙化考試。然而許多考試系統自身尚不具備

摘要:目前越來越多的高校、教學培訓機構和各種社會考試,采用了網絡考試" title="網絡考試">網絡考試" title="網絡考試">網絡考試、網絡在線考試等網絡考試形式的無紙化考試。然而許多考試系統自身尚不具備防止考生使用U盤等移動存儲設備作弊的功能。本文所涉及的系統能完善這樣的功能,考生一旦插入了U盤或其他移動存儲設備后,系統立即顯示一個特殊的界面鎖住屏幕,禁止一切可能的鍵盤操作。這種狀態將一直保持到監考老師在該考生的考試機上解鎖為止。
關鍵詞: 網絡考試; 客戶端; U盤作弊; USB端口監視

    無紙化考試系統的模式通常有單機版模式、C/S模式和B/S模式三種,無認哪種模式均要有客戶端,而考生必須在客戶端上完成其考試內容。目前USB存儲設備特別是U盤的存儲容量大、存取速度快、體積小、價格低廉,普及程度也越來越高,在考試中使用U盤作弊現象時有發生。由于考生在考試過程中使用U盤的隱蔽性極高,監考老師很難發現。目前大多數考試系統的客戶端并沒有對USB端口進行管理的功能。“網絡考試客戶端USB端口監視系統”(后文簡稱系統)就是實現在考試過程對考試客戶端的USB端口進行全程監視,一旦客戶端有USB設備接入,系統即刻鎖屏、封鎖鍵盤,發出使用USB設備的提示警告。本系統經過我校進行的“試點高校網絡教育部分基礎課程統一考試”多次使用實驗表明,該系統在考試過程中能有效地監控USB端口,杜絕了考生使用U盤的現象,從而保證考試的公正、公平和權威性。
1
系統功能要求
    (1)
系統要能識別從計算機任何一個USB端口接入的移動存儲設備,如U盤等設備。對于非存儲類的USB設備,如:USB接口的打印機、掃描儀等,不能誤判作移動存儲設備。
    (2)
鎖屏。一旦有U盤接入,系統能立即響應,并做出相應的處理。用一個無標題、無邊框、無關閉按鈕、最大化顯示的窗體覆蓋在所有窗體和任務欄的前面實現鎖屏。
 (3)封鎖鍵盤。封鎖鍵盤就是使用戶鍵盤上的鍵失效,尤其是一些特殊功能組合鍵,如:Ctrl-Alt-DeleteAlt-TabAlt-EscAlt-F4Windows-Key
 (4)關閉任務欄和開始菜單。
 (5)封鎖狀態解鎖。系統有提供給系統管理員或監考人員解鎖的功能,解鎖時要輸入特定的解鎖密碼。
 (6)解鎖密碼管理功能。系統提供由系統管理員使用的密碼維護、修改、重置和忘記密碼的處理功能。
2
系統總體設計
2.1
系統組成
 系統主要由USB端口監視系統和密碼維護系統兩部分組成。其組成結構如圖1所示。

2.2 USB端口實時監視系統組成結構
    USB
端口實時監視系統由核心模塊、USB端口監視模塊、屏幕、鍵盤加鎖模塊、鍵盤解鎖模塊、記錄/讀取系統USB使用狀態模塊、密碼解鎖處理模塊和重啟處理模塊組成。其組織結構如圖2所示。

2.3 密碼維護系統組成結構
    
密碼維護系統由密碼修改和使用初始密碼兩部分組成。如圖3所示。

    密碼修改提供給管理員修改維護解鎖密碼。遺忘解鎖密碼時,先使用初始密碼功能將解鎖密碼設置為初始密碼,然后再修改成指定密碼。
   
該系統為一個相對獨立的子系統,由系統管理員掌管使用。
3 USB
端口監視系統設計
   
為了不和考試系統爭搶資源,系統被設計成后臺運行方式,以中斷方式獲取機器USB端口狀態變化。采用進程保護技術進行系統自我保護,使系統在運行時不被考生強行終止,提高了系統的安全性。當考生在考試過程中插入U盤時,系統自動彈出鎖屏窗體,并在窗體中顯示考生已使用U盤的提示信息。鎖住鍵盤,記錄U盤的狀態信息,即使考生撥掉U盤,系統自鎖也不撤消。若考生用RESET開關強行重啟機器或強行關機后再開機,當Windows系統啟動完成后,系統仍然處于自鎖狀態。只有當監考老師用解鎖命令和解鎖密碼解鎖后,系統才恢復到正常狀態。
3.1 USB
端口監視模塊設計
    USB
端口監視模塊是系統的核心模塊之一,也是系統的重要模塊。設計流程如圖4所示。

    系統運行后,模塊即進入工作狀態,為了盡量少占用系統資源,模塊以中斷方式獲取機器USB端口狀態變化,一旦發現端口接入USB移動存儲設備隨即進行處理。
   
當發現端口有USB設備接入后,隨即讀取此設備的設備類型特征碼。根據其設備類型特征碼判斷此設備是否是USB移動存儲設備。如果是移動存儲設備,則調用其后續模塊。否則,不做處理。

3.2 鎖屏設計
    
鎖屏模塊是使系統呈現在考生面前的模塊。設計流程如圖5所示。

    模塊被調用后,首先隱藏任務欄,關閉開始菜單,然后以白色、無邊框、無標題欄、無關窗體控制按鈕的窗體形式顯示在所有窗體的最前面,遮蓋住Windows的任務欄,并在窗體中央顯示“正在使用USB設備... 系統自鎖。請與監考老師聯系”字樣,提示考生由于插入了U盤從而系統自鎖了。
3.3
鎖鍵盤設計
   
鎖鍵盤模塊的執行結果呈現在考生面前的是鍵盤處于失效。本模塊被調用后,將封鎖鍵盤上的所有字母鍵、功能鍵和組合鍵,唯一開放的鍵是F12鍵,是輸入解鎖密碼的入口鍵。
    
其功能是:
    (1)
封鎖鍵盤上的所有單鍵,只留F12鍵。
  (2)封鎖Ctrl-Alt-Delete組合鍵,禁止打開Windows任務管理器。
  (3)封鎖Windows-Key(微軟鍵),禁止打開開始菜單。
  (4)封鎖Alt-F4組合鍵,禁止用此鍵關閉本程序。
  (5)封鎖Alt-TabAlt-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.   (收稿日期:2010-10-21)

飞禽走兽网络版神仙窝