Delphi Hook API 已疯狂
作者: yangyxd 转载请注明出处 http://hi.baidu.com/yangyxd 2009-3-12
论坛里有关于HOOK API的贴子, 但其实现在方式显示得麻烦, 其实现在拦截API一般不用那种方式, 大都采用inline Hook API方式。其实也就是直接修改了要拦截的API源码的头部,让它无条件跳转到我们自己的处理过程。
不多说别的了,开始我们自己的Hook API吧。
我们今天要拦截的API如下:
MessageBoxA、MessageBoxW、MessageBeep 和 OpenProcess 。
首先,大家都知道要在整个系统范围中拦截,需要使用Dll来完成。现在我们打开Delphi 2009,新建一个Dll工程:hookDll。需要说明的是,Delphi是完全面向对象的编程语言,所以我们不要浪费,这个Dll打算用类的方式完成。于是,在新建的DLL工程中在添加一个Unit Pas,命名为unitHook, 用来写拦截类的处理。unitHook.pas中的代码如下:
unit unitHook;
interface
uses
Windows, Messages, Classes, SysUtils;
type
//NtHook类相关类型
TNtJmpCode=packed record //8字节
MovEax:Byte;
Addr:DWORD;
JmpCode:Word;
dwReserved:Byte;
end;
TNtHookClass=class(TObject)
private
hProcess:THandle;
NewAddr:TNtJmpCode;
OldAddr:array[0..7] of Byte;
ReadOK:Boolean;
public
BaseAddr:Pointer;
constructor Create(DllName,FuncName:string;NewFunc:Pointer);
destructor Destroy; override;
procedure Hook;
procedure UnHook;
end;
implementation
//==================================================
//NtHOOK 类开始
//==================================================
constructor TNtHookClass.Create(DllName: string; FuncName: string;NewFunc:Pointer);
var
DllModule:HMODULE;
dwReserved:DWORD;
begin
//获取模块句柄
DllModule:=GetModuleHandle(PChar(DllName));
//如果得不到说明未被加载
if DllModule=0 then DllModule:=LoadLibrary(PChar(DllName));
//得到模块入口地址(基址)
BaseAddr:=Pointer(GetProcAddress(DllModule,PChar(FuncName)));
//获取当前进程句柄
hProcess:=GetCurrentProcess;
//指向新地址的指针
NewAddr.MovEax:=$B8;
NewAddr.
相关文档:
由于需要在窗体中设定一个日期时间,出去通用型考虑,采用了TDateTimePicker控件。
因为这个控件的默认状态只能显示日期,造成使用上的不便,所以需要做如下的设定:
在控件的format属性栏里设置如下值:yyyy-mm-dd hh:mm:ss;
设定完成后的时间为当前的系统时间,不能通过弹出日历设定,只能在文本框中设定。 ......
TreeView由节点构成,建树通过对TreeView.items属性进行操作。Items是一个TTreeNodes对象,这是一个TTreeNode集。
一、针对TTreeNodes,也就是 TreeView.Items,有这些属性:
1、count,节点个数。
2、item[index] ,通过index得到节点。
二、针对TTreeNodes,也就是 TreeView.Items,常用的添加节点的操作有:
Add ......
這個界面是用PB做的,delphi如何設實現呢,想用dbControlGrid來實現(好像也做不到),
問題是如何實現不同生產類別顯示出來的方式不一樣
......
一.编写 RC 脚本文本
用记事本或其它文本编辑器编写一个扩展名为“.rc”的文件。格式如下:
AVI 无声动画
BITMAP 位图文件
CURSOR 光标文件
ICON 图标文件
WAVE 声音文件
以上所列均为标准资源类型,也可以给资源自定义一个类型,如:“mytype ......