直接訪問鍵盤控制芯片獲取鍵盤記錄.doc

直接訪問鍵盤控制芯片獲取鍵盤記錄.doc

ID:50894415

大?。?36.00 KB

頁數(shù):7頁

時間:2020-03-15

直接訪問鍵盤控制芯片獲取鍵盤記錄.doc_第1頁
直接訪問鍵盤控制芯片獲取鍵盤記錄.doc_第2頁
直接訪問鍵盤控制芯片獲取鍵盤記錄.doc_第3頁
直接訪問鍵盤控制芯片獲取鍵盤記錄.doc_第4頁
直接訪問鍵盤控制芯片獲取鍵盤記錄.doc_第5頁
資源描述:

《直接訪問鍵盤控制芯片獲取鍵盤記錄.doc》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫

1、直接訪問鍵盤控制芯片獲取鍵盤記錄鍵盤是用戶和機(jī)器之間主要的硬件接口,看看鍵盤上的那些鍵就可知道它有多么的復(fù)雜了。鍵盤是我們隱私的源泉,我們各種信息的傳遞都要通過它。作為用戶表現(xiàn)信息的媒介,很多懷有惡意目的的人都想截取我們的鍵盤輸入。目前有很多方法可以做到,比如全局鉤子、GetKeyboardStatus()、驅(qū)動過濾鉤子等,但是如果要截取像QQ這種Hook鍵盤中斷處理程序的保護(hù)技術(shù),這些方法都顯得無能為力。為此,我將為大家介紹一種直接訪問鍵盤控制芯片的方法,來實現(xiàn)對鍵盤輸入數(shù)據(jù)的最底層的讀取。如果我們知道了硬件的輸入輸出地址

2、,就可以直接對它們進(jìn)行訪問了。鍵盤上有一個稱為鍵盤編碼器的處理器(Intel8048或兼容芯片)專門用來掃描收集所有按鍵按下和松開的狀態(tài)數(shù)據(jù)(即掃描碼)。當(dāng)一個鍵被按下時,鍵盤發(fā)送的掃描碼稱為接通掃描碼(Makecode),或簡稱為接通碼;當(dāng)一個被按下的鍵放開時發(fā)送的掃描碼被稱為斷開掃描碼(Breakcode),或簡稱為斷開碼。主機(jī)鍵盤控制器專門用來對接收到的鍵盤掃描碼進(jìn)行解碼。因為每個按鍵的接通和斷開碼都是不同的,所以鍵盤控制器根據(jù)掃描碼就可以確定用戶在操作哪個鍵了。整個鍵盤上所有按鍵的接通和斷開碼就組成了鍵盤的一個掃描碼

3、集(ScanCodeSet)。根據(jù)電腦的發(fā)展,目前已有三套掃描碼集可供使用,它們分別是第一套掃描碼集,原始XT鍵盤掃描碼集,目前的鍵盤已經(jīng)很少發(fā)送這類掃描碼;第二套掃描碼集,現(xiàn)代鍵盤預(yù)設(shè)使用的掃描碼集,通常稱為AT鍵盤掃描碼集;第三套掃描碼集,PS/2鍵盤掃描碼集,原IBM推出PS/2微處理機(jī)時使用的掃描碼集,已很少使用。AT鍵盤預(yù)設(shè)發(fā)送的是第二套掃描碼集。雖然如此,主機(jī)鍵盤控制器為了與PC/XT機(jī)的軟體兼容起見,仍然會把所有接收到的第二套鍵盤掃描碼轉(zhuǎn)換成第一套掃描碼,因此,我們從鍵盤控制器獲取的通常為第一套掃描碼集。當(dāng)一個

4、鍵被按下時,我們可以從鍵盤控制器接收到一個XT鍵盤接通碼。這個掃描碼僅表示鍵盤上某個位置處的鍵被按下,但還沒有對應(yīng)到某個字符代碼上,接通碼通常都是一個位組寬度。例如,按下鍵“A”的接通碼是30(0x1E)。當(dāng)一個按下的鍵被松開時,從鍵盤控制器端口收到的就是一個斷開碼。對于XT鍵盤(即鍵盤控制器程序設(shè)計端口收到的掃描碼),斷開碼是其接通碼加上0x80。例如,上述“A”鍵的斷開碼就是“0x80+0x1E=0x9E”。表1列出了ScanCodeSet1中的所有掃描碼,我們寫程序時需要用到!表1剩下的問題就是我們?nèi)绾潍@取鍵盤的掃描碼

5、,并且將它們翻譯出來了。比如我們?nèi)绾潍@取掃描碼1E,并且能將它翻譯為A鍵被按下。鍵盤控制芯片給我們使用的PC機(jī)提供了兩個可訪問的I/O端口,一個是0x60,一個是0x64,我們能夠讀取鍵盤緩沖區(qū)中的數(shù)據(jù),也能發(fā)送控制命令。打開設(shè)備管理器,如圖1所示,我們可以清晰地看到它們。0x60為數(shù)據(jù)端口,0x64為命令端口。圖1通常情況下,我們從0x60讀取的數(shù)據(jù)就是鍵盤的掃描碼,而從0x64讀取的數(shù)據(jù)為鍵盤的狀態(tài)字。狀態(tài)字的各位含義如下:Bit7:從鍵盤獲得的數(shù)據(jù)奇偶校驗錯誤;Bit6:接收超時,置1;Bit5:發(fā)送超時,置1;Bit

6、4:為1,鍵盤沒有被禁止。為0,鍵盤被禁止;Bit3:為1,輸入緩沖器中的內(nèi)容為命令,為0,輸入緩沖器中的內(nèi)容為數(shù)據(jù);Bit2:系統(tǒng)標(biāo)志,加電啟動置0,自檢通過后置1;Bit1:輸入緩沖器滿置1,i8042取走后置0;Bit0:輸出緩沖器滿置1,CPU讀取后置0。接下來我們再說一下端口的操作方法。WindowsNT系統(tǒng)是不允許直接操作端口的,只有通過驅(qū)動程序才能實現(xiàn),可供選擇的驅(qū)動程序有免費(fèi)開源的winio、windriver等。由于我的畢業(yè)設(shè)計涉及到視頻采集卡驅(qū)動程序的設(shè)計,所以就以windirver為例來說明端口操作方法

7、了。安裝好windriver之后,在“samplesbasic_io”目錄下有一個basic_io.c,我們可以直接使用它提供的端口操作函數(shù)讀寫端口。注意修改IO_init()函數(shù)添加如下語句:(責(zé)任編輯:admin)WD_LICENSElic;strcpy(lic.cLicense,你的licenseString);WD_License(hWD,&lic);這樣,我們使用的windrier驅(qū)動就去掉了30天試用期限的限制了。它可以提供的函數(shù)如下,有了這些函數(shù),我們就可以直接讀寫端口了。BYTEIO_inp(DWORD

8、dwIOAddr)//從dwIOAddr讀取一個字節(jié)WORDIO_inpw(DWORDdwIOAddr)//從dwIOAddr讀取兩個字節(jié)DWORDIO_inpd(DWORDdwIOAddr)//從dwIOAddr讀取四個字節(jié)voidIO_outp(DWORDdwIOAddr,BYTEbD

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費(fèi)完成后未能成功下載的用戶請聯(lián)系客服處理。