木马编程DIY (Delphi版) - 第1篇 功能实现

注:《木马编程DIY》由冷风(chinafe)创作完成。本文在其基础上将原文中的C++源代码修改为Delphi源代码,并加以相关说明。感谢冷风(chinafe)的无私奉献。

1. 锁定鼠标:

这个功能很简单只要一个ClipCursor()就可以搞定了。

program Project1;

{$APPTYPE CONSOLE}

uses Windows;

var
  r0, r1: TRect;
begin
  WriteLn('别害怕!15秒后你的鼠标就可以使用了! ^_^');

  GetClipCursor(r0); //获取当前鼠标的活动范围

  // 设置新的鼠标活动范围
  r1.Left := 0;
  r1.Top := 0;
  r1.Right := 1;
  r1.Bottom := 1;
  ClipCursor(@r1);

  // 暂停15秒
  Sleep(15000);

  // 回复原来的鼠标活动范围
  ClipCursor(@r0);
end.

2. 锁定键盘:

锁键盘一般用钩子实现,所以难度稍大,不过下面这个程序当简单,而且连钩子所需要DLL也省了。

program Project1;

{$APPTYPE CONSOLE}

uses Windows;

// 处理按键消息的过程函数
function KeyHook(code: integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
  Result := 1;  // 返回1可使键盘停止响应
end;

var
  s: string;
begin
  s := '程序将在15秒之后返回' + #13#10 +
       '嘿嘿15秒内你的键盘是无法工作的哦!';

  WriteLn(s);

  // 安装键盘钩子
  SetWindowsHookEx(WH_KEYBOARD, @KeyHook, hInstance, 0);

  Sleep(15000);
end.

因为是Console程序,所以随着程序的结束钩子也就OVER了,所以我并没有卸载钩子。

钩子果然是强大,学会使用钩子你的水平就不一般了^_^。

3. 关闭显视器:

这个也是相当简单的。

program Project1;

{$APPTYPE CONSOLE}

uses Windows, Messages;

begin
  // 关闭显示器
  SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, 2);

  Sleep(10000);

  // 打开显示器
  SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, -1);
end.

要是你够毒的话可以让它自动运行,开机就黑屏,任你杀毒水平再高,嘿嘿,没有显示器看你怎么杀……

4. 关闭所有窗口:

只需这一句就行了。

PostMessage(HWND_BROADCAST, WM_CLOSE, 0, 0);

5. 锁定光驱:

其实说让“光驱跳舞”更合适,以下的程序可以打开并关闭光驱。

program Project1;

{$APPTYPE CONSOLE}

uses MMSystem;

begin
  // 打开
  mciSendString('Set cdaudio door open wait', nil, 0, 0);

  // 关闭
  mciSendString('Set cdaudio door closed wait', nil, 0, 0);
end.

如果你弄个死循环,就可以让他的光驱好好活动活动了^_^

6. 制造噪音:

大多时候我们要隐藏自己,但有时候我们就需要给对方放点音乐,小小的“提示”一下,以证明我们的存在。

program Project1;

{$APPTYPE CONSOLE}

uses Windows;

var
  i, j: Integer;
begin
  for j := 450 to 499 do
  begin
    for i := 1000 to 1109 do
    begin
      Beep(i, 30);
      Sleep(100);
    end;
  end;
end.

关键就是一个Beep(),第一个参数为赫兹第二个为音长你可以自己试一下,弄点好听的。

7.隐藏桌面:

其实桌面与任务栏也是一种窗口,我们可以通过FindWindow来查找它们的句柄,然后通过ShowWindow()来隐藏或显视,其中桌面类名为ProgMan,而任务栏类名为Shell_TrayWnd。

program Project1;

{$APPTYPE CONSOLE}

uses Windows;

var
  DesktopHand, TrayWndHand: THandle;
begin
  DesktopHand := FindWindow('ProgMan', nil);
  TrayWndHand := FindWindow('Shell_TrayWnd', nil);

  ShowWindow(TrayWndHand, SW_HIDE);  // 隐藏任务栏
  ShowWindow(DesktopHand, SW_HIDE);  // 隐藏桌面

  Write('15秒后会自动出现桌面 请等待');

  Sleep(15000);

  ShowWindow(DesktopHand, SW_SHOW);  // 显示桌面
  ShowWindow(TrayWndHand, SW_SHOW);  // 显示任务栏
end.
posted @ 2008-08-12 23:20  可乐罐  阅读(1617)  评论(6编辑  收藏  举报