现在的位置: 首页 > 综合 > 正文

delphi编程将当前进程变为一个系统服务(详细)

2014年02月26日 ⁄ 综合 ⁄ 共 1879字 ⁄ 字号 评论关闭

 现在很多木马病毒以及流氓插件都注册成系统服务了,现在一起来看看是如何实现这个功能的!

  一、把当前进程变为一个系统服务:

  目的是在任务列表中把程序隐藏起来。调用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.

  四、说明:

  在后台监控软件中使用以上功能,可真正实现隐蔽运行,热键调出,便于管理员进行管理。

抱歉!评论已关闭.