• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Delphi > Delphi实现木马文件传输代码实例

Delphi实现木马文件传输代码实例

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了delphi串口通信实例,delphi多线程实例,delphi 7编程实例教程,delphi实例教程,delphi7数据库实例等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

本文以实例形式讲述了Delphi下木马的文件传输方法的实现过程,具体步骤如下:

服务器端代码:

unit ServerFrm;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ComCtrls, StdCtrls, ExtCtrls,WinSock;

type
 TfrmMain = class(TForm)
  Panel1: TPanel;
  Label1: TLabel;
  edtPort: TEdit;
  Panel2: TPanel;
  stabar: TStatusBar;
  SaveDialog: TSaveDialog;
  btnListen: TButton;
  btnReceive: TButton;
  btnStop: TButton;
  btnExit: TButton;
  procedure FormCreate(Sender: TObject);
  procedure btnExitClick(Sender: TObject);
  procedure FormClose(Sender: TObject; var Action: TCloseAction);
  procedure btnListenClick(Sender: TObject);
  procedure btnReceiveClick(Sender: TObject);
  procedure btnStopClick(Sender: TObject);
 private
  { Private declarations }
 public
  { Public declarations }
  StopTrans:Boolean; //是否停止传送开关
  InTrans:Boolean; //表示正在接收文件
  Server:TSocket; //定义服务器端的socket句柄
  //自定义过程接收文件
  procedure RecvFile(FileName:String);
 end;

var
 frmMain: TfrmMain;

const
 BlockLen=1024*4;

implementation

{$R *.dfm}

procedure tfrmmain.RecvFile(FileName:String);
var
 Ftrans:file of Byte;
 Recelen:Integer;
 Blockbuf:array[0..BlockLen-1] of Byte;
 RecvSocket:TSocket;
 ra:Sockaddr_in;
 ra_len:integer;
begin
 ra_len:=sizeof(ra);
 Recvsocket:=accept(server,@ra,@ra_len);
 assignFile(Ftrans,filename);
 rewrite(ftrans);
 stoptrans:=false;
 intrans:=true;
 recelen:=recv(recvsocket,Blockbuf,BlockLen,0);
 while (recelen>0) and (not StopTrans) do
 begin
  BlockWrite(Ftrans,Blockbuf[0],BlockLen);
  application.ProcessMessages;
  recelen:=recv(recvsocket,Blockbuf,Blocklen,0);
  if stoptrans then
  begin
   CloseFile(Ftrans);
   CloseSocket(RecvSocket);
   InTrans:=False;
   MessageBox(Handle,'停止传输!','提示',MB_OK);
   EXIT;
  END;
 END;
 //关闭文件,接收的SOCKET
 CloseFile(Ftrans);
 Closesocket(recvsocket);
 InTrans:=False;
 if (Recelen=SOCKET_ERROR) then
  messagebox(handle,'传输异常终止!','提示',MB_OK)
 ELSE
  MESSAGEBOX(HANDLE,'客户端已经关闭连接1,文件可能已经传送完毕了!','提示',MB_OK);

end; 

procedure TfrmMain.FormCreate(Sender: TObject);
var
 aWSAData:TWSAData;
begin
 if WSAStartup($0101,aWSAData)<>0 then
  raise Exception.Create('不能启动WinSock动态链接库');
 messageBox(Handle,aWSAdata.szDescription ,'WinSock动态链接库版本',mb_ok);

end;

procedure TfrmMain.btnExitClick(Sender: TObject);
begin
 Close;
end;

procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 if InTrans then
  if MessageBox(handle,'正在接收文件,停止吗?','提示',MB_YESNO)=IDNO then
   abort;

 IF SERVER<>INVALID_SOCKET THEN
   CLOSESOCKET(SERVER);
  //释放winsock动态链接库所创建的资源
 if WSACleanup<>0 then
  messagebox(handle,'清除Winsock动态链接库错误!','提示',MB_OK)
 ELSE
  messagebox(handle,'清除Winsock动态链接库成功!','提示',MB_OK);

