DLL和HOOK得问题(高手请进)

caesar_ma1 2002-12-15 10:18:58
我这里有代码,有不明白之处,请高手看看:
有现成的,你不用费力了,呵呵。
library HKTest;

uses
HKProc in 'HKProc.pas';

exports
EnableHotKeyHook,
DisableHotKeyHook;

begin
hNextHookProc := 0;//这段初始值放在这里起到什么作用,它得执行顺序(和函数比)
procSaveExit := ExitProc;
ExitProc := @HotKeyHookExit;
end.
unit HKProc;

interface

uses
Windows, Messages;

var
hNextHookProc: HHook;
procSaveExit: Pointer;

function KeyboardHookHandler(iCode: Integer;
wParam: WPARAM;
lParam: LPARAM): LRESULT; stdcall; export;
function EnableHotKeyHook: BOOL; export;
function DisableHotKeyHook: BOOL; export;
procedure HotKeyHookExit; far;

implementation

function KeyboardHookHandler(iCode: Integer;
wParam: WPARAM;
lParam: LPARAM): LRESULT; stdcall; export;
const
_KeyPressMask = $80000000;
begin
Result := 0;
If iCode < 0 Then
begin
Result := CallNextHookEx(hNextHookProc, iCode, wParam, lParam);
Exit;
end;
// 侦测 Ctrl + B 组合键
if ((lParam and _KeyPressMask) = 0) and
(GetKeyState(vk_Control) < 0) and (wParam = Ord('B')) then
begin
Result := 1;
WinExec('Notepad.exe', sw_Normal); // 记事本
end;
end;

function EnableHotKeyHook: BOOL; export;
begin
Result := False;
if hNextHookProc <> 0 then Exit;
// 挂上 WH_KEYBOARD 这型的 HOOK, 同时, 传回值必须保留下
// 来, 免得 HOOK 呼叫链结断掉
hNextHookProc := SetWindowsHookEx(WH_KEYBOARD,
KeyboardHookHandler,
HInstance,
0);
Result := hNextHookProc <> 0;
end;

function DisableHotKeyHook: BOOL; export;
begin
if hNextHookProc <> 0 then
begin
UnhookWindowshookEx(hNextHookProc); // 解除 Keyboard Hook
hNextHookProc := 0;
MessageBeep(0);
MessageBeep(0);
end;
Result := hNextHookProc = 0;
end;

procedure HotKeyHookExit;
begin
// 如果忘了解除 HOOK, 自动代理解除的动作
if hNextHookProc <> 0 then DisableHotKeyHook;
ExitProc := procSaveExit;
end;

end.


3. 启动 Delphi 2.0

4. 开启 HKTest.DPR, 然後 Project | Build All 以产生 HKTest.DLL

5. File | New Application 开启一个新的专案

6. 将此专案 unit1 与 project1 存档, 请注意: 请存到与 HKTest.DLL
相同的目录中.

7. 在 Form1 上安置二个 TButton, 并撰写 OnClick 程式, 同时,
在 implementation 节中宣告 EnableHotKeyHook() 与
DisableHotKeyHook(), 修改後的程式应类似:
...
...
implementation

{$R *.DFM}

function EnableHotKeyHook: BOOL; external 'HKTEST.DLL';
function DisableHotKeyHook: BOOL; external 'HKTEST.DLL';

procedure TForm1.Button1Click(Sender: TObject);
begin
if EnableHotKeyHook then
ShowMessage('HotKey Testing...');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
if DisableHotKeyHook then
ShowMessage('HotKey Testing..., DONE!!');
end;

end.

问题1:在DLL中设置得初始值得作用,它得执行是在什么时候?
问题2:如果把函数编在DLL中,改动方法是什么?我尝试过,总是不成功
问题3:如果我要屏蔽ALT+F4,怎么找到ALT得代码?
...全文
60 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
fwwxxjingling 2002-12-16
  • 打赏
  • 举报
回复
收藏,呵呵!
netfyee 2002-12-15
  • 打赏
  • 举报
