高分求解:监控系统中某个进程(先出300大洋)(300分)

  • 主题发起人 主题发起人 kucio
  • 开始时间 开始时间
K

kucio

Unregistered / Unconfirmed
GUEST, unregistred user!
我想监控某个具体的进程(譬如flashget.exe)的一举一动,包括它都访问了系统中哪些文件,
访问了哪些注册表项等等。进而采取一些行动,例如它要在c:/下生成一个文件,我截获到消息
后通过程序使它把这个文件生成到d:/下,他要修改一个注册表键值而我偏偏不让他修改。
该如何做?
先出300分,只要回答的好,分数绝对不成问题。
希望各位富翁能尽量回答的详细一些,不要只言片语的,谢谢
 
这是别人的一段程序,还有些问题,我没有调试完

unit Setlong;

interface

uses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
Forms, Dialogs, Buttons, StdCtrls, ExtCtrls;
const
wTestMessage=WM_USER+200;

type
TInspecterform = class(TForm)
Panel1: TPanel;
Label1: TLabel;
edtn_Targetwindow: TEdit;
spb_Locate: TSpeedButton;
lbl_TargetHwnd: TLabel;
grb_Inspecter: TGroupBox;
Mmo_Inspecter: TMemo;
spb_Setproc: TSpeedButton;
spb_sendTestmessage: TSpeedButton;
spb_Unhook: TSpeedButton;
lbl_WndProcAddress: TLabel;
procedure spb_LocateClick(Sender: TObject);
procedure spb_SetprocClick(Sender: TObject);
procedure spb_sendTestmessageClick(Sender: TObject);
private
{ Private declarations }
procedure Wndproc(var Msg :TMessage);override;
public
{ Public declarations }
end;
var
Inspecterform: TInspecterform;
TargetHwnd :Integer;
TargetWindowproc :Pointer;
implementation
{$R *.DFM}

procedure TInspecterform.Wndproc(var Msg:TMessage);
begin
if Msg.Msg = wTestMessage then
ShowMessage('i got it');
inherited Wndproc(Msg);
end;

function InspecterWndProc(Handle:Hwnd;Msg,Wparam:Word;Lparam:LongInt):LongInt;
begin
{后来,这里我什么都不写,直接把消息传给被监控程序的wndproc,不过还是会报错}
Result := CallWindowproc(TargetWindowProc,TargetHwnd,Msg,Wparam,lparam);
end;

procedure TInspecterform.spb_LocateClick(Sender: TObject);
begin
{TargetHwnd是被监控程序的Hwnd}
TargetHwnd := FindWindow('TmainForm','mainform');
if TargetHwnd =0 then begin
ShowMessage('Can not Find the Target Window');
Exit;
end
else
lbl_TargetHwnd.Caption := 'TargetWindow Handle is : '+IntToHEX(TargetHwnd,4);
end;

procedure TInspecterform.spb_SetprocClick(Sender: TObject);
begin
TargetWindowproc := Pointer(SetWindowLong(TargetHwnd,GWL_WNDPROC,Longint(@InspecterWndProc)));
end;
procedure TInspecterform.spb_sendTestmessageClick(Sender: TObject);
begin
PostMessage(TargetHwnd,wTestMessage,0,0);
end;

end.
 
大家继续
 
要做到这些
监控应用消息是没有用的
都需要写驱动
比如一个进程的文件操作需要文件系统钩子
注册表需要注册表钩子
具体写要对操作系统和驱动都比较了解才行
 
谁能给出满意答案,我再赞助500分
 
是呀是呀,分数多多
如果没有完整的解决方案,提供一些相关技术资料也行呀
 
这个有两个C源码可用的, 一个是filemon 另一个是regmon 好象是这样的, 我手头没有, 你搜索一下了, 作者主页上有提供的,
 
关注,分不够我可以赞助500
 
www.sysinternals.com
写vxd or sys
 
如果只是监控user mode的进程的话,还有一个方法就是
用 API Hook,给你一个连接吧
http://www.anticracking.sk/EliCZ/export/AH56.ZIP
注意,这个API Hook的开发包只能用于免费软件,做商
业软件的话要请和作者联系。我知道国内的一个共享软
件作者用了没有license的控件,被整的很惨的。
 
驱动级的问题!
 
Hongjiang先生,能不能详细讲讲那个库的授权问题,谢谢!
 
FileMon,RegMon可以监视某个进程对文件和注册表的访问。不过都是用了Vxd。

如果是监视文件复制,可以用copyHook
 
使用TwinList控件。
 

Similar threads

S
回复
0
查看
841
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
824
SUNSTONE的Delphi笔记
S
后退
顶部