end;

procedure TfrmMain.btnListenClick(Sender: TObject);
var
 ca:SOCKADDR_IN;
begin
 //创建服务器端SOCKET
 Server:=Socket(PF_INET,SOCK_STREAM,IPPROTO_IP);
 IF server=invalid_socket then
 begin
  stabar.SimpleText :='创建接收SOCKET错误1';
  exit;
 end;
 //绑定服务器端SOCKET
 ca.sin_family :=PF_INET;
 CA.sin_port :=htons(strtoint(trim(edtPort.Text )));
 ca.sin_addr.S_addr :=INADDR_ANY;
 if bind(server,ca,sizeof(ca))=socket_error then
 begin
  stabar.SimpleText :='绑定socket错误,请更改接收端口';
  closeSocket(server);
  exit;
 end
 else
  stabar.SimpleText :='绑定接收端socket成功!';

 //开始监听
 listen(server,5);
 btnlisten.Enabled :=False;
 btnstop.Enabled :=true;

end;

procedure TfrmMain.btnReceiveClick(Sender: TObject);
begin
 if (server=INVALID_SOCKET) THEN
 BEGIN
  MESSAGEBOX(HANDLE,'还没有进行监听,请先进行监听!','提示',MB_OK);
  EXIT;
 END;
 IF SaveDialog.Execute THEN
  RECVFILE(SaveDialog.FileName );
  
end;

procedure TfrmMain.btnStopClick(Sender: TObject);
begin
 STOPTRANS:=TRUE;
 IF SERVER<>INVALID_SOCKET THEN cLOSESOCKET(SERVER);
 //此处需要说明
 server:=INVALID_SOCKET;
 bTNSTOP.Enabled :=fALSE;
 BTNlISTEN.Enabled :=TRUE;
end;

end.
</div>

客户端代码:

unit ClientFrm;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ComCtrls,WinSock;

type
 TfrmMain = class(TForm)
  opendfile: TOpenDialog;
  Label1: TLabel;
  edtIP: TEdit;
  Label2: TLabel;
  edtPort: TEdit;
  StatusBar: TStatusBar;
  btnConnect: TButton;
  btnSend: TButton;
  btnStop: TButton;
  btnExit: TButton;
  ProgressBar: TProgressBar;
  procedure FormCreate(Sender: TObject);
  procedure btnExitClick(Sender: TObject);
  procedure FormClose(Sender: TObject; var Action: TCloseAction);
  procedure btnConnectClick(Sender: TObject);
  procedure btnSendClick(Sender: TObject);
  procedure btnStopClick(Sender: TObject);
 private
  { Private declarations }
   Client:TSocket;
 public
  { Public declarations }
  StopTrans:Boolean; //是否停止发送的开发
  InTrans:Boolean;  //表示是否正在传送文件
  procedure TransFile(FileName:String); //传递文件的过程
 end;

 const BlockLen=1024*4; //每次发送的最大数据量

var frmMain: TfrmMain;

implementation{$R *.dfm}

procedure TfrmMain.TransFile(FileName:String); //传递文件的过程
var
 Ftrans:file of Byte;
 Flen:integer;
 BlockNum,RemainLen:integer;
 BlockBuf:array[0..BlockLen-1] of Byte;
 i:integer;
 SendLen:Integer;