回复
1.在加载dll时执行.
2.改动什么啊?不知道你问的什么意思?
3.const WH_KEYBoard_LL //系统键盘钩子
hNextHookProc := SetWindowsHookEx(WH_KEYBOARD_LL,
KeyboardHookHandler,
HInstance,
0);
caesar_ma1 2002-12-15
  • 打赏
  • 举报
回复
ok,送分
yang6130 2002-12-15
  • 打赏
  • 举报
回复
//问题3:如果我要屏蔽ALT+F4,怎么找到ALT得代码?
//ALT ->VK_MENU
(GetKeyState(vk_Menu) < 0) and (wParam = 'VK_F4') then
caesar_ma1 2002-12-15
  • 打赏
  • 举报
回复
在代码当中函数的实现在单元文件里面,我想把它做到DLL里面去不想被别人看到原代码,怎么实现,就这个例子给出实现步骤!谢谢,高分送上!第三个问题你好像没有说明白,而且我感觉是画蛇添足?不好意思,一人之见
看雪学堂经典整理, 【专题四】Rootkit的学习与研究 Rootkit是什么?估计很多朋友并不明白,简单的说,Rootkit是一种特殊的恶意软件,它的功能是在安装目标上隐藏自身及指定的文件、进程和网络链接等信息,比较多见到的是Rootkit一般都和木马、后门等其他恶意程序结合使用。Rootkit通过加载特殊的驱动,修改系统内核,进而达到隐藏信息的目的。技术是双刃剑,我们研究它的目的在于,透过我们的研究,用这项技术来保护我们的系统,使我们的系统更加健壮,充分发挥这个技术的正面应用。 对于ROOTKIT专题的研究,主要涉及的技术有如下部分: 1. 内核hook 对于hook,从ring3有很多,ring3到ring0也有很多,根据api调用环节递进的顺序,在每一个环节都有hook的机会,可以有int 2e或者sysenter hook,ssdt hook,inline hook ,irp hook,object hook,idt hook等等。在这里,我们逐个介绍。 1)object hook 2)ssdt hook 3)inline-hook 4)idt hook 5)IRP hook 6)SYSENTER hook 7)IAT HOOK 8)EAT HOOK 2. 保护模式篇章第一部分: ring3进ring0之门 1)通过调用门访问内核 2)通过中断门访问内核 3)通过任务门访问内核 4)通过陷阱门访问内核 3。保护模式篇章第二部分:windows分页机制 1)windows分页机制 4。保护模式篇章第三部分:直接访问硬件 1)修改iopl,ring3直接访问硬件 2)追加tss默认I/O许可位图区域 3)更改tss I/O许可位图指向 5。detour 修改函数执行路径,可用于对函数的控制流程进行重定路径。 1)detour补丁 6. 隐身术 1)文件隐藏 2)进程隐藏 3)注册表键值隐藏 4)驱动隐藏 5)进程中dll模块隐藏 6)更绝的隐藏进程中的dll模块,绕过IceSword的检测 7)端口隐藏 7。ring0中调用ring3程序 1) apc方式 2) deviceiocontrol 方式 8。进程线程监控 1)监控进程创建 2)杀线程 3)保护进程和屏蔽文件执行 9。其他 1)获取ntoskrnl.exe模块地址的几种办法 2)驱动感染技术扫盲 3)shadow ssdt学习笔记 4)高手进阶windows内核定时器之一 5)高手进阶windows内核定时器之二 6)运行期修改可执行文件的路径和Command Line 7)查找隐藏驱动 8)装载驱动的几种办法 9)内核中注入dll的一种流氓方法 10)另一种读写进程内存空间的方法 11)完整驱动感染代码 12)Hook Shadow SSDT 13)ring0检测隐藏进程 对于rootkit的研究,涉及到的内容比较多,需要在充分学习理解这些技术的前提下,透过目前网络上出现的一些rootkit病毒,木马来进行分析,做到活学活用。因此,对于本版块的思路很清晰,首先是基础技术理论的研究,由于目前windows还是主流的操作系统,因此,我们主要研究windows下的rootkit,这个课题是一个长期的,对这个课题感兴趣的朋友,欢迎大家一起参与讨论。 声明: 转贴请注明看雪学院。

1,184

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