HOOK 监控任务管理器
思路:其实比较简单,还是利用 DLL,首写跟据 API 函数 OpenProcess 与 TerminateProcess 的结构自已编
写两个与这两个 API 一样的函数,再利用 GetProcAddress 获取系统的那两个 API 函数入口地址,最后用
WriteProcessMemory 将你写的函数的地址替换掉原来系统的函数地址。这样所有调用这两系统 API 都将先
执行你的函数。
如果只 Hook 其中一个函数比如只 hookOpenProcess 的话那么任务管理器将不能获取到你的进程信息那么
会出错。如果只 hookTerminateProcess 那样也不行,因为一个进程的句柄在本进程与别的进程中是不一样
的,所以如果你不知道自已进程在别人进程中的句柄那么是没办法 hookTerminateProcess 的。
本例中首先利用 OpenProcess 获取自已在别的进程中的句柄,然后 hookTerminateProcess 进程监控,如果
发现有程序调用 TerminateProcess 并且所结束的对象正是自已,那么就给出提示窗口。
貌似讲了一大堆废话。。。还是看代码直接
------------------------------------------------调用部分
unitUnit1;
interface
uses
Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,
Dialogs,StdCtrls;
type
TForm1=class(TForm)
Button1:TButton;
Button2:TButton;
procedureButton1Click(Sender:TObject);
procedureButton2Click(Sender:TObject);
private
{Privatedeclarations}
public
{Publicdeclarations}
end;
var
Form1:TForm1;
procedureStartHook(pid:DWORD);stdcall;external'hookdll.dll';
procedureEndHook;stdcall;external'hookdll.dll';
implementation
{$R*.dfm}
procedureTForm1.Button1Click(Sender:TObject);
begin