鍵盤操作記錄軟件 記錄員鍵盤



文章插圖
鍵盤操作記錄軟件 記錄員鍵盤

文章插圖
本文將詳細討論一個鍵盤監視器的C++/c#開發過程并針對反窺探提出一些建議,希望讀者理解基于鉤子技術的窺探軟件的工作原理以便更好地對自己的軟件加以保護 。
基于軟件的鍵盤事件記錄器是一個嚴重的安全威脅,因為它們通過捕獲擊鍵操作來監控用戶的行動 。監控器可以用于一些惡意的行為,諸如盜竊信用卡號碼等 。擊鍵記錄器是Trojans病毒的個基本組成部分,它們在后臺安靜地運行 。伺機捕獲用戶的擊鍵操作 。擊鍵事件被保存在經過良好隱藏的文件中,通過電子郵件或者FTP方式發送給窺探者 。下面是一個簡單的、直接使用鉤子技術實現的例子 。
鍵盤監視器體系結構
鍵盤監視器由3個模塊組成:主模塊、鉤子過程和FTP模塊 。主模塊負責安裝一個全局鉤子過程 。該鉤子的任務是把每次按鍵事件向主模塊匯報,由主模塊把所有的擊鍵保存到一個文件中 。當記錄文件達到預定的大小時,主模塊命令FTP模塊把記錄文件上載給一個FTP服務器 。3個模塊間的通訊是通過Windows消息機制實現的,如圖1所示 。
一個系統范圍的鉤子實際上是一個函數,它安裝在當前運行的所有進程中.在被監視消息到達目標window過程之前予以監控 。鉤子過程用于監控系統中的各種類型的事件,例如擊鍵,等等 。可以通過調用Win:32 API函數SetWindowsHookEx來安裝一個鉤子過程,并指定調用該過程的鉤子類型 。一個WH_CBT鉤子過程在窗口取得焦點并在擊鍵事件從系統;肖息隊列被清除之前調用 。所有桌面應用程序都在自己的上下文中調用一個全局的鉤子過程.所以該鉤子過程必須駐留在一個獨立于應用程序的DLL中來安裝鉤子過程 。
一段DLL共享內存區域實際上是一個所有的DLL實例都可以看到的內存變量 。主模塊把它的窗口句柄保存在鉤子DLL的共享內存區域中,該DLL使所有的鉤子過程實例能夠把窗口消息郵寄回主模塊中 。鉤子過程共享內存區域并輸出函數
函數的主模塊代碼如下
一個間諜程序為了防止自己被探測到,就必須隱藏好自己的蹤跡 。它們主要涉及3個技術區域任務管理器、防火墻、文件系統 。我們在這里介紹前兩個 。
任務管理器盜竊
ADS(Alternate Data Streams)是一項NTFS文件系統特性,它能使你把文件數據送于存在的文件中而不影響它們的功能,資源管理器等瀏覽工具對它們的顯示,帶有ADS的文件用本地文件瀏覽技術幾乎是不可能檢測到的 。一旦文件被注入該項特性,ADS即可被諸如傳統的命令type等執行 。在激活時.ADS執行體以原始文件的方式出現并運行可以用Windows資源管理器等進程觀察器來試驗 。使用這種技術后,不僅能隱藏一個文件.而且能隱藏個非法進程的執行體部分 。事實上,如果安裝了NTFS系統,你是不可能本地探測出以ADS方式隱藏的文件的 。ADS特性不能夠被取消(dlsabled).目前為止還沒有辦法來針對用戶已經對其具有存取權限的文件限制這種特性 。示例程序為了簡明目地沒有使用ADS 。你可以用下列方式手工操作ADS 。
防火墻盜竊
大多數的防火墻軟件都能探測和阻攔不經授權的程序接入因特網 。主模塊通過使用FTP模塊把記錄文件上載到一個FTP服務器 。防火墻通過把FTP模塊DLL注入到另外一個已經安裝的應用程序中來實現盜竊 。DLL注入意味著強制一個不能被掛起的進程必須接受一個自己從來沒有要求的DLL文件 。示例中,我選擇把FTP模塊注八或者Internet Explorer或者FireFox 。DLL注入將會越過大多數防火墻軟件的檢測.特別在FTP服務器在監聽80端口時 。鉤子過程DLL (它由函數SetWindowsHookEx自動加載進入所有正運行進程)檢查是被裝入到Internet Explorer還是FireFox并加載(用LoadLibrary)了FTP模塊DLL 。從DliMain中調用LoadLibrary函數是不允許的,因此DIIMain設置了一個布爾變量來讓鉤子過程調用LoadLibrary庫函數 。
下面是模塊DlIMain中的鉤子過程
把監視程序加入到下列注冊表鍵處將使得它能夠在系統啟動時一起啟動示例程序把spy.exe作為一項新注冊表值加入 。鍵盤監視的防范
下面介紹兩種簡單的技術來幫助你的應用程序反擊基于鉤子技術的鍵盤監視程序.具有防范監視功能的密碼編輯控件 。如圖2所示 。
免于監視的編輯控件將針對每次用戶擊鍵生成一個模擬的隨機擊鍵串 。監視程序將截獲用戶的擊鍵和偽擊鍵.這樣一來使它很難或者不可能檢索實際的輸入的文本 。用戶輸入被存儲于一個成員變量中,應用程序可以容易地通過編輯控件存取該變量的值 。本例中的偽擊鍵是通過調用Win32 APISendlnput來實現的 。下面的代碼實現了兩個控件 。一個MFC版本 。一個.NET版本 。
該編輯安全的控件假定函數Sendlneut生成擊鍵的速度快于用戶擊鍵的速度,這可能導致編輯安全的控件在較慢的機器上返回錯誤的用戶數據,特別是在運行c#實現版本時 。先看VC++ MFC版本的CsafeEdlt類:
【鍵盤操作記錄軟件 記錄員鍵盤】用c#實現的SafeEdit類
SpyRemover類如圖3所示 。
基于鉤子技術的監視程序依賴于它們的鉤子過程DLL 。將鉤子DLL從應用程序進程中移去,將使注入該應用程序的窺探程序失去窺探擊鍵的功能 。示例程序使用類SpyRemover來移去鉤子DLL文件 。SpyHemover構造器接收個“授權模塊“的列表 。如果一個模塊只是裝入到一個應用程序中,但是沒有出現在該列表中,則被認為是沒有授權的 。SpyRemover通過枚舉所有的應用程序進程模塊來探測未經授權的模塊 。
小結
本文以軟件保護為背景,詳細討論了一個鍵盤監視器的開發并針對反監視提出了一些建議 。希望讀者理解基于鉤子技術的窺探軟件的工作原理.更好地針對自己的軟件加以保護