怎样让自己的程序进程像瑞星,诺顿那样能看却不能杀死呀?(50分)

P

pomuyu

Unregistered / Unconfirmed
GUEST, unregistred user!
希望各位高手最好能给出详例说明,小弟是个十足的菜鸟,怕听不懂天籁之音:)
 
好象要注册为服务才行。
 
呵呵,我也听说过 可到底怎么才能注册呀?
 

我在网站上找到的!!可能有用
Delphi编写后台监控软件
作者: 评价: 上站日期: 2002-07-30
内容说明:
来源:
--------------------------------------------------------------------------------
  后台监控软件,为了达到隐蔽监控的目的,应该满足正常运行时,不显示在任务栏上,在按Ctrl+Alt+Del出现的任务列表中也不显示,管理员可以通过热键调出隐藏的运行界面。要作到这些,必须把当前进程变为一个系统服务,并且定义全局热键。
  一、把当前进程变为一个系统服务:
  目的是在任务列表中把程序隐藏起来。调用API函数RegisterServiceProcess实现。
  二、定义全局热键(本例中定义热键Ctrl+Del+R),步骤:
  1、定义捕获Windows消息WM_HOTKEY的钩子函数,即:procedure WMHotKey(var Msg : TWMHotKey);
message WM_HOTKEY;

  2、向Windows加入一个全局原子 Myhotkey: GlobalAddAtom(’MyHotkey’), 并保留其句柄。
  3、向Windows登记热键:调用API函数RegisterHotKey实现。
  三、源程序:
unit Unit1;
interface
uses
Windows, Messages, Forms, Dialogs, Classes, Controls, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormClose(Sender: TObject;
var Action: TCloseAction);
private
{热键标识ID}
id: Integer;
procedure WMHotKey(var Msg : TWMHotKey);
message WM_HOTKEY;
{ Privat-Declarations}
public
{ Public-Declarations}
end;

var
Form1 : TForm1;
implementation
const RSP_SIMPLE_SERVICE=1;
function RegisterServiceProcess (dwProcessID, dwType: DWord) : DWord;
stdcall;
external ’KERNEL32.DLL’;
{$R *.DFM}
{捕获热键消息}
procedure TForm1.WMHotKey (var Msg : TWMHotKey);
begin

if msg.HotKey = id then

ShowMessage(’Ctrl+Alt+R键被按下!’);
form1.Visible :=true;
end;

procedure TForm1.FormCreate(Sender: TObject);
Const
{ALT、CTRL和R键的虚拟键值}
MOD_ALT = 1;
MOD_CONTROL = 2;
VK_R = 82;
begin

{首先判断程序是否已经运行}
if GlobalFindAtom(’MyHotkey’) = 0 then

begin

{注册全局热键Ctrl + Alt + R}
id:=GlobalAddAtom(’MyHotkey’);
RegisterHotKey(handle,id,MOD_CONTROL+MOD_Alt,VK_R);
end
else

halt;
end;


  {把当前进程变为一个系统服务,从而在任务列表中把程序隐藏起来}

procedure TForm1.Button1Click(Sender: TObject);
begin

RegisterServiceProcess(GetCurrentProcessID,RSP_SIMPLE_SERVICE);
form1.Hide;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin

close;
end;

{退出时释放全局热键}
procedure TForm1.FormClose(Sender: TObject;
var Action: TCloseAction);
begin

UnRegisterHotKey(handle,id);
GlobalDeleteAtom(id);
end;

end.


  四、说明:
  在后台监控软件中使用以上功能,可真正实现隐蔽运行,热键调出,便于管理员进行管理。程序在Win98,Delphi5.0中运行通过。



 
谢谢 handong,我可以引用你的思路编程.
 
首先感谢handong, 不过小弟还有几个问题想要请教:
1。如果针对的是windows 2000 server or profession系统,不知还有没有用
2。 这种方法在程序启动时仍会存在在任务列表,如果被人发现有此程序,
在开机启动时很容易被杀掉(好像原来美萍的bug就源于此)。不知有没有
程序一开始就隐藏的方法?

3。其实我的问题是如何才能像那些杀毒软件一样,你虽然能看到却杀不死!
不过如果上面两个问题能解决的话,我就可以结贴了。还请赐教!
 
unit Uni;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs;
type
TwzxService = class(TService)
procedure ServiceContinue(Sender: TService;
var Continued: Boolean);
procedure ServicePause(Sender: TService;
var Paused: Boolean);
procedure ServiceStart(Sender: TService;
var Started: Boolean);
procedure ServiceStop(Sender: TService;
var Stopped: Boolean);
private
{ Private declarations }
public
function GetServiceController: TServiceController;
override;
{ Public declarations }
end;

var
wzxService: TwzxService;
implementation
{$R *.DFM}
procedure ServiceController(CtrlCode: DWord);
stdcall;
begin
wzxService.Controller(CtrlCode);
end;

function TwzxService.GetServiceController: TServiceController;
begin
Result := ServiceController;
end;

procedure TwzxService.ServiceContinue(Sender: TService;
var Continued: Boolean);
begin
Continued:=true;
end;

procedure TwzxService.ServicePause(Sender: TService;
var Paused: Boolean);
begin
Paused:=true;
end;

procedure TwzxService.ServiceStart(Sender: TService;
var Started: Boolean);
begin
Started:=true;
end;

procedure TwzxService.ServiceStop(Sender: TService;
var Stopped: Boolean);
begin
Stopped:=true;
end;
 
在WIN2000下面几乎不可能,现有的办法(我知道的)就是写VXD,
还有就是将自己的进程隐藏在现有的进程下面(如EXPLORER。EXE)。
我这里有一份代码,但是只是DLL进程的隐藏。EXE的隐藏好象还需要更多的技术。
 
不能杀死在2000可以作到。
如果你有直接IP地址。我可以帮助把上面写的程序击活杀不死
 
呵呵 偶是通过局域网上的 没有固定的IP 不知还能不能激活?
另 难道在自己的机子上不能激活吗?
 
瑞星、诺顿看得见杀不死?可以KILL,我就经常这样
 
2000下注册为后台服务好象可以
RegisterServiceProcess在2000以上没有这个API
 
to 太阳火
是不是先停止服务,再KILL啊 我好像也用过
to sephil
能不能详细一些呀?注册服务,早闻其声,不见其面呀!

 
//to 太阳火
// 是不是先停止服务,再KILL啊 我好像也用过
我是指用WIN自带的进程管理器杀掉他。我没有编程杀掉他。
 
以前在 CSDN 上好像看到过有关进程隐藏的文章,大概意思是将你的进程以线程的方式在其他进程(如Explore)下
运行,要杀掉目标线程就只能杀掉宿主进程,你总不能杀掉 Expoler 吧?不过例程都是 C 的,98 和 2000 都能用,具
体的我都忘了,你还是到网上查查吧!
 
密切关注,我也想知道。[:D]
 
我也想知道啊~~
 
谁说诺顿、瑞星杀不死阿,在服务里把他停了就可以了。作服务程序在Delphi中是很简单的事情阿,就像吃饭、喝水一样,不用学的。
 
很无聊的问题.
RegisisterServiceProcess 是废物了.98就快没了..
!!任何的服务程序都是不可以直接关闭的...
 
顶部