Artikel ini menjelaskan proses implementasi metode transfer file Trojan di Delphi dalam bentuk contoh. Langkah-langkah spesifiknya adalah sebagai berikut:
Kode sisi server:
unit ServerFrm;antarmuka menggunakan Windows, Pesan, SysUtils, Varian, Kelas, Grafik, Kontrol, Formulir, Dialog, ComCtrls, StdCtrls, ExtCtrls,WinSock;type TfrmMain = class(TForm) Panel1: TPanel; Label1: edtPort: TEdit; : TPanel; bilah: TStatusBar; TSaveDialog; btnListen: TButton; btnReceive: TButton; btnStop: TButton; btnExit: TButton; prosedur FormCreate(Pengirim: TObject); Pengirim: TObject); prosedur btnReceiveClick(Sender: TObject); procedure btnStopClick(Sender: TObject); private { Deklarasi pribadi } public { Deklarasi publik } StopTrans:Boolean; //Apakah akan menghentikan transmisi switchInTrans:Boolean; :TSocket; / /Tentukan pegangan soket di sisi server//Proses yang disesuaikan untuk menerima prosedur file RecvFile(NamaFile:String end;var frmMain); TfrmMain;const BlockLen=1024*4;implementasi{$R *.dfm}prosedur tfrmmain.RecvFile(FileName:String);var Ftrans:file Byte; Byte; RecvSocket:TSocket; ra:Sockaddr_in; ra_len:integer;mulai ra_len:=sizeof(ra); Recvsocket:=accept(server,@ra,@ra_len); tugaskanFile(Ftrans,nama file); :=recv(recvsocket,Blockbuf,BlockLen,0); while (recelen>0) dan (tidak StopTrans) mulai BlockWrite(Ftrans,Blockbuf[0],BlockLen); application.ProcessMessages; recelen:=recv(recvsocket,Blockbuf,Blocklen,0); =Salah;Kotak Pesan(Tangani,'Hentikan transmisi!','Prompt',MB_OK); EXIT; END; END; //Tutup file, terima SOCKET CloseFile(Ftrans); Closesocket(recvsocket); InTrans:=False; ,MB_OK) LAINNYA MESSAGEBOX(HANDLE,'Klien telah menutup koneksi 1, file mungkin telah ditransfer!','Prompt',MB_OK);end; procedure TfrmMain.FormCreate(Sender: TObject);var aWSAData:TWSAData;begin if WSAStartup($0101 ,aWSAData)<>0 lalu naikkan Exception.Create('Tidak dapat memulai perpustakaan tautan dinamis WinSock'); messageBox(Handle,aWSAdata.szDescription,'Versi pustaka tautan dinamis WinSock',mb_ok);akhir;prosedur TfrmMain.btnExitClick(Pengirim: TObject);mulai Tutup;akhir;prosedur TfrmMain.FormClose(Pengirim: TObject; var Aksi: TCloseAction) ;mulai jika InTrans lalu jika MessageBox(menangani,'Menerima file, berhenti? ','Prompt',MB_YESNO)=IDNO lalu batalkan; IF SERVER<>INVALID_SOCKET THEN CLOSESOCKET(SERVER); //Lepaskan sumber daya yang dibuat oleh pustaka tautan dinamis winock jika WSACleanup<>0 lalu messagebox(handle,'Hapus Winsock kesalahan perpustakaan tautan dinamis! ','prompt',MB_OK) LAINNYA messagebox(menangani,'Berhasil menghapus pustaka tautan dinamis Winsock!','Prompt',MB_OK);end;prosedur TfrmMain.btnListenClick(Pengirim: TObject);var ca:SOCKADDR_IN;begin //Buat SOCKET Server sisi server:=Socket ( PF_INET,SOCK_STREAM,IPPROTO_IP); JIKA server=invalid_socket lalu mulai stabar.SimpleText :='Buat dan terima kesalahan SOCKET 1'; exit end; //Ikat SOCKET sisi server ca.sin_family :=PF_INET; ca.sin_addr .S_addr :=INADDR_ANY; jika bind(server,ca,sizeof(ca))=socket_error maka mulai stabar.SimpleText :='Kesalahan pengikatan soket, harap ubah port penerima'; closeSocket(server); end else stabar.SimpleText :='Pengikatan soket penerima berhasil!'; Diaktifkan :=Salah; btnstop.Diaktifkan :=true;end;prosedur TfrmMain.btnReceiveClick(Pengirim: TObject);mulai jika (server=INVALID_SOCKET) LALU BEGIN MESSAGEBOX(HANDLE,'Belum mendengarkan, harap dengarkan dulu!','Prompt',MB_OK END;prosedur TfrmMain. btnStopClick(Pengirim: TObject);mulai STOPTRANS:=TRUE; JIKA SERVER<>INVALID_SOCKET THEN cLOSESOCKET(SERVER); //Server:=INVALID_SOCKET perlu disebutkan di sini;
Kode klien:
unit ClientFrm;antarmukamenggunakan Windows, Pesan, SysUtils, Varian, Kelas, Grafik, Kontrol, Formulir, Dialog, StdCtrls, ComCtrls,WinSock;ketik TfrmMain = class(TForm) opendfile: TOpenDialog Label1: TLabel; ; edtPort: TEdit; StatusBar: TStatusBar; btnConnect: TButton; btnSend: TButton; btnStop: TButton; btnExit: TButton; ProgressBar: TProgressBar; prosedur FormCreate(Pengirim: TObject); btnConnectClick(Pengirim: TObject); btnSendClick(Sender: TObject); procedure btnStopClick(Sender: TObject); private { Deklarasi pribadi } Klien:TSocket; public { Deklarasi publik } StopTrans:Boolean; //Apakah akan berhenti mengirim developmentInTrans:Boolean; sedang berlangsung Prosedur file TransFile(NamaFile:String); //Proses transfer file berakhir; const BlockLen=1024*4; //Jumlah data maksimum yang dikirim setiap kali var frmMain: TfrmMain;implementasi{$R *.dfm}prosedur TfrmMain.TransFile(NamaFile:String); //Proses transfer file var Ftrans:file dari Flen:integer; 0 ..BlockLen-1] dari Byte; i:integer; SendLen:Integer;begin tugaskanFile(Ftrans,namafile); reset(Ftrans);Flen:=Ukuran File(Ftrans); =Benar; SendLen:=1; untuk i:=0 hingga BlockNum-1 dimulai jika (StopTrans) atau (SendLen<=0) lalu Break; lalu mulai CloseFile(Ftrans); InTrans:=False; StatusBar.SimpleText :=''; MessageBox(Tangani,'Hentikan transmisi!','Prompt',mb_ok); :='';kotak pesan(pegangan,'Penghentian keluar yang tidak normal!','Prompt',MB_OK); lalu mulai BlockRead(Ftrans,BlockBuf[0],RemainLen);=send(client,BlockBuf,Remainlen,0); if (sendLen<=0) lalu mulai closeFile(Ftrans:=False; :='';kotak pesan(pegangan,'Transmisi dihentikan secara tidak normal!','Prompt',mb_ok); end; end; progressBar.Position :=ProgressBar.Max ; CloseFile(Ftrans);=False; StatusBar.SimpleText :=''; Posisi :=0;akhir;prosedur TfrmMain.FormCreate(Pengirim: TObject);var aWSAData:TWSAData;mulai jika WSAStartup($0101,aWSAData)<>0 lalu naikkan Exception.Create('Tidak dapat memulai perpustakaan tautan dinamis WinSock'); messageBox(Handle,aWSAdata.szDescription,'Versi perpustakaan tautan dinamis WinSock',mb_ok);end;prosedur TfrmMain.btnExitClick (Pengirim: TObject);mulai Tutup;akhir;prosedur TfrmMain.FormClose(Pengirim: TObject; var Action: TCloseAction);mulai jika InTrans lalu if MessageBox(menangani,'Transmisi file, berhenti? ','Prompt',MB_YESNO)=IDNO lalu batalkan; //Lepaskan sumber daya yang dibuat oleh pustaka tautan dinamis winock jika WSACleanup<>0 lalu kotak pesan(tangani,'Hapus kesalahan pustaka tautan dinamis Winsock!','Prompt',MB_OK) ELSE messagebox(handle,'Berhasil menghapus pustaka tautan dinamis Winsock!','Prompt',MB_OK); TfrmMain.btnConnectClick(Pengirim: TObject);var ca:SOCKADDR_IN; hostaddr:u_long;begin Client:=Socket(PF_INET,SOCK_STREAM,IPPROTO_IP); IF CLIENT=INVALID_SOCKET MAKA MULAI StatusBar.SimpleText :='Buat COSKET untuk menghubungkan ke remote Kesalahan server!'; keluar; :=PF_INET; CA.sin_port :=HTONS(STRTOINT(TRIM(EDTpORT.Text ))); HOSTADDR:=INET_ADDR(PCHAR(TRIM(EDTIP.Text ))); -1 ) lalu mulai StatusBar.SimpleText :='Alamat IP host:'+trim(edtip.Text)+'Error'; keluar dari yang lain; ca.sin_addr.S_addr :=hostaddr; //Hubungkan ke server jika connect(Client,ca,sizeof(ca))<>0 lalu mulai StatusBar.SimpleText :='SOCKET error saat menyambung ke server!'; else StatusBar. SimpleText :='Berhasil terhubung ke SOCKET jarak jauh!';akhir;prosedur TfrmMain.btnSendClick(Pengirim: TObject);mulai jika (opendfile.Execute ) dan (FileExists(opendfile.FileName )) lalu transFile(opendfile.FileName );end;prosedur TfrmMain.btnStopClick(Sender: TObject);begin Stoptrans:=True;end;end.