begin
 assignFile(Ftrans,filename);
 reset(Ftrans);
 Flen:=FileSize(Ftrans);
 BlockNum:=Flen div BlockLen;
 progressBar.Max :=1+BlockNum;
 RemainLen:=Flen mod BlockLen;
 StopTrans:=False;
 InTrans:=True;
 SendLen:=1;
 for i:=0 to BlockNum-1 do
 begin
  if (StopTrans) or (SendLen<=0) then Break;
  BlockRead(Ftrans,Blockbuf[0],BlockLen);
  SendLen:=Send(Client,Blockbuf,BlockLen,0);
  ProgressBar.Position :=i;
  Application.processMessages;
 end;
 if StopTrans then
 begin
  CloseFile(Ftrans);
  InTrans:=False;
  StatusBar.SimpleText :='';
  MessageBox(Handle,'停止传输!','提示',mb_ok);
  progressbar.Position :=0;
  exit;
 end;
 if (SendLen<=0) then
 begin
  CloseFile(Ftrans);
  InTrans:=False;
  StatusBar.SimpleText :='';
  messagebox(handle,'传出异常终止!','提示',MB_OK);
  progressBar.Position :=0;
  exit;
 end;
 if remainLen>0 then
 begin
  BlockRead(Ftrans,BlockBuf[0],RemainLen);
  SendLen:=send(client,BlockBuf,Remainlen,0);
  if (sendLen<=0) then
  begin
   closeFile(Ftrans);
   InTrans:=False;
   StatusBar.SimpleText :='';
   messagebox(handle,'传输异常终止!','提示',mb_ok);
   progressBar.Position :=0;
   exit;
  end;
 end;
 progressBar.Position :=ProgressBar.Max ;
 CloseFile(Ftrans);
 InTrans:=False;
 StatusBar.SimpleText :='';
 messagebox(handle,'传输完成!','提示',mb_ok);
 progressbar.Position :=0;

end;

procedure TfrmMain.FormCreate(Sender: TObject);
var
 aWSAData:TWSAData;
begin
 if WSAStartup($0101,aWSAData)<>0 then
  raise Exception.Create('不能启动WinSock动态链接库');
 messageBox(Handle,aWSAdata.szDescription ,'WinSock动态链接库版本',mb_ok);

end;

procedure TfrmMain.btnExitClick(Sender: TObject);
begin
 Close;
end;

procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 if InTrans then
  if MessageBox(handle,'正在传输文件,停止吗?','提示',MB_YESNO)=IDNO then
   abort;
  //释放winsock动态链接库所创建的资源
  if WSACleanup<>0 then
   messagebox(handle,'清除Winsock动态链接库错误!','提示',MB_OK)
  ELSE
   messagebox(handle,'清除Winsock动态链接库成功!','提示',MB_OK);
  CloseSocket(Client);
end;

procedure TfrmMain.btnConnectClick(Sender: TObject);
var
 ca:SOCKADDR_IN;
 hostaddr:u_long;
begin
 Client:=



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Delphi实现木马文件传输代码实例
  • Delphi实现图片滚动切换的完整实例代码
  • Delphi实现读取系统时间与日期完整实例
  • Delphi实现碰撞球体完整实例代码
  • Delphi实现树型结构具体实例
  • Delphi 生成excel中饼图的实例代码
  • Delphi隐藏TPageControl的标签实例介绍

相关文章

  • 2017-05-28在Delphi实现在数据库中存取图像的图文演示无错
  • 2017-05-28Delphi7中Listview的常用功能汇总
  • 2017-05-28Delphi2007编译的程序在Win7下图标模糊的解决办法
  • 2017-05-28delphi字符串分隔函数用法实例
  • 2017-05-28Delphi Command模式
  • 2017-05-28Delphi实现碰撞球体完整实例代码
  • 2017-05-28Delphi实现获取磁盘空间大小的方法
  • 2017-05-28Delphi下OpenGL2d绘图之画点的方法
  • 2017-05-28delphi程序全屏显示无标题栏覆盖整个屏幕(适合屏保)
  • 2017-05-28Delphi7中群发Email邮件的方法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Delphi实现毫秒级别的倒计时实例代码
    • delphi简单判断程序30秒没有键盘和鼠标动作示例
    • Delphi控件ListView的属性及使用方法详解
    • c# 多线程编程 入门篇
    • delphi7连接mysql5的实现方法
    • Delphi实现图片滚动切换的完整实例代码
    • delphi xe 可用的MD5算法
    • Delphi下OpenGL2d绘图之画四边形的方法
    • Delphi下OpenGL2d绘图之画线的方法
    • TImage组件实现保存图片到Stream

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